APP_CONNECTIVITY_REDESIGN: ConnectionsPaletteTest.java

File ConnectionsPaletteTest.java, 9.8 KB (added by kyli, 16 years ago)

ConnectionsPaletteTest.java

Line 
1package org.sophie2.main.func.servers;
2
3import java.util.HashMap;
4import java.util.List;
5import java.util.Map;
6
7import javax.swing.JList;
8
9import org.jmock.Expectations;
10import org.jmock.Mockery;
11import org.junit.After;
12import org.junit.Before;
13import org.junit.Test;
14import org.sophie2.base.connectivity.Account;
15import org.sophie2.base.connectivity.Connector;
16import org.sophie2.base.connectivity.facade.FacadeR4;
17import org.sophie2.base.connectivity.facade.Response;
18import org.sophie2.base.dialogs.BaseDialogsModule;
19import org.sophie2.base.dialogs.TestingDialogManager;
20import org.sophie2.base.layout.BaseLayoutModule;
21import org.sophie2.base.model.resources.r4.LocationPrefix;
22import org.sophie2.base.model.resources.r4.ResourceRef;
23import org.sophie2.base.model.resources.r4.keys.Key;
24import org.sophie2.base.model.resources.r4.keys.SimpleKey;
25import org.sophie2.base.model.resources.r4.resources.ResourceR4;
26import org.sophie2.base.skins.BaseSkinsModule;
27import org.sophie2.base.visual.BaseVisualModule;
28import org.sophie2.core.logging.SophieLog;
29import org.sophie2.core.modularity.FakeModuleRegistry;
30import org.sophie2.core.modularity.SimpleSophieExtension;
31import org.sophie2.core.modularity.SophieExtension;
32import org.sophie2.core.modularity.SophieExtensionPoint;
33import org.sophie2.core.modularity.SophieModule;
34import org.sophie2.core.mvc.CoreMvcModule;
35import org.sophie2.core.prolib.interfaces.ListProp;
36import org.sophie2.core.testing.IntegrationTestBase;
37import org.sophie2.main.app.commons.MainAppModule;
38import org.sophie2.main.dialogs.input.MessageDialogInput;
39import org.sophie2.main.func.servers.view.ConnectionsPalette;
40import org.sophie2.main.func.servers.view.ServersTab;
41import org.sophie2.main.func.servers.view.ConnectionsPalette.ConnectionItem;
42import org.sophie2.main.layout.mydoggy.LayoutMyDoggyModule;
43
44/**
45 * Tests the {@link ConnectionsPalette} and thus the {@link AccountManager}'s correct work.
46 * @author tsachev, kyli
47 */
48public class ConnectionsPaletteTest extends IntegrationTestBase {
49        public static interface MockerySupport {
50                Mockery getMockery();
51        }
52       
53        public static class MockResource extends ResourceR4 {
54                public static final Key<Integer> KEY_MOCK_DUMMY = new SimpleKey<Integer>(
55                                "mock-dummy", Integer.class, null); 
56        }
57       
58
59        public static class MockFacadeConnectorModule extends SophieModule {
60
61                @Override
62                protected void defineExtensionPoints(List<SophieExtensionPoint<?>> res) {
63                        // No extension points
64                }
65
66                @Override
67                protected void defineExtensions(List<SophieExtension<?>> res) {
68
69                        class MockeryConnector implements Connector, MockerySupport {
70                                private final Mockery mockContext = new Mockery();
71
72                                @Override
73                                public Mockery getMockery() {
74                                        return mockContext;
75                                }
76
77                                private FacadeR4 facade = mockContext.mock(FacadeR4.class);
78
79                                @Override
80                                public boolean supports(String serverUrl) {
81                                        assert serverUrl != null;
82                                        return serverUrl.startsWith("mock");
83                                }
84
85                                @Override
86                                public FacadeR4 getFacade(String serverUrl) {
87                                        return this.facade;
88                                }
89                        }
90                        res.add(new SimpleSophieExtension<Connector>(Connector.class,
91                                        new MockeryConnector()));
92
93                }
94        }
95
96
97        @SuppressWarnings("unchecked")
98        @Before
99        @Override
100        protected void setUp() throws Exception {
101                super.setUp();
102                TestingDialogManager.beginTesting();
103                FakeModuleRegistry.start(CoreMvcModule.class, BaseDialogsModule.class,
104                                MainAppModule.class, MockFacadeConnectorModule.class,
105                                MainFuncServersModule.class, BaseLayoutModule.class,
106                                BaseVisualModule.class, LayoutMyDoggyModule.class,
107                                BaseSkinsModule.class);
108        }
109
110        @After
111        protected void tearDown() throws Exception {
112                FakeModuleRegistry.stop();
113                AccountManager.instance = null;
114                ServerResourceLocator.instance = null;
115                TestingDialogManager.endTesting();
116                super.tearDown();
117        }
118
119        @Test
120        public void testConnect() {
121                SophieLog.debug("testConnect");
122                ConnectionsPalette connectionsPalette = BaseVisualModule.get()
123                                .findProvider(ConnectionsPalette.class, ServersTab.class, null)
124                                .create(ConnectionsPalette.class);
125                assertTrue(connectionsPalette.items().get().isEmpty());
126                AccountManager accountManager = AccountManager.get();
127
128                final String serverUrl = "mock://s2s";
129
130                Account testAccount = accountManager.createNewAccount(serverUrl,
131                                "test", "test");
132                ConnectionItem connectionItem = connectionsPalette.items().get(0);
133
134                Connector connector = MainFuncServersModule.get().getConnectorPoint()
135                                .extensions().get(0).getObject();
136                assert connector instanceof MockerySupport;
137                final FacadeR4 mockFacade = connector.getFacade(serverUrl);
138                Mockery mockery = ((MockerySupport) connector).getMockery();
139                mockery.checking(new Expectations() {
140                        {
141                                oneOf(mockFacade).openSession();
142                                will(returnValue(Response.createSuccessfulResponse("123")));
143
144                        }
145                });
146
147                assertTrue(testAccount.equals(connectionItem.account().get()));
148                assertFalse(testAccount.autoConnect().get());
149                assertFalse(connectionItem.connected().get());
150                accountManager.connect(testAccount);
151
152                assertTrue(accountManager.isConnected(testAccount));
153
154        }
155
156        @Test
157        public void testConnectionFailed() {
158                SophieLog.debug("testConnectionFailed");
159                ConnectionsPalette connectionsPalette = BaseVisualModule.get()
160                                .findProvider(ConnectionsPalette.class, ServersTab.class, null)
161                                .create(ConnectionsPalette.class);
162                assertTrue(connectionsPalette.items().get().isEmpty());
163                AccountManager accountManager = AccountManager.get();
164
165                final String serverUrl = "mock://s2s";
166
167                Account testAccount = accountManager.createNewAccount(serverUrl,
168                                "test", "test");
169                ListProp<ConnectionItem> items = connectionsPalette.items();
170
171                ConnectionItem connectionItem = items.get(items.size() - 1);
172
173                Connector connector = MainFuncServersModule.get().getConnectorPoint()
174                                .extensions().get(0).getObject();
175                assert connector instanceof MockerySupport;
176                assertTrue(testAccount.equals(connectionItem.account().get()));
177                assertFalse(testAccount.autoConnect().get());
178                assertFalse(connectionItem.connected().get());
179
180                final FacadeR4 mockFacade = connector.getFacade(serverUrl);
181                Mockery mockery = ((MockerySupport) connector).getMockery();
182                mockery.checking(new Expectations() {
183                        {
184                                oneOf(mockFacade).openSession();
185                                will(returnValue(new Response<Void>(null, 1, "Timeout")));
186
187                        }
188                });
189                accountManager.connect(testAccount);
190                assertFalse(accountManager.isConnected(testAccount));
191        }
192
193        @Test
194        public void testConnectionsList() {
195                SophieLog.debug("testConnectionsList");
196                ConnectionsPalette connectionsPalette = BaseVisualModule.get()
197                                .findProvider(ConnectionsPalette.class, ServersTab.class, null)
198                                .create(ConnectionsPalette.class);
199
200                assertTrue(connectionsPalette.items().get().isEmpty());
201
202                AccountManager accountManager = AccountManager.get();
203
204                final String serverUrl = "mock://s2s";
205
206                Account testAccount = accountManager.createNewAccount(serverUrl,
207                                "test", "test");
208                ListProp<ConnectionItem> items = connectionsPalette.items();
209                JList jList = connectionsPalette.list().get();
210                int index = items.size() - 1;
211                jList.setSelectedIndex(index);
212
213                Connector connector = MainFuncServersModule.get().getConnectorPoint()
214                                .extensions().get(0).getObject();
215                assert connector instanceof MockerySupport;
216                final FacadeR4 mockFacade = connector.getFacade(serverUrl);
217                Mockery mockery = ((MockerySupport) connector).getMockery();
218                mockery.checking(new Expectations() {
219                        {
220                                oneOf(mockFacade).openSession();
221                                will(returnValue(Response.createSuccessfulResponse("1234321")));
222                                oneOf(mockFacade).closeSession();
223                                will(returnValue(new Response<Void>(null, 0, "")));
224
225                        }
226                });
227
228                TestingDialogManager.get().expect(
229                                new TestingDialogManager.BaseExpected(MessageDialogInput.class,
230                                                null));
231
232                ConnectionItem connectionItem = connectionsPalette.items().get(index);
233
234                assertFalse(accountManager.isConnected(testAccount));
235                assertFalse(connectionItem.connected().get());
236
237                SophieLog.debug(connectionItem.render());
238
239                connectionsPalette.toggleButton().get().actionPerformed(null);
240
241                assertTrue(accountManager.isConnected(testAccount));
242                assertTrue(connectionItem.connected().get());
243                SophieLog.debug(connectionItem.render());
244        }
245
246        @Test
247        public void testOpenResource() {
248                ConnectionsPalette connectionsPalette = BaseVisualModule.get()
249                                .findProvider(ConnectionsPalette.class, ServersTab.class, null)
250                                .create(ConnectionsPalette.class);
251
252                final String serverUrl = "mock://s2s";
253                Connector connector = MainFuncServersModule.get().getConnectorPoint()
254                                .extensions().get(0).getObject();
255                final FacadeR4 mockFacade = connector.getFacade(serverUrl);
256                Mockery mockery = ((MockerySupport) connector).getMockery();
257                final ResourceRef mockResourceRef = ResourceRef
258                                .make(LocationPrefix.NULL + "s2s/mockResource");
259               
260               
261                final Map<Key<?>, Object> modelWrites = new HashMap<Key<?>, Object>();
262                modelWrites.put(MockResource.KEY_MOCK_DUMMY, 24);
263               
264               
265               
266               
267               
268               
269                mockery.checking(new Expectations() {
270                        private final String mockSessionId = "mockSessionId";
271                       
272                        {
273                                oneOf(mockFacade).openSession();
274                                will(returnValue(Response.createSuccessfulResponse(
275                                                mockSessionId, "Session opened")));
276                                oneOf(mockFacade).closeSession();
277                                will(returnValue(new Response<Void>(null, 0, "Session closed")));
278                                oneOf(mockFacade).getResourceModel(mockSessionId,
279                                                mockResourceRef, MockResource.KEY_ROOT);
280                                will(returnValue(Response.createSuccessfulResponse(modelWrites)));
281                        }
282                });
283
284                assertTrue(connectionsPalette.items().get().isEmpty());
285                Account account = AccountManager.get().createNewAccount(serverUrl,
286                                null, null);
287                AccountManager.get().connect(account);
288               
289               
290//              // call the facade's getResourceModel
291//              // create an empty model, apply changes to it.
292//              Map<Key<?>, Object> changes = AccountManager.get().connections().get(0).
293//                      getResourceModel(mockResourceRef, MockResource.KEY_ROOT);
294//             
295//              ResourceModel model = new ResourceModel();
296//              ResourceModel newModel = model.modify(changes);
297//              System.out.println(newModel);
298//              newModel.debugPrint();
299        }
300       
301       
302       
303}