Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

CoreNewServerDialogModelTest.java 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. /*
  2. * Copyright (c) 2006-2014 DMDirc Developers
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy
  5. * of this software and associated documentation files (the "Software"), to deal
  6. * in the Software without restriction, including without limitation the rights
  7. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. * copies of the Software, and to permit persons to whom the Software is
  9. * furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  20. * SOFTWARE.
  21. */
  22. package com.dmdirc.ui.core.newserver;
  23. import com.dmdirc.interfaces.ConnectionManager;
  24. import com.dmdirc.interfaces.config.AggregateConfigProvider;
  25. import com.dmdirc.interfaces.config.ConfigProvider;
  26. import com.dmdirc.interfaces.config.IdentityController;
  27. import com.dmdirc.interfaces.ui.NewServerDialogModelListener;
  28. import com.google.common.base.Optional;
  29. import com.google.common.collect.Lists;
  30. import java.net.URI;
  31. import java.net.URISyntaxException;
  32. import org.junit.Before;
  33. import org.junit.Test;
  34. import org.junit.runner.RunWith;
  35. import org.mockito.Mock;
  36. import org.mockito.runners.MockitoJUnitRunner;
  37. import static org.junit.Assert.assertEquals;
  38. import static org.junit.Assert.assertFalse;
  39. import static org.junit.Assert.assertTrue;
  40. import static org.mockito.Matchers.any;
  41. import static org.mockito.Mockito.never;
  42. import static org.mockito.Mockito.verify;
  43. import static org.mockito.Mockito.when;
  44. @RunWith(MockitoJUnitRunner.class)
  45. public class CoreNewServerDialogModelTest {
  46. @Mock private AggregateConfigProvider globalConfig;
  47. @Mock private ConfigProvider userConfig;
  48. @Mock private IdentityController controller;
  49. @Mock private ConnectionManager connectionManager;
  50. @Mock private ConfigProvider profile1;
  51. @Mock private ConfigProvider profile2;
  52. @Mock private NewServerDialogModelListener listener;
  53. @Before
  54. public void setupMocks() {
  55. when(controller.getProvidersByType("profile")).thenReturn(
  56. Lists.newArrayList(profile1, profile2));
  57. when(globalConfig.getOption("newserver", "hostname")).thenReturn("hostname");
  58. when(globalConfig.getOptionInt("newserver", "port")).thenReturn(1111);
  59. when(globalConfig.getOption("newserver", "password")).thenReturn("password");
  60. when(globalConfig.getOptionBool("newserver", "ssl")).thenReturn(true);
  61. }
  62. @Test
  63. public void testGetProfiles() {
  64. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  65. controller, connectionManager);
  66. instance.loadModel();
  67. assertEquals("loadModel: ", Lists.newArrayList(profile1, profile2), instance.
  68. getProfileList());
  69. }
  70. @Test
  71. public void testSelectedProfile() {
  72. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  73. controller, connectionManager);
  74. instance.loadModel();
  75. assertEquals("testSelectedProfile: ", Optional.absent(), instance.getSelectedProfile());
  76. instance.setSelectedProfile(Optional.fromNullable(profile1));
  77. assertEquals("testSelectedProfile", Optional.fromNullable(profile1),
  78. instance.getSelectedProfile());
  79. }
  80. @Test
  81. public void testProfileValidatorEmpty() {
  82. when(controller.getProvidersByType("profile")).thenReturn(
  83. Lists.<ConfigProvider>newArrayList());
  84. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  85. controller, connectionManager);
  86. instance.loadModel();
  87. assertFalse("testProfileValidatorEmpty: ", instance.isProfileListValid());
  88. }
  89. @Test
  90. public void testProfileValidatorNotEmpty() {
  91. when(controller.getProvidersByType("profile")).thenReturn(
  92. Lists.newArrayList(profile1, profile2));
  93. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  94. controller, connectionManager);
  95. instance.loadModel();
  96. assertTrue("testProfileValidatorNotEmpty: ", instance.isProfileListValid());
  97. }
  98. @Test
  99. public void testHostname() {
  100. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  101. controller, connectionManager);
  102. instance.loadModel();
  103. assertEquals("testHostname: ", Optional.fromNullable("hostname"), instance.getHostname());
  104. instance.setHostname(Optional.fromNullable("test"));
  105. assertEquals("testHostname: ", Optional.fromNullable("test"), instance.getHostname());
  106. }
  107. @Test
  108. public void testHostnameValidatorValid() {
  109. when(globalConfig.getOption("newserver", "hostname")).thenReturn("hostname");
  110. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  111. controller, connectionManager);
  112. instance.loadModel();
  113. assertTrue("testHostnameValidatorValid: ", instance.isHostnameValid());
  114. }
  115. @Test
  116. public void testHostnameValidatorInvalid() {
  117. when(globalConfig.getOption("newserver", "hostname")).thenReturn("~!£$^£$%^&");
  118. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  119. controller, connectionManager);
  120. instance.loadModel();
  121. assertFalse("testHostnameValidatorInvalid: ", instance.isHostnameValid());
  122. }
  123. @Test
  124. public void testPort() {
  125. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  126. controller, connectionManager);
  127. instance.loadModel();
  128. assertEquals("testPort: ", Optional.fromNullable(1111), instance.getPort());
  129. instance.setPort(Optional.fromNullable(5678));
  130. assertEquals("testPort: ", Optional.fromNullable(5678), instance.getPort());
  131. }
  132. @Test
  133. public void testPortValidatorValid() {
  134. when(globalConfig.getOptionInt("newserver", "port")).thenReturn(1111);
  135. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  136. controller, connectionManager);
  137. instance.loadModel();
  138. assertTrue("testPortValidatorValid: ", instance.isPortValid());
  139. }
  140. @Test
  141. public void testPortValidatorTooLow() {
  142. when(globalConfig.getOptionInt("newserver", "port")).thenReturn(-1);
  143. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  144. controller, connectionManager);
  145. instance.loadModel();
  146. assertFalse("testPortValidatorTooLow: ", instance.isPortValid());
  147. }
  148. @Test
  149. public void testPortValidatorTooHigh() {
  150. when(globalConfig.getOptionInt("newserver", "port")).thenReturn(65536);
  151. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  152. controller, connectionManager);
  153. instance.loadModel();
  154. assertFalse("testPortValidatorTooHigh: ", instance.isPortValid());
  155. }
  156. @Test
  157. public void testPassword() {
  158. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  159. controller, connectionManager);
  160. instance.loadModel();
  161. assertEquals("testPassword: ", Optional.fromNullable("password"), instance.getPassword());
  162. instance.setPassword(Optional.fromNullable("test"));
  163. assertEquals("testPassword: ", Optional.fromNullable("test"), instance.getPassword());
  164. }
  165. @Test
  166. public void testPasswordValidatorValid() {
  167. when(globalConfig.getOption("newserver", "password")).thenReturn("password");
  168. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  169. controller, connectionManager);
  170. instance.loadModel();
  171. assertTrue("testPasswordValidatorValid: ", instance.isPortValid());
  172. }
  173. @Test
  174. public void testSSL() {
  175. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  176. controller, connectionManager);
  177. instance.loadModel();
  178. assertTrue("testSSL: ", instance.getSSL());
  179. instance.setSSL(false);
  180. assertFalse("testSSL: ", instance.getSSL());
  181. }
  182. @Test
  183. public void testSaveAsDefault() {
  184. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  185. controller, connectionManager);
  186. instance.loadModel();
  187. assertFalse("testSaveAsDefault:", instance.getSaveAsDefault());
  188. instance.setSaveAsDefault(true);
  189. assertTrue("testSaveAsDefault:", instance.getSaveAsDefault());
  190. }
  191. @Test
  192. public void testIsSaveAllowedValid() {
  193. when(globalConfig.getOption("newserver", "hostname")).thenReturn("hostname");
  194. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  195. controller, connectionManager);
  196. instance.loadModel();
  197. assertTrue("testIsSaveAllowedValid: ", instance.isSaveAllowed());
  198. }
  199. @Test
  200. public void testIsSaveAllowedInvalidHostname() {
  201. when(globalConfig.getOption("newserver", "hostname")).thenReturn("~!£$^£$%^&");
  202. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  203. controller, connectionManager);
  204. instance.loadModel();
  205. assertFalse("testIsSaveAllowedInvalidHostname: ", instance.isSaveAllowed());
  206. }
  207. @Test
  208. public void testIsSaveAllowedInvalidPort() {
  209. when(globalConfig.getOption("newserver", "hostname")).thenReturn("-1");
  210. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  211. controller, connectionManager);
  212. instance.loadModel();
  213. assertFalse("testIsSaveAllowedInvalidPort: ", instance.isSaveAllowed());
  214. }
  215. @Test
  216. public void testSaveSaveDefaults() {
  217. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  218. controller, connectionManager);
  219. instance.loadModel();
  220. instance.setSaveAsDefault(true);
  221. instance.save();
  222. verify(userConfig).setOption("newserver", "hostname", "hostname");
  223. verify(userConfig).setOption("newserver", "port", 1111);
  224. verify(userConfig).setOption("newserver", "password", "password");
  225. verify(userConfig).setOption("newserver", "ssl", true);
  226. }
  227. @Test
  228. public void testSaveNotDefaults() {
  229. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  230. controller, connectionManager);
  231. instance.loadModel();
  232. instance.setSaveAsDefault(false);
  233. instance.save();
  234. verify(userConfig, never()).setOption("newserver", "hostname", "hostname");
  235. verify(userConfig, never()).setOption("newserver", "port", 1111);
  236. verify(userConfig, never()).setOption("newserver", "password", "password");
  237. verify(userConfig, never()).setOption("newserver", "ssl", true);
  238. }
  239. @Test
  240. public void testSaveConnectWithoutProfile() throws URISyntaxException {
  241. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  242. controller, connectionManager);
  243. instance.loadModel();
  244. instance.save();
  245. verify(connectionManager).connectToAddress(new URI("ircs://password@hostname:1111"));
  246. verify(connectionManager, never()).connectToAddress(any(URI.class), any(ConfigProvider.class));
  247. }
  248. @Test
  249. public void testSaveConnectWithProfile() throws URISyntaxException {
  250. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  251. controller, connectionManager);
  252. instance.loadModel();
  253. instance.setSelectedProfile(Optional.fromNullable(profile1));
  254. instance.save();
  255. verify(connectionManager, never()).connectToAddress(any(URI.class));
  256. verify(connectionManager).connectToAddress(new URI("ircs://password@hostname:1111"), profile1);
  257. }
  258. @Test
  259. public void testAddConfigProvider() {
  260. when(controller.getProvidersByType("profile")).thenReturn(Lists.newArrayList(profile1));
  261. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  262. controller, connectionManager);
  263. instance.loadModel();
  264. assertEquals("testAddConfigProvider:", Lists.newArrayList(profile1),
  265. instance.getProfileList());
  266. instance.configProviderAdded(profile2);
  267. assertEquals("testAddConfigProvider:", Lists.newArrayList(profile1, profile2),
  268. instance.getProfileList());
  269. }
  270. @Test
  271. public void testRemoveConfigProvider() {
  272. when(controller.getProvidersByType("profile")).thenReturn(
  273. Lists.newArrayList(profile1, profile2));
  274. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  275. controller, connectionManager);
  276. instance.loadModel();
  277. assertEquals("testRemoveConfigProvider:", Lists.newArrayList(profile1, profile2),
  278. instance.getProfileList());
  279. instance.configProviderRemoved(profile2);
  280. assertEquals("testRemoveConfigProvider:", Lists.newArrayList(profile1),
  281. instance.getProfileList());
  282. }
  283. @Test
  284. public void testRemoveConfigProviderSelectedProfile() {
  285. when(controller.getProvidersByType("profile")).thenReturn(
  286. Lists.newArrayList(profile1, profile2));
  287. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  288. controller, connectionManager);
  289. instance.loadModel();
  290. instance.setSelectedProfile(Optional.fromNullable(profile2));
  291. assertEquals("testRemoveConfigProviderSelectedProfile:",
  292. Lists.newArrayList(profile1, profile2),
  293. instance.getProfileList());
  294. assertEquals("testRemoveConfigProviderSelectedProfile:", Optional.fromNullable(profile2),
  295. instance.getSelectedProfile());
  296. instance.configProviderRemoved(profile2);
  297. assertEquals("testRemoveConfigProviderSelectedProfile:", Lists.newArrayList(profile1),
  298. instance.getProfileList());
  299. assertEquals("testRemoveConfigProviderSelectedProfile:", Optional.absent(),
  300. instance.getSelectedProfile());
  301. }
  302. @Test
  303. public void testListenerSelectedProfileChanged() {
  304. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  305. controller, connectionManager);
  306. instance.loadModel();
  307. assertEquals("testListenerSelectedProfileChanged: ", Optional.<ConfigProvider>absent(),
  308. instance.getSelectedProfile());
  309. instance.addListener(listener);
  310. instance.setSelectedProfile(Optional.fromNullable(profile1));
  311. assertEquals("testListenerSelectedProfileChanged: ", Optional.fromNullable(profile1),
  312. instance.getSelectedProfile());
  313. verify(listener).selectedProfileChanged(Optional.<ConfigProvider>absent(),
  314. Optional.fromNullable(profile1));
  315. }
  316. @Test
  317. public void testListenerProfileListChangedRemoved() {
  318. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  319. controller, connectionManager);
  320. instance.loadModel();
  321. instance.addListener(listener);
  322. assertEquals("testListenerProfileListChangedRemoved: ",
  323. Lists.newArrayList(profile1, profile2), instance.getProfileList());
  324. instance.configProviderRemoved(profile2);
  325. assertEquals("testListenerProfileListChangedRemoved:", Lists.newArrayList(profile1),
  326. instance.getProfileList());
  327. verify(listener).profileListChanged(Lists.newArrayList(profile1));
  328. }
  329. @Test
  330. public void testListenerProfileListChangedAdded() {
  331. when(controller.getProvidersByType("profile"))
  332. .thenReturn(Lists.newArrayList(profile1));
  333. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  334. controller, connectionManager);
  335. instance.loadModel();
  336. instance.addListener(listener);
  337. assertEquals("testListenerProfileListChangedAdded: ", Lists.newArrayList(profile1),
  338. instance.getProfileList());
  339. instance.configProviderAdded(profile2);
  340. assertEquals("testListenerProfileListChangedAdded:", Lists.newArrayList(profile1, profile2),
  341. instance.getProfileList());
  342. verify(listener).profileListChanged(Lists.newArrayList(profile1, profile2));
  343. }
  344. @Test
  345. public void testListenerServerDetailsChangedPort() {
  346. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  347. controller, connectionManager);
  348. instance.loadModel();
  349. instance.addListener(listener);
  350. instance.setPort(Optional.fromNullable(9999));
  351. verify(listener).serverDetailsChanged(Optional.fromNullable("hostname"),
  352. Optional.fromNullable(9999), Optional.fromNullable("password"), true, false);
  353. }
  354. @Test
  355. public void testListenerServerDetailsChangedPassword() {
  356. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  357. controller, connectionManager);
  358. instance.loadModel();
  359. instance.addListener(listener);
  360. instance.setPassword(Optional.fromNullable("password-test"));
  361. verify(listener).serverDetailsChanged(Optional.fromNullable("hostname"),
  362. Optional.fromNullable(1111), Optional.fromNullable("password-test"), true, false);
  363. }
  364. @Test
  365. public void testListenerServerDetailsChangedSSL() {
  366. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  367. controller, connectionManager);
  368. instance.loadModel();
  369. instance.addListener(listener);
  370. instance.setSSL(false);
  371. verify(listener).serverDetailsChanged(Optional.fromNullable("hostname"),
  372. Optional.fromNullable(1111), Optional.fromNullable("password"), false, false);
  373. }
  374. @Test
  375. public void testListenerServerDetailsChangedSaveAsDefault() {
  376. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  377. controller, connectionManager);
  378. instance.loadModel();
  379. instance.addListener(listener);
  380. instance.setSaveAsDefault(true);
  381. verify(listener).serverDetailsChanged(Optional.fromNullable("hostname"),
  382. Optional.fromNullable(1111), Optional.fromNullable("password"), true, true);
  383. }
  384. @Test
  385. public void testRemoveListener() {
  386. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  387. controller, connectionManager);
  388. instance.loadModel();
  389. instance.addListener(listener);
  390. instance.setSaveAsDefault(true);
  391. verify(listener).serverDetailsChanged(Optional.fromNullable("hostname"),
  392. Optional.fromNullable(1111), Optional.fromNullable("password"), true, true);
  393. instance.removeListener(listener);
  394. instance.setHostname(Optional.fromNullable("test"));
  395. verify(listener, never()).serverDetailsChanged(Optional.fromNullable("test"),
  396. Optional.fromNullable(1111), Optional.fromNullable("password"), true, false);
  397. }
  398. @Test
  399. public void testSaveDefaults() throws URISyntaxException {
  400. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  401. controller, connectionManager);
  402. instance.loadModel();
  403. instance.setSelectedProfile(Optional.fromNullable(profile1));
  404. instance.setSaveAsDefault(true);
  405. instance.save();
  406. verify(userConfig).setOption("newserver", "hostname", "hostname");
  407. verify(userConfig).setOption("newserver", "port", 1111);
  408. verify(userConfig).setOption("newserver", "password", "password");
  409. verify(userConfig).setOption("newserver", "ssl", true);
  410. }
  411. @Test
  412. public void testNoSaveDefaults() throws URISyntaxException {
  413. final CoreNewServerDialogModel instance = new CoreNewServerDialogModel(globalConfig, userConfig,
  414. controller, connectionManager);
  415. instance.loadModel();
  416. instance.setSelectedProfile(Optional.fromNullable(profile1));
  417. instance.setSaveAsDefault(false);
  418. instance.save();
  419. verify(userConfig, never()).setOption("newserver", "hostname", "hostname");
  420. verify(userConfig, never()).setOption("newserver", "port", 1111);
  421. verify(userConfig, never()).setOption("newserver", "password", "password");
  422. verify(userConfig, never()).setOption("newserver", "ssl", true);
  423. }
  424. }