cookie_test.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. // Licensed to the Software Freedom Conservancy (SFC) under one
  2. // or more contributor license agreements. See the NOTICE file
  3. // distributed with this work for additional information
  4. // regarding copyright ownership. The SFC licenses this file
  5. // to you under the Apache License, Version 2.0 (the
  6. // "License"); you may not use this file except in compliance
  7. // with the License. You may obtain a copy of the License at
  8. //
  9. // http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. // Unless required by applicable law or agreed to in writing,
  12. // software distributed under the License is distributed on an
  13. // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  14. // KIND, either express or implied. See the License for the
  15. // specific language governing permissions and limitations
  16. // under the License.
  17. 'use strict';
  18. var assert = require('assert'),
  19. url = require('url');
  20. var test = require('../lib/test'),
  21. fileserver = require('../lib/test/fileserver'),
  22. Browser = require('..').Browser,
  23. Pages = test.Pages;
  24. test.suite(function(env) {
  25. var driver;
  26. test.before(function*() {
  27. driver = yield env.builder().build();
  28. });
  29. test.after(function() {
  30. return driver.quit();
  31. });
  32. // Cookie handling is broken.
  33. test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.SAFARI)).
  34. describe('Cookie Management;', function() {
  35. test.beforeEach(function*() {
  36. yield driver.get(fileserver.Pages.ajaxyPage);
  37. yield driver.manage().deleteAllCookies();
  38. return assertHasCookies();
  39. });
  40. test.it('can add new cookies', function*() {
  41. var cookie = createCookieSpec();
  42. yield driver.manage().addCookie(cookie);
  43. yield driver.manage().getCookie(cookie.name).then(function(actual) {
  44. assert.equal(actual.value, cookie.value);
  45. });
  46. });
  47. test.it('can get all cookies', function*() {
  48. var cookie1 = createCookieSpec();
  49. var cookie2 = createCookieSpec();
  50. yield driver.manage().addCookie(cookie1);
  51. yield driver.manage().addCookie(cookie2);
  52. return assertHasCookies(cookie1, cookie2);
  53. });
  54. test.ignore(env.browsers(Browser.IE)).
  55. it('only returns cookies visible to the current page', function*() {
  56. var cookie1 = createCookieSpec();
  57. yield driver.manage().addCookie(cookie1);
  58. var pageUrl = fileserver.whereIs('page/1');
  59. var cookie2 = createCookieSpec({
  60. path: url.parse(pageUrl).pathname
  61. });
  62. yield driver.get(pageUrl);
  63. yield driver.manage().addCookie(cookie2);
  64. yield assertHasCookies(cookie1, cookie2);
  65. yield driver.get(fileserver.Pages.ajaxyPage);
  66. yield assertHasCookies(cookie1);
  67. yield driver.get(pageUrl);
  68. yield assertHasCookies(cookie1, cookie2);
  69. });
  70. test.it('can delete all cookies', function*() {
  71. var cookie1 = createCookieSpec();
  72. var cookie2 = createCookieSpec();
  73. yield driver.executeScript(
  74. 'document.cookie = arguments[0] + "=" + arguments[1];' +
  75. 'document.cookie = arguments[2] + "=" + arguments[3];',
  76. cookie1.name, cookie1.value, cookie2.name, cookie2.value);
  77. yield assertHasCookies(cookie1, cookie2);
  78. yield driver.manage().deleteAllCookies();
  79. yield assertHasCookies();
  80. });
  81. test.it('can delete cookies by name', function*() {
  82. var cookie1 = createCookieSpec();
  83. var cookie2 = createCookieSpec();
  84. yield driver.executeScript(
  85. 'document.cookie = arguments[0] + "=" + arguments[1];' +
  86. 'document.cookie = arguments[2] + "=" + arguments[3];',
  87. cookie1.name, cookie1.value, cookie2.name, cookie2.value);
  88. yield assertHasCookies(cookie1, cookie2);
  89. yield driver.manage().deleteCookie(cookie1.name);
  90. yield assertHasCookies(cookie2);
  91. });
  92. test.it('should only delete cookie with exact name', function*() {
  93. var cookie1 = createCookieSpec();
  94. var cookie2 = createCookieSpec();
  95. var cookie3 = {name: cookie1.name + 'xx', value: cookie1.value};
  96. yield driver.executeScript(
  97. 'document.cookie = arguments[0] + "=" + arguments[1];' +
  98. 'document.cookie = arguments[2] + "=" + arguments[3];' +
  99. 'document.cookie = arguments[4] + "=" + arguments[5];',
  100. cookie1.name, cookie1.value, cookie2.name, cookie2.value,
  101. cookie3.name, cookie3.value);
  102. yield assertHasCookies(cookie1, cookie2, cookie3);
  103. yield driver.manage().deleteCookie(cookie1.name);
  104. yield assertHasCookies(cookie2, cookie3);
  105. });
  106. test.it('can delete cookies set higher in the path', function*() {
  107. var cookie = createCookieSpec();
  108. var childUrl = fileserver.whereIs('child/childPage.html');
  109. var grandchildUrl = fileserver.whereIs(
  110. 'child/grandchild/grandchildPage.html');
  111. yield driver.get(childUrl);
  112. yield driver.manage().addCookie(cookie);
  113. yield assertHasCookies(cookie);
  114. yield driver.get(grandchildUrl);
  115. yield assertHasCookies(cookie);
  116. yield driver.manage().deleteCookie(cookie.name);
  117. yield assertHasCookies();
  118. yield driver.get(childUrl);
  119. yield assertHasCookies();
  120. });
  121. test.ignore(env.browsers(
  122. Browser.ANDROID,
  123. Browser.FIREFOX,
  124. 'legacy-' + Browser.FIREFOX,
  125. Browser.IE)).
  126. it('should retain cookie expiry', function*() {
  127. let expirationDelay = 5 * 1000;
  128. let expiry = new Date(Date.now() + expirationDelay);
  129. let cookie = createCookieSpec({expiry});
  130. yield driver.manage().addCookie(cookie);
  131. yield driver.manage().getCookie(cookie.name).then(function(actual) {
  132. assert.equal(actual.value, cookie.value);
  133. // expiry times are exchanged in seconds since January 1, 1970 UTC.
  134. assert.equal(actual.expiry, Math.floor(expiry.getTime() / 1000));
  135. });
  136. yield driver.sleep(expirationDelay);
  137. yield assertHasCookies();
  138. });
  139. });
  140. function createCookieSpec(opt_options) {
  141. let spec = {
  142. name: getRandomString(),
  143. value: getRandomString()
  144. };
  145. if (opt_options) {
  146. spec = Object.assign(spec, opt_options);
  147. }
  148. return spec;
  149. }
  150. function buildCookieMap(cookies) {
  151. var map = {};
  152. cookies.forEach(function(cookie) {
  153. map[cookie.name] = cookie;
  154. });
  155. return map;
  156. }
  157. function assertHasCookies(...expected) {
  158. return driver.manage().getCookies().then(function(cookies) {
  159. assert.equal(cookies.length, expected.length,
  160. 'Wrong # of cookies.' +
  161. '\n Expected: ' + JSON.stringify(expected) +
  162. '\n Was : ' + JSON.stringify(cookies));
  163. var map = buildCookieMap(cookies);
  164. for (var i = 0; i < expected.length; ++i) {
  165. assert.equal(expected[i].value, map[expected[i].name].value);
  166. }
  167. });
  168. }
  169. function getRandomString() {
  170. var x = 1234567890;
  171. return Math.floor(Math.random() * x).toString(36);
  172. }
  173. });