PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/apps/settings/test/unit/modules/wifi_utils_test.js

https://gitlab.com/lcuguen/gaia
JavaScript | 439 lines | 365 code | 67 blank | 7 comment | 0 complexity | d5c5a6c2be4202cb38a81eba8306006b MD5 | raw file
  1. /* global MockL10n, MockNavigatorSettings, MockNavigatorMozWifiManager,
  2. MockNavigatorSettings */
  3. require('/shared/test/unit/mocks/mock_l10n.js');
  4. requireApp('settings/shared/test/unit/mocks/mock_navigator_moz_settings.js');
  5. requireApp('settings/shared/test/unit/load_body_html_helper.js');
  6. requireApp(
  7. 'settings/shared/test/unit/mocks/mock_navigator_moz_wifi_manager.js');
  8. suite('WifiUtils', function() {
  9. 'use strict';
  10. var realL10n;
  11. var realSettings;
  12. var wifiUtils;
  13. var settingsUtils;
  14. var map = {
  15. '*': {
  16. 'modules/settings_utils': 'unit/mock_settings_utils',
  17. 'shared/wifi_helper': 'shared_mocks/mock_wifi_helper'
  18. }
  19. };
  20. suiteSetup(function() {
  21. realL10n = window.navigator.mozL10n;
  22. window.navigator.mozL10n = MockL10n;
  23. realSettings = window.navigator.mozSettings;
  24. window.navigator.mozSettings = MockNavigatorSettings;
  25. });
  26. suiteTeardown(function() {
  27. window.navigator.mozL10n = realL10n;
  28. window.navigator.mozSettings = realSettings;
  29. });
  30. setup(function(done) {
  31. testRequire([
  32. 'modules/wifi_utils',
  33. 'unit/mock_settings_utils',
  34. ], map, function(WifiUtils, MockSettingsUtils) {
  35. wifiUtils = WifiUtils;
  36. settingsUtils = MockSettingsUtils;
  37. MockNavigatorSettings.mSetup();
  38. MockNavigatorMozWifiManager.mSetup();
  39. done();
  40. });
  41. });
  42. test('newExplanationItem', function() {
  43. var li = wifiUtils.newExplanationItem('test');
  44. assert.equal(li.className, 'explanation');
  45. assert.equal(li.getAttribute('data-l10n-id'), 'test');
  46. });
  47. suite('updateListItemStatus', function() {
  48. var fakeNetworkKey = 'network1';
  49. var fakeListItems;
  50. var fakeListItemDOM;
  51. var fakeActiveItemDOM;
  52. setup(function() {
  53. this.sinon.stub(wifiUtils, 'getNetworkKey').returns(fakeNetworkKey);
  54. fakeListItems = {};
  55. fakeListItemDOM = document.createElement('div');
  56. fakeListItemDOM.appendChild(document.createElement('small'));
  57. fakeListItemDOM.appendChild(document.createElement('aside'));
  58. fakeActiveItemDOM = document.createElement('div');
  59. fakeActiveItemDOM.appendChild(document.createElement('small'));
  60. fakeActiveItemDOM.appendChild(document.createElement('aside'));
  61. fakeListItems[fakeNetworkKey] = fakeListItemDOM;
  62. });
  63. suite('with no needed parameters', function() {
  64. setup(function() {
  65. this.sinon.stub(window.console, 'log');
  66. wifiUtils.updateListItemStatus();
  67. });
  68. test('we will get error message', function() {
  69. assert.isTrue(window.console.log.called);
  70. });
  71. });
  72. suite('if we are connecting to an AP with `connecting` status', function() {
  73. setup(function() {
  74. wifiUtils.updateListItemStatus({
  75. network: {},
  76. networkStatus: 'connecting',
  77. listItems: fakeListItems,
  78. activeItemDOM: fakeActiveItemDOM
  79. });
  80. });
  81. test('activeItemDOM is cleaned up to normal status', function() {
  82. assert.isFalse(fakeActiveItemDOM.classList.contains('active'));
  83. assert.equal(fakeActiveItemDOM.querySelector('small').dataset.l10nId,
  84. 'shortStatus-disconnected');
  85. assert.isFalse(fakeActiveItemDOM.querySelector(
  86. 'aside').classList.contains('connecting'));
  87. assert.isFalse(fakeActiveItemDOM.querySelector(
  88. 'aside').classList.contains('connected'));
  89. });
  90. test('listItemDOM is in right status', function() {
  91. assert.isTrue(fakeListItemDOM.classList.contains('active'));
  92. assert.equal(fakeListItemDOM.querySelector('small').dataset.l10nId,
  93. 'shortStatus-connecting');
  94. assert.isTrue(fakeListItemDOM.querySelector(
  95. 'aside').classList.contains('connecting'));
  96. assert.isFalse(fakeListItemDOM.querySelector(
  97. 'aside').classList.contains('connected'));
  98. });
  99. });
  100. suite('if we are connecting to an AP with `connected` status', function() {
  101. setup(function() {
  102. wifiUtils.updateListItemStatus({
  103. network: {},
  104. networkStatus: 'connected',
  105. listItems: fakeListItems,
  106. activeItemDOM: fakeActiveItemDOM
  107. });
  108. });
  109. test('listItemDOM is in right status', function() {
  110. assert.isTrue(fakeListItemDOM.classList.contains('active'));
  111. assert.equal(fakeListItemDOM.querySelector('small').dataset.l10nId,
  112. 'shortStatus-connected');
  113. assert.isTrue(fakeListItemDOM.querySelector(
  114. 'aside').classList.contains('connected'));
  115. assert.isFalse(fakeListItemDOM.querySelector(
  116. 'aside').classList.contains('connecting'));
  117. });
  118. });
  119. });
  120. suite('changeDisplay', function() {
  121. var dialog;
  122. var eap;
  123. var identity;
  124. var password;
  125. var authPhase2;
  126. var certificate;
  127. var description;
  128. setup(function() {
  129. loadBodyHTML('./_wifi_utils.html');
  130. dialog = document.getElementById('wifi-auth');
  131. eap = dialog.querySelector('li.eap select');
  132. identity = dialog.querySelector('input[name=identity]');
  133. password = dialog.querySelector('input[name=password]');
  134. authPhase2 = dialog.querySelector('li.auth-phase2 select');
  135. certificate = dialog.querySelector('li.server-certificate select');
  136. description = dialog.querySelector('li.server-certificate-description');
  137. });
  138. teardown(function() {
  139. document.body.innerHTML = '';
  140. });
  141. test('panel is wifi-auth, security is WEP', function() {
  142. wifiUtils.changeDisplay(dialog, 'WEP');
  143. assert.equal(identity.parentNode.style.display, 'none');
  144. assert.equal(password.parentNode.style.display, 'block');
  145. assert.equal(authPhase2.parentNode.parentNode.style.display, 'none');
  146. assert.equal(certificate.parentNode.parentNode.style.display, 'none');
  147. assert.equal(description.style.display, 'none');
  148. });
  149. test('panel is wifi-auth, security is WPA-PSK', function() {
  150. wifiUtils.changeDisplay(dialog, 'WPA-PSK');
  151. assert.equal(identity.parentNode.style.display, 'none');
  152. assert.equal(password.parentNode.style.display, 'block');
  153. assert.equal(authPhase2.parentNode.parentNode.style.display, 'none');
  154. assert.equal(certificate.parentNode.parentNode.style.display, 'none');
  155. assert.equal(description.style.display, 'none');
  156. });
  157. test('panel is wifi-auth, security is WPA-EAP, eap is SIM', function() {
  158. eap.value = 'SIM';
  159. wifiUtils.changeDisplay(dialog, 'WPA-EAP');
  160. assert.equal(identity.parentNode.style.display, 'none');
  161. assert.equal(password.parentNode.style.display, 'none');
  162. assert.equal(authPhase2.parentNode.parentNode.style.display, 'none');
  163. assert.equal(certificate.parentNode.parentNode.style.display, 'none');
  164. assert.equal(description.style.display, 'none');
  165. });
  166. test('panel is wifi-auth, security is WPA-EAP, eap is PEAP', function() {
  167. eap.value = 'PEAP';
  168. wifiUtils.changeDisplay(dialog, 'WPA-EAP');
  169. assert.equal(identity.parentNode.style.display, 'block');
  170. assert.equal(password.parentNode.style.display, 'block');
  171. assert.equal(authPhase2.parentNode.parentNode.style.display, 'block');
  172. assert.equal(certificate.parentNode.parentNode.style.display, 'block');
  173. assert.equal(description.style.display, 'block');
  174. });
  175. test('panel is wifi-auth, security is WPA-EAP, eap is TLS', function() {
  176. eap.value = 'TLS';
  177. wifiUtils.changeDisplay(dialog, 'WPA-EAP');
  178. assert.equal(identity.parentNode.style.display, 'block');
  179. assert.equal(password.parentNode.style.display, 'block');
  180. assert.equal(authPhase2.parentNode.parentNode.style.display, 'block');
  181. assert.equal(certificate.parentNode.parentNode.style.display, 'block');
  182. assert.equal(description.style.display, 'block');
  183. });
  184. test('panel is wifi-auth, security is WPA-EAP, eap is TTLS', function() {
  185. eap.value = 'TTLS';
  186. wifiUtils.changeDisplay(dialog, 'WPA-EAP');
  187. assert.equal(identity.parentNode.style.display, 'block');
  188. assert.equal(password.parentNode.style.display, 'block');
  189. assert.equal(authPhase2.parentNode.parentNode.style.display, 'block');
  190. assert.equal(certificate.parentNode.parentNode.style.display, 'block');
  191. assert.equal(description.style.display, 'block');
  192. });
  193. test('panel is wifi-auth, security is none', function() {
  194. wifiUtils.changeDisplay(dialog, 'none');
  195. assert.equal(identity.parentNode.style.display, 'none');
  196. assert.equal(password.parentNode.style.display, 'none');
  197. });
  198. });
  199. test('loadImportedCertificateOptions', function() {
  200. var selectDOM = document.createElement('select');
  201. selectDOM.appendChild(createOption('--'));
  202. selectDOM.appendChild(createOption('1'));
  203. selectDOM.appendChild(createOption('2'));
  204. MockNavigatorMozWifiManager._certificateList = [
  205. 'cert1', 'cert2', 'cert3'
  206. ];
  207. // the total options would be one default item and certificates
  208. var expectedLengthOfOptions =
  209. 1 + MockNavigatorMozWifiManager._certificateList.length;
  210. this.sinon.spy(selectDOM, 'remove');
  211. this.sinon.spy(selectDOM, 'add');
  212. wifiUtils.loadImportedCertificateOptions(selectDOM);
  213. // we have three options, but we would keep the first one
  214. assert.isTrue(selectDOM.remove.calledTwice);
  215. // and we would add three options back based on the number of our fake
  216. // certificates
  217. assert.isTrue(selectDOM.add.calledThrice);
  218. // and the total options should be one default item and certificates
  219. assert.equal(selectDOM.options.length, expectedLengthOfOptions);
  220. });
  221. suite('newListItem', function() {
  222. test('WPA-PSK network - not configured, in range', function() {
  223. var testNetwork = {
  224. ssid: 'Dummy network',
  225. security: ['WPA-PSK'],
  226. relSignalStrength: 40,
  227. known: false,
  228. };
  229. var l10nSpy = this.sinon.spy(navigator.mozL10n, 'setAttributes');
  230. var listItem = wifiUtils.newListItem({
  231. network: testNetwork
  232. });
  233. var icon = listItem.querySelector('aside');
  234. assert.ok(icon.classList.contains('secured'));
  235. var a = listItem.querySelector('a');
  236. var ssid = a.querySelector('span');
  237. assert.equal(ssid.textContent, testNetwork.ssid);
  238. var small = a.querySelector('small');
  239. assert.ok(l10nSpy.calledWith(small, 'securedBy',
  240. {capabilities: 'WPA-PSK'}));
  241. });
  242. test('WPA-PSK network - configured, in range', function() {
  243. var testNetwork = {
  244. ssid: 'Dummy network',
  245. security: ['WPA-PSK'],
  246. relSignalStrength: 40,
  247. known: true,
  248. };
  249. var l10nSpy = this.sinon.spy(navigator.mozL10n, 'setAttributes');
  250. var listItem = wifiUtils.newListItem({
  251. network: testNetwork
  252. });
  253. var icon = listItem.querySelector('aside');
  254. assert.ok(icon.classList.contains('secured'));
  255. var a = listItem.querySelector('a');
  256. var ssid = a.querySelector('span');
  257. assert.equal(ssid.textContent, testNetwork.ssid);
  258. var small = a.querySelector('small');
  259. assert.ok(l10nSpy.calledWith(small, 'securedBy',
  260. {capabilities: 'WPA-PSK'}));
  261. });
  262. test('WPA-PSK network - configured, not in range', function() {
  263. var testNetwork = {
  264. ssid: 'Dummy network',
  265. security: ['WPA-PSK'],
  266. relSignalStrength: 0,
  267. known: true,
  268. };
  269. var listItem = wifiUtils.newListItem({
  270. network: testNetwork,
  271. showNotInRange: true
  272. });
  273. var icon = listItem.querySelector('aside');
  274. assert.ok(icon.classList.contains('secured'));
  275. var a = listItem.querySelector('a');
  276. var ssid = a.querySelector('span');
  277. assert.equal(ssid.textContent, testNetwork.ssid);
  278. var small = a.querySelector('small');
  279. assert.equal(small.getAttribute('data-l10n-id'), 'notInRange');
  280. });
  281. test('Open network - not configured, in range', function() {
  282. var testNetwork = {
  283. ssid: 'Dummy network',
  284. security: [],
  285. relSignalStrength: 40,
  286. known: false,
  287. };
  288. var listItem = wifiUtils.newListItem({
  289. network: testNetwork
  290. });
  291. var icon = listItem.querySelector('aside');
  292. assert.ok(!icon.classList.contains('secured'));
  293. var a = listItem.querySelector('a');
  294. var ssid = a.querySelector('span');
  295. assert.equal(ssid.textContent, testNetwork.ssid);
  296. var small = a.querySelector('small');
  297. assert.equal(small.getAttribute('data-l10n-id'), 'securityOpen');
  298. });
  299. test('OPEN network - configured, in range', function() {
  300. var testNetwork = {
  301. ssid: 'Dummy network',
  302. security: [],
  303. relSignalStrength: 40,
  304. known: true,
  305. };
  306. var listItem = wifiUtils.newListItem({
  307. network: testNetwork
  308. });
  309. var icon = listItem.querySelector('aside');
  310. assert.ok(!icon.classList.contains('secured'));
  311. var a = listItem.querySelector('a');
  312. var ssid = a.querySelector('span');
  313. assert.equal(ssid.textContent, testNetwork.ssid);
  314. var small = a.querySelector('small');
  315. assert.equal(small.getAttribute('data-l10n-id'), 'securityOpen');
  316. });
  317. test('OPEN network - configured, not in range', function() {
  318. var testNetwork = {
  319. ssid: 'Dummy network',
  320. security: [],
  321. relSignalStrength: 0,
  322. known: true,
  323. };
  324. var listItem = wifiUtils.newListItem({
  325. network: testNetwork,
  326. showNotInRange: true
  327. });
  328. var icon = listItem.querySelector('aside');
  329. assert.ok(!icon.classList.contains('secured'));
  330. var a = listItem.querySelector('a');
  331. var ssid = a.querySelector('span');
  332. assert.equal(ssid.textContent, testNetwork.ssid);
  333. var small = a.querySelector('small');
  334. assert.equal(small.getAttribute('data-l10n-id'), 'notInRange');
  335. });
  336. });
  337. suite('updateNetworkSignal', function() {
  338. var testNetwork;
  339. var availableNetworks;
  340. var listItem;
  341. var networkIcon;
  342. setup(function() {
  343. loadBodyHTML('./_wifi_utils.html');
  344. testNetwork = {
  345. ssid: 'Dummy network',
  346. security: ['WPA-PSK'],
  347. relSignalStrength: 40,
  348. known: false,
  349. };
  350. listItem = wifiUtils.newListItem({
  351. network: testNetwork
  352. });
  353. networkIcon = listItem.querySelector('aside');
  354. availableNetworks = document.querySelector('ul.wifi-availableNetworks');
  355. availableNetworks.appendChild(listItem);
  356. });
  357. teardown(function() {
  358. document.body.innerHTML = '';
  359. });
  360. test('Signal Strength changes', function() {
  361. assert.isTrue(networkIcon.classList.contains('level-2'));
  362. wifiUtils.updateNetworkSignal(testNetwork, 100);
  363. assert.isTrue(networkIcon.classList.contains('level-4'));
  364. });
  365. });
  366. function createOption(value) {
  367. var dom = document.createElement('option');
  368. dom.text = value;
  369. dom.value = value;
  370. return dom;
  371. }
  372. });