View Javadoc
1   package org.exoplatform.social.core.space.spi;
2   
3   import org.exoplatform.commons.utils.CommonsUtils;
4   import org.exoplatform.container.xml.InitParams;
5   import org.exoplatform.container.xml.ObjectParameter;
6   import org.exoplatform.container.xml.ValueParam;
7   import org.exoplatform.social.core.identity.model.Identity;
8   import org.exoplatform.social.core.identity.provider.SpaceIdentityProvider;
9   import org.exoplatform.social.core.space.SpaceApplication;
10  import org.exoplatform.social.core.space.SpaceTemplate;
11  import org.exoplatform.social.core.space.SpaceTemplateConfigPlugin;
12  import org.exoplatform.social.core.space.impl.DefaultSpaceApplicationHandler;
13  import org.exoplatform.social.core.space.impl.SpaceTemplateServiceImpl;
14  import org.exoplatform.social.core.space.model.Space;
15  import org.exoplatform.social.core.storage.IdentityStorageException;
16  import org.exoplatform.social.core.storage.api.IdentityStorage;
17  import org.exoplatform.social.core.storage.impl.StorageUtils;
18  import org.exoplatform.social.core.test.AbstractCoreTest;
19  
20  import java.util.ArrayList;
21  import java.util.Collections;
22  import java.util.List;
23  import java.util.Map;
24  
25  public class SpaceTemplateServiceTest extends AbstractCoreTest {
26    private SpaceTemplateService spaceTemplateService;
27    private IdentityStorage identityStorage;
28    private List<Space> tearDownSpaceList;
29  
30    @Override
31    public void setUp() {
32      spaceTemplateService = CommonsUtils.getService(SpaceTemplateService.class);
33      identityStorage = CommonsUtils.getService(IdentityStorage.class);
34      spaceService = CommonsUtils.getService(SpaceService.class);
35      tearDownSpaceList = new ArrayList<>();
36    }
37  
38    @Override
39    public void tearDown() throws Exception {
40      end();
41      begin();
42  
43      for (Space space : tearDownSpaceList) {
44        Identity spaceIdentity = identityStorage.findIdentity(SpaceIdentityProvider.NAME, space.getPrettyName());
45        if (spaceIdentity != null) {
46          try {
47            identityStorage.deleteIdentity(spaceIdentity);
48          } catch (IdentityStorageException e) {
49            // It's expected on some identities that could be deleted in tests
50          }
51        }
52        try {
53          spaceService.deleteSpace(space);
54        } catch (Exception e) {
55          // It's expected on some entities that could be deleted in tests
56        }
57      }
58  
59      StorageUtils.persist();
60      super.tearDown();
61    }
62  
63    /**
64     * Test {@link SpaceTemplateService#getSpaceTemplates()}
65     *
66     */
67    public void testGetSpaceTemplates() {
68      // When
69      List<SpaceTemplate> templates = spaceTemplateService.getSpaceTemplates();
70      // Then
71      assertTrue(Collections.unmodifiableList(Collections.EMPTY_LIST).getClass().isInstance(templates));
72    }
73  
74    /**
75     * Test {@link SpaceTemplateService#getSpaceTemplateByName(String)}
76     *
77     */
78    public void testGetSpaceTemplateByName() {
79      // When
80      SpaceTemplate template = spaceTemplateService.getSpaceTemplateByName("classic");
81      SpaceTemplate templateFake = spaceTemplateService.getSpaceTemplateByName("fake");
82      // Then
83      assertEquals(template.getName(), "classic");
84      assertNull(templateFake);
85    }
86  
87    /**
88     * Test {@link SpaceTemplateService#registerSpaceTemplatePlugin(SpaceTemplateConfigPlugin)}
89     *
90     */
91    public void testRegisterSpaceTemplatePlugin() {
92      SpaceApplication homeApplication = new SpaceApplication();
93      homeApplication.setAppTitle("fakeHome");
94      homeApplication.setPortletApp("fakeHomeApp");
95      homeApplication.setPortletName("fakeHomeName");
96  
97      List<SpaceApplication> applicationList = new ArrayList<>();
98      for (int i=0; i<3; i++) {
99        SpaceApplication app = new SpaceApplication();
100       app.setAppTitle("fakeTitle" + i);
101       app.setPortletApp("fakeApp" + i);
102       app.setPortletName("fakeName" + i);
103       applicationList.add(app);
104     }
105     SpaceTemplate spaceTemplate = new SpaceTemplate();
106     spaceTemplate.setName("custom");
107     spaceTemplate.setVisibility("private");
108     spaceTemplate.setRegistration("open");
109     spaceTemplate.setHomeApplication(homeApplication);
110     spaceTemplate.setSpaceApplicationList(applicationList);
111     InitParams params = new InitParams();
112     ObjectParameter objParam = new ObjectParameter();
113     objParam.setName("template");
114     objParam.setObject(spaceTemplate);
115     params.addParameter(objParam);
116     //Given
117     assertEquals(1, spaceTemplateService.getSpaceTemplates().size());
118     //when
119     spaceTemplateService.registerSpaceTemplatePlugin(new SpaceTemplateConfigPlugin(params));
120     // Then
121     assertEquals(2, spaceTemplateService.getSpaceTemplates().size());
122   }
123 
124   /**
125    * Test {@link SpaceTemplateService#extendSpaceTemplatePlugin(SpaceTemplateConfigPlugin)}
126    *
127    */
128   public void testExtendSpaceTemplatePlugin() {
129     List<SpaceApplication> applicationList = new ArrayList<>();
130     for (int i=0; i<3; i++) {
131       SpaceApplication app = new SpaceApplication();
132       app.setAppTitle("fakeTitle" + i);
133       app.setPortletApp("fakeApp" + i);
134       app.setPortletName("fakeName" + i);
135       app.setOrder(4 + i);
136       applicationList.add(app);
137     }
138     SpaceTemplate spaceTemplate = new SpaceTemplate();
139     spaceTemplate.setName("classic");
140     spaceTemplate.setSpaceApplicationList(applicationList);
141     InitParams params = new InitParams();
142     ObjectParameter objParam = new ObjectParameter();
143     objParam.setName("template");
144     objParam.setObject(spaceTemplate);
145     params.addParameter(objParam);
146     //Given
147     SpaceTemplate template = spaceTemplateService.getSpaceTemplateByName("classic");
148     assertEquals(3, template.getSpaceApplicationList().size());
149     //when
150     spaceTemplateService.extendSpaceTemplatePlugin(new SpaceTemplateConfigPlugin(params));
151     // Then
152     ((SpaceTemplateServiceImpl) spaceTemplateService).start();
153     template = spaceTemplateService.getSpaceTemplateByName("classic");
154     assertEquals(6, template.getSpaceApplicationList().size());
155   }
156 
157   /**
158    * Test {@link SpaceTemplateService#registerSpaceApplicationHandler(SpaceApplicationHandler)}
159    *
160    */
161   public void testRegisterSpaceApplicationHandler() {
162     //Given
163     Map<String, SpaceApplicationHandler> handlerMap = spaceTemplateService.getSpaceApplicationHandlers();
164     assertEquals(1, handlerMap.size());
165     InitParams params = new InitParams();
166     ValueParam valueParam = new ValueParam();
167     valueParam.setName("templateName");
168     valueParam.setValue("custom");
169     params.addParameter(valueParam);
170     SpaceApplicationHandler applicationHandler = new DefaultSpaceApplicationHandler(params, null, null, null);
171     //when
172     spaceTemplateService.registerSpaceApplicationHandler(applicationHandler);
173     //then
174     handlerMap = spaceTemplateService.getSpaceApplicationHandlers();
175     assertEquals(2, handlerMap.size());
176   }
177 
178   /**
179    * Test {@link SpaceTemplateService#getSpaceApplicationHandlers()}
180    *
181    */
182   public void testGetSpaceApplicationHandlers() {
183     // When
184     Map<String, SpaceApplicationHandler> handlers = spaceTemplateService.getSpaceApplicationHandlers();
185     // Then
186     assertTrue(Collections.unmodifiableMap(Collections.EMPTY_MAP).getClass().isInstance(handlers));
187   }
188 
189   /**
190    * Test {@link SpaceTemplateService#getDefaultSpaceTemplate()}
191    *
192    */
193   public void testGetDefaultSpaceTemplate() {
194     assertEquals("classic", spaceTemplateService.getDefaultSpaceTemplate());
195   }
196 
197   /**
198    * Test {@link SpaceTemplateService#initSpaceApplications(Space, SpaceApplicationHandler)}
199    *
200    */
201   public void testInitSpaceApplications() throws Exception {
202     // TODO
203   }
204 
205   /**
206    * Test {@link SpaceTemplateService#setApp(Space, String, String, boolean, String)}
207    *
208    */
209   public void testSetApp() throws Exception {
210     startSessionAs("root");
211     Space space = createSpace("mySpace", "root");
212     assertNull(space.getApp());
213     //when
214     spaceTemplateService.setApp(space, "appId", "appName", true, Space.ACTIVE_STATUS);
215     //then
216     assertEquals("appId:appName:true:active", space.getApp());
217   }
218 
219   private Space createSpace(String spaceName, String creator) throws Exception {
220     try {
221       Space space = new Space();
222       space.setDisplayName(spaceName);
223       space.setPrettyName(spaceName);
224       space.setGroupId("/spaces/" + space.getPrettyName());
225       space.setRegistration(Space.OPEN);
226       space.setDescription("description of space" + spaceName);
227       space.setTemplate(DefaultSpaceApplicationHandler.NAME);
228       space.setVisibility(Space.PRIVATE);
229       space.setRegistration(Space.OPEN);
230       space.setPriority(Space.INTERMEDIATE_PRIORITY);
231       String[] managers = new String[] {creator};
232       String[] members = new String[] {creator};
233       space.setManagers(managers);
234       space.setMembers(members);
235       spaceService.saveSpace(space, true);
236       tearDownSpaceList.add(space);
237       return space;
238     } finally {
239       StorageUtils.persist();
240     }
241   }
242 }