PageRenderTime 43ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/web/core/tests/Drupal/Nightwatch/Tests/jsCookieTest.js

https://gitlab.com/mohamed_hussein/prodt
JavaScript | 275 lines | 270 code | 0 blank | 5 comment | 0 complexity | ac60dc13d2e8754895cc213672a3a1bb MD5 | raw file
  1. const deprecatedMessageSuffix = `is deprecated in Drupal 9.0.0 and will be removed in Drupal 10.0.0. Use the core/js-cookie library instead. See https://www.drupal.org/node/3104677`;
  2. // Nightwatch suggests non-ES6 functions when using the execute method.
  3. // eslint-disable-next-line func-names, prefer-arrow-callback
  4. const getJqueryCookie = function (cookieName) {
  5. return undefined !== cookieName ? jQuery.cookie(cookieName) : jQuery.cookie();
  6. };
  7. // eslint-disable-next-line func-names, prefer-arrow-callback
  8. const setJqueryCookieWithOptions = function (
  9. cookieName,
  10. cookieValue,
  11. options = {},
  12. ) {
  13. return jQuery.cookie(cookieName, cookieValue, options);
  14. };
  15. module.exports = {
  16. '@tags': ['core'],
  17. before(browser) {
  18. browser.drupalInstall().drupalLoginAsAdmin(() => {
  19. browser
  20. .drupalRelativeURL('/admin/modules')
  21. .setValue('input[type="search"]', 'JS Cookie Test')
  22. .waitForElementVisible(
  23. 'input[name="modules[js_cookie_test][enable]"]',
  24. 1000,
  25. )
  26. .click('input[name="modules[js_cookie_test][enable]"]')
  27. .click('input[type="submit"]'); // Submit module form.
  28. });
  29. },
  30. after(browser) {
  31. browser.drupalUninstall();
  32. },
  33. 'Test jquery.cookie Shim Simple Value and jquery.removeCookie': (browser) => {
  34. browser
  35. .drupalRelativeURL('/js_cookie_with_shim_test')
  36. .waitForElementVisible('.js_cookie_test_add_button', 1000)
  37. .click('.js_cookie_test_add_button')
  38. // prettier-ignore
  39. .execute(getJqueryCookie, ['js_cookie_test'], (result) => {
  40. browser.assert.equal(
  41. result.value,
  42. 'red panda',
  43. '$.cookie returns cookie value',
  44. );
  45. })
  46. .waitForElementVisible('.js_cookie_test_remove_button', 1000)
  47. .click('.js_cookie_test_remove_button')
  48. .execute(getJqueryCookie, ['js_cookie_test_remove'], (result) => {
  49. browser.assert.equal(result.value, null, 'cookie removed');
  50. })
  51. .drupalLogAndEnd({ onlyOnError: false });
  52. },
  53. 'Test jquery.cookie Shim Empty Value': (browser) => {
  54. browser
  55. .setCookie({
  56. name: 'js_cookie_test_empty',
  57. value: '',
  58. })
  59. // prettier-ignore
  60. .execute(getJqueryCookie, ['js_cookie_test_empty'], (result) => {
  61. browser.assert.equal(
  62. result.value,
  63. '',
  64. '$.cookie returns empty cookie value',
  65. );
  66. })
  67. .getCookie('js_cookie_test_empty', (result) => {
  68. browser.assert.equal(result.value, '', 'Cookie value is empty.');
  69. })
  70. .drupalLogAndEnd({ onlyOnError: false });
  71. },
  72. 'Test jquery.cookie Shim Undefined': (browser) => {
  73. browser
  74. .deleteCookie('js_cookie_test_undefined', () => {
  75. browser.execute(
  76. getJqueryCookie,
  77. ['js_cookie_test_undefined'],
  78. (result) => {
  79. browser.assert.equal(
  80. result.value,
  81. undefined,
  82. '$.cookie returns undefined cookie value',
  83. );
  84. },
  85. );
  86. })
  87. .drupalLogAndEnd({ onlyOnError: false });
  88. },
  89. 'Test jquery.cookie Shim Decode': (browser) => {
  90. browser
  91. .setCookie({
  92. name: encodeURIComponent(' js_cookie_test_encoded'),
  93. value: encodeURIComponent(' red panda'),
  94. })
  95. .execute(getJqueryCookie, [' js_cookie_test_encoded'], (result) => {
  96. browser.assert.equal(
  97. result.value,
  98. ' red panda',
  99. '$.cookie returns decoded cookie value',
  100. );
  101. })
  102. .setCookie({
  103. name: 'js_cookie_test_encoded_plus_to_space',
  104. value: 'red+panda',
  105. })
  106. .execute(
  107. getJqueryCookie,
  108. ['js_cookie_test_encoded_plus_to_space'],
  109. (result) => {
  110. browser.assert.equal(
  111. result.value,
  112. 'red panda',
  113. '$.cookie returns decoded plus to space in cookie value',
  114. );
  115. },
  116. )
  117. .drupalLogAndEnd({ onlyOnError: false });
  118. },
  119. 'Test jquery.cookie Shim With raw': (browser) => {
  120. browser
  121. .drupalRelativeURL('/js_cookie_with_shim_test')
  122. .waitForElementVisible('.js_cookie_test_add_raw_button', 1000)
  123. .click('.js_cookie_test_add_raw_button')
  124. .execute(getJqueryCookie, ['js_cookie_test_raw'], (result) => {
  125. browser.assert.equal(
  126. result.value,
  127. 'red%20panda',
  128. '$.cookie returns raw cookie value',
  129. );
  130. })
  131. .drupalLogAndEnd({ onlyOnError: false });
  132. },
  133. 'Test jquery.cookie Shim With JSON': (browser) => {
  134. browser
  135. .drupalRelativeURL('/js_cookie_with_shim_test')
  136. .waitForElementVisible('.js_cookie_test_add_json_button', 1000)
  137. .click('.js_cookie_test_add_json_button')
  138. .execute(getJqueryCookie, ['js_cookie_test_json'], (result) => {
  139. browser.assert.deepEqual(
  140. result.value,
  141. { panda: 'red' },
  142. 'Stringified JSON is returned as JSON.',
  143. );
  144. })
  145. .getCookie('js_cookie_test_json', (result) => {
  146. browser.assert.equal(
  147. result.value,
  148. '%7B%22panda%22%3A%22red%22%7D',
  149. 'Cookie value is encoded backwards-compatible with jquery.cookie.',
  150. );
  151. })
  152. .execute(getJqueryCookie, ['js_cookie_test_json_simple'], (result) => {
  153. browser.assert.equal(
  154. result.value,
  155. 'red panda',
  156. '$.cookie returns simple cookie value with JSON enabled',
  157. );
  158. })
  159. .waitForElementVisible('.js_cookie_test_add_json_string_button', 1000)
  160. .click('.js_cookie_test_add_json_string_button')
  161. .execute(getJqueryCookie, ['js_cookie_test_json_string'], (result) => {
  162. browser.assert.deepEqual(
  163. result.value,
  164. '[object Object]',
  165. 'JSON used without json option is return as a string.',
  166. );
  167. })
  168. .getCookie('js_cookie_test_json_string', (result) => {
  169. browser.assert.equal(
  170. result.value,
  171. '%5Bobject%20Object%5D',
  172. 'Cookie value is encoded backwards-compatible with jquery.cookie.',
  173. );
  174. })
  175. .drupalLogAndEnd({ onlyOnError: false });
  176. },
  177. 'Test jquery.cookie Shim invalid URL encoding': (browser) => {
  178. browser
  179. .setCookie({
  180. name: 'js_cookie_test_bad',
  181. value: 'red panda%',
  182. })
  183. .execute(getJqueryCookie, ['js_cookie_test_bad'], (result) => {
  184. browser.assert.equal(
  185. result.value,
  186. undefined,
  187. '$.cookie won`t throw exception, returns undefined',
  188. );
  189. })
  190. .drupalLogAndEnd({ onlyOnError: false });
  191. },
  192. 'Test jquery.cookie Shim Read all when there are cookies or return empty object':
  193. (browser) => {
  194. browser
  195. .getCookie('SIMPLETEST_USER_AGENT', (simpletestCookie) => {
  196. const simpletestCookieValue = simpletestCookie.value;
  197. browser
  198. .drupalRelativeURL('/js_cookie_with_shim_test')
  199. .deleteCookies(() => {
  200. browser
  201. .execute(getJqueryCookie, [], (result) => {
  202. browser.assert.deepEqual(
  203. result.value,
  204. {},
  205. '$.cookie() returns empty object',
  206. );
  207. })
  208. .setCookie({
  209. name: 'js_cookie_test_first',
  210. value: 'red panda',
  211. })
  212. .setCookie({
  213. name: 'js_cookie_test_second',
  214. value: 'second red panda',
  215. })
  216. .setCookie({
  217. name: 'js_cookie_test_third',
  218. value: 'third red panda id bad%',
  219. })
  220. .execute(getJqueryCookie, [], (result) => {
  221. browser.assert.deepEqual(
  222. result.value,
  223. {
  224. js_cookie_test_first: 'red panda',
  225. js_cookie_test_second: 'second red panda',
  226. },
  227. '$.cookie() returns object containing all cookies',
  228. );
  229. })
  230. .setCookie({
  231. name: 'SIMPLETEST_USER_AGENT',
  232. value: simpletestCookieValue,
  233. });
  234. });
  235. })
  236. .drupalLogAndEnd({ onlyOnError: false });
  237. },
  238. 'Test jquery.cookie Shim $.cookie deprecation message': (browser) => {
  239. browser
  240. .drupalRelativeURL('/js_cookie_with_shim_test')
  241. .waitForElementVisible('.js_cookie_test_add_button', 1000)
  242. .click('.js_cookie_test_add_button')
  243. .assert.deprecationErrorExists(
  244. `jQuery.cookie() ${deprecatedMessageSuffix}`,
  245. )
  246. .drupalLogAndEnd({ onlyOnError: false });
  247. },
  248. 'Test jquery.cookie Shim $.removeCookie deprecation message': (browser) => {
  249. browser
  250. .drupalRelativeURL('/js_cookie_with_shim_test')
  251. .waitForElementVisible('.js_cookie_test_remove_button', 1000)
  252. .click('.js_cookie_test_remove_button')
  253. .assert.deprecationErrorExists(
  254. `jQuery.removeCookie() ${deprecatedMessageSuffix}`,
  255. )
  256. .drupalLogAndEnd({ onlyOnError: false });
  257. },
  258. 'Test jquery.cookie Shim expires option as Date instance': (browser) => {
  259. const sevenDaysFromNow = new Date();
  260. sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 7);
  261. browser
  262. .execute(
  263. setJqueryCookieWithOptions,
  264. ['c', 'v', { expires: sevenDaysFromNow }],
  265. (result) => {
  266. browser.assert.equal(
  267. result.value,
  268. `c=v; expires=${sevenDaysFromNow.toUTCString()}`,
  269. 'should write the cookie string with expires',
  270. );
  271. },
  272. )
  273. .drupalLogAndEnd({ onlyOnError: false });
  274. },
  275. };