1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | 'use strict';
|
19 |
|
20 | var assert = require('assert'),
|
21 | url = require('url');
|
22 |
|
23 | var test = require('../lib/test'),
|
24 | fileserver = require('../lib/test/fileserver'),
|
25 | Browser = require('..').Browser,
|
26 | Pages = test.Pages;
|
27 |
|
28 |
|
29 | test.suite(function(env) {
|
30 | var driver;
|
31 |
|
32 | test.before(function*() {
|
33 | driver = yield env.builder().build();
|
34 | });
|
35 |
|
36 | test.after(function() {
|
37 | return driver.quit();
|
38 | });
|
39 |
|
40 |
|
41 | test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.SAFARI)).
|
42 | describe('Cookie Management;', function() {
|
43 |
|
44 | test.beforeEach(function*() {
|
45 | yield driver.get(fileserver.Pages.ajaxyPage);
|
46 | yield driver.manage().deleteAllCookies();
|
47 | return assertHasCookies();
|
48 | });
|
49 |
|
50 | test.it('can add new cookies', function*() {
|
51 | var cookie = createCookieSpec();
|
52 |
|
53 | yield driver.manage().addCookie(cookie);
|
54 | yield driver.manage().getCookie(cookie.name).then(function(actual) {
|
55 | assert.equal(actual.value, cookie.value);
|
56 | });
|
57 | });
|
58 |
|
59 | test.it('can get all cookies', function*() {
|
60 | var cookie1 = createCookieSpec();
|
61 | var cookie2 = createCookieSpec();
|
62 |
|
63 | yield driver.manage().addCookie(cookie1);
|
64 | yield driver.manage().addCookie(cookie2);
|
65 |
|
66 | return assertHasCookies(cookie1, cookie2);
|
67 | });
|
68 |
|
69 | test.ignore(env.browsers(Browser.IE)).
|
70 | it('only returns cookies visible to the current page', function*() {
|
71 | var cookie1 = createCookieSpec();
|
72 |
|
73 | yield driver.manage().addCookie(cookie1);
|
74 |
|
75 | var pageUrl = fileserver.whereIs('page/1');
|
76 | var cookie2 = createCookieSpec({
|
77 | path: url.parse(pageUrl).pathname
|
78 | });
|
79 | yield driver.get(pageUrl);
|
80 | yield driver.manage().addCookie(cookie2);
|
81 | yield assertHasCookies(cookie1, cookie2);
|
82 |
|
83 | yield driver.get(fileserver.Pages.ajaxyPage);
|
84 | yield assertHasCookies(cookie1);
|
85 |
|
86 | yield driver.get(pageUrl);
|
87 | yield assertHasCookies(cookie1, cookie2);
|
88 | });
|
89 |
|
90 | test.it('can delete all cookies', function*() {
|
91 | var cookie1 = createCookieSpec();
|
92 | var cookie2 = createCookieSpec();
|
93 |
|
94 | yield driver.executeScript(
|
95 | 'document.cookie = arguments[0] + "=" + arguments[1];' +
|
96 | 'document.cookie = arguments[2] + "=" + arguments[3];',
|
97 | cookie1.name, cookie1.value, cookie2.name, cookie2.value);
|
98 | yield assertHasCookies(cookie1, cookie2);
|
99 |
|
100 | yield driver.manage().deleteAllCookies();
|
101 | yield assertHasCookies();
|
102 | });
|
103 |
|
104 | test.it('can delete cookies by name', function*() {
|
105 | var cookie1 = createCookieSpec();
|
106 | var cookie2 = createCookieSpec();
|
107 |
|
108 | yield driver.executeScript(
|
109 | 'document.cookie = arguments[0] + "=" + arguments[1];' +
|
110 | 'document.cookie = arguments[2] + "=" + arguments[3];',
|
111 | cookie1.name, cookie1.value, cookie2.name, cookie2.value);
|
112 | yield assertHasCookies(cookie1, cookie2);
|
113 |
|
114 | yield driver.manage().deleteCookie(cookie1.name);
|
115 | yield assertHasCookies(cookie2);
|
116 | });
|
117 |
|
118 | test.it('should only delete cookie with exact name', function*() {
|
119 | var cookie1 = createCookieSpec();
|
120 | var cookie2 = createCookieSpec();
|
121 | var cookie3 = {name: cookie1.name + 'xx', value: cookie1.value};
|
122 |
|
123 | yield driver.executeScript(
|
124 | 'document.cookie = arguments[0] + "=" + arguments[1];' +
|
125 | 'document.cookie = arguments[2] + "=" + arguments[3];' +
|
126 | 'document.cookie = arguments[4] + "=" + arguments[5];',
|
127 | cookie1.name, cookie1.value, cookie2.name, cookie2.value,
|
128 | cookie3.name, cookie3.value);
|
129 | yield assertHasCookies(cookie1, cookie2, cookie3);
|
130 |
|
131 | yield driver.manage().deleteCookie(cookie1.name);
|
132 | yield assertHasCookies(cookie2, cookie3);
|
133 | });
|
134 |
|
135 | test.it('can delete cookies set higher in the path', function*() {
|
136 | var cookie = createCookieSpec();
|
137 | var childUrl = fileserver.whereIs('child/childPage.html');
|
138 | var grandchildUrl = fileserver.whereIs(
|
139 | 'child/grandchild/grandchildPage.html');
|
140 |
|
141 | yield driver.get(childUrl);
|
142 | yield driver.manage().addCookie(cookie);
|
143 | yield assertHasCookies(cookie);
|
144 |
|
145 | yield driver.get(grandchildUrl);
|
146 | yield assertHasCookies(cookie);
|
147 |
|
148 | yield driver.manage().deleteCookie(cookie.name);
|
149 | yield assertHasCookies();
|
150 |
|
151 | yield driver.get(childUrl);
|
152 | yield assertHasCookies();
|
153 | });
|
154 |
|
155 | test.ignore(env.browsers(
|
156 | Browser.ANDROID,
|
157 | Browser.FIREFOX,
|
158 | 'legacy-' + Browser.FIREFOX,
|
159 | Browser.IE)).
|
160 | it('should retain cookie expiry', function*() {
|
161 | let expirationDelay = 5 * 1000;
|
162 | let expiry = new Date(Date.now() + expirationDelay);
|
163 | let cookie = createCookieSpec({expiry});
|
164 |
|
165 | yield driver.manage().addCookie(cookie);
|
166 | yield driver.manage().getCookie(cookie.name).then(function(actual) {
|
167 | assert.equal(actual.value, cookie.value);
|
168 |
|
169 | assert.equal(actual.expiry, Math.floor(expiry.getTime() / 1000));
|
170 | });
|
171 |
|
172 | yield driver.sleep(expirationDelay);
|
173 | yield assertHasCookies();
|
174 | });
|
175 | });
|
176 |
|
177 | function createCookieSpec(opt_options) {
|
178 | let spec = {
|
179 | name: getRandomString(),
|
180 | value: getRandomString()
|
181 | };
|
182 | if (opt_options) {
|
183 | spec = Object.assign(spec, opt_options);
|
184 | }
|
185 | return spec;
|
186 | }
|
187 |
|
188 | function buildCookieMap(cookies) {
|
189 | var map = {};
|
190 | cookies.forEach(function(cookie) {
|
191 | map[cookie.name] = cookie;
|
192 | });
|
193 | return map;
|
194 | }
|
195 |
|
196 | function assertHasCookies(...expected) {
|
197 | return driver.manage().getCookies().then(function(cookies) {
|
198 | assert.equal(cookies.length, expected.length,
|
199 | 'Wrong # of cookies.' +
|
200 | '\n Expected: ' + JSON.stringify(expected) +
|
201 | '\n Was : ' + JSON.stringify(cookies));
|
202 |
|
203 | var map = buildCookieMap(cookies);
|
204 | for (var i = 0; i < expected.length; ++i) {
|
205 | assert.equal(expected[i].value, map[expected[i].name].value);
|
206 | }
|
207 | });
|
208 | }
|
209 |
|
210 | function getRandomString() {
|
211 | var x = 1234567890;
|
212 | return Math.floor(Math.random() * x).toString(36);
|
213 | }
|
214 | });
|