Merge "Add schema version param for API export."
[lhc/web/wiklou.git] / tests / qunit / suites / resources / mediawiki / mediawiki.cookie.test.js
1 ( function () {
2
3 var NOW = 9012, // miliseconds
4 DEFAULT_DURATION = 5678, // seconds
5 jqcookie,
6 defaults = {
7 prefix: 'mywiki',
8 domain: 'example.org',
9 path: '/path',
10 expires: DEFAULT_DURATION,
11 secure: false
12 },
13 setDefaults = require( 'mediawiki.cookie' ).setDefaults,
14 expiryDate = new Date();
15
16 expiryDate.setTime( NOW + ( DEFAULT_DURATION * 1000 ) );
17
18 QUnit.module( 'mediawiki.cookie', {
19 beforeEach: function () {
20 jqcookie = sinon.stub( $, 'cookie' ).returns( null );
21 this.clock = sinon.useFakeTimers( NOW );
22 this.savedDefaults = setDefaults( defaults );
23 },
24 afterEach: function () {
25 jqcookie.restore();
26 this.clock.restore();
27 setDefaults( this.savedDefaults );
28 }
29 } );
30
31 QUnit.test( 'set( key, value )', function ( assert ) {
32 var call;
33
34 // Simple case
35 mw.cookie.set( 'foo', 'bar' );
36
37 call = jqcookie.lastCall.args;
38 assert.strictEqual( call[ 0 ], 'mywikifoo' );
39 assert.strictEqual( call[ 1 ], 'bar' );
40 assert.deepEqual( call[ 2 ], {
41 expires: expiryDate,
42 domain: 'example.org',
43 path: '/path',
44 secure: false
45 } );
46
47 mw.cookie.set( 'foo', null );
48 call = jqcookie.lastCall.args;
49 assert.strictEqual( call[ 1 ], null, 'null removes cookie' );
50
51 mw.cookie.set( 'foo', undefined );
52 call = jqcookie.lastCall.args;
53 assert.strictEqual( call[ 1 ], 'undefined', 'undefined is value' );
54
55 mw.cookie.set( 'foo', false );
56 call = jqcookie.lastCall.args;
57 assert.strictEqual( call[ 1 ], 'false', 'false is a value' );
58
59 mw.cookie.set( 'foo', 0 );
60 call = jqcookie.lastCall.args;
61 assert.strictEqual( call[ 1 ], '0', '0 is value' );
62 } );
63
64 QUnit.test( 'set( key, value, expires )', function ( assert ) {
65 var date, options;
66
67 date = new Date();
68 date.setTime( 1234 );
69
70 mw.cookie.set( 'foo', 'bar' );
71 options = jqcookie.lastCall.args[ 2 ];
72 assert.deepEqual( options.expires, expiryDate, 'default expiration' );
73
74 mw.cookie.set( 'foo', 'bar', date );
75 options = jqcookie.lastCall.args[ 2 ];
76 assert.strictEqual( options.expires, date, 'custom expiration as Date' );
77
78 date = new Date();
79 date.setDate( date.getDate() + 1 );
80
81 mw.cookie.set( 'foo', 'bar', 86400 );
82 options = jqcookie.lastCall.args[ 2 ];
83 assert.deepEqual( options.expires, date, 'custom expiration as lifetime in seconds' );
84
85 mw.cookie.set( 'foo', 'bar', null );
86 options = jqcookie.lastCall.args[ 2 ];
87 assert.strictEqual( options.expires, undefined, 'null forces session cookie' );
88
89 // Per DefaultSettings.php, if wgCookieExpiration is 0,
90 // then the default should be session cookies
91 setDefaults( $.extend( {}, defaults, { expires: 0 } ) );
92
93 mw.cookie.set( 'foo', 'bar' );
94 options = jqcookie.lastCall.args[ 2 ];
95 assert.strictEqual( options.expires, undefined, 'wgCookieExpiration=0 results in session cookies by default' );
96
97 mw.cookie.set( 'foo', 'bar', date );
98 options = jqcookie.lastCall.args[ 2 ];
99 assert.strictEqual( options.expires, date, 'custom expiration (with wgCookieExpiration=0)' );
100 } );
101
102 QUnit.test( 'set( key, value, options )', function ( assert ) {
103 var date, call;
104
105 mw.cookie.set( 'foo', 'bar', {
106 prefix: 'myPrefix',
107 domain: 'myDomain',
108 path: 'myPath',
109 secure: true
110 } );
111
112 call = jqcookie.lastCall.args;
113 assert.strictEqual( call[ 0 ], 'myPrefixfoo' );
114 assert.deepEqual( call[ 2 ], {
115 expires: expiryDate,
116 domain: 'myDomain',
117 path: 'myPath',
118 secure: true
119 }, 'Options (without expires)' );
120
121 date = new Date();
122 date.setTime( 1234 );
123
124 mw.cookie.set( 'foo', 'bar', {
125 expires: date,
126 prefix: 'myPrefix',
127 domain: 'myDomain',
128 path: 'myPath',
129 secure: true
130 } );
131
132 call = jqcookie.lastCall.args;
133 assert.strictEqual( call[ 0 ], 'myPrefixfoo' );
134 assert.deepEqual( call[ 2 ], {
135 expires: date,
136 domain: 'myDomain',
137 path: 'myPath',
138 secure: true
139 }, 'Options (incl. expires)' );
140 } );
141
142 QUnit.test( 'get( key ) - no values', function ( assert ) {
143 var key, value;
144
145 mw.cookie.get( 'foo' );
146
147 key = jqcookie.lastCall.args[ 0 ];
148 assert.strictEqual( key, 'mywikifoo', 'Default prefix' );
149
150 mw.cookie.get( 'foo', undefined );
151 key = jqcookie.lastCall.args[ 0 ];
152 assert.strictEqual( key, 'mywikifoo', 'Use default prefix for undefined' );
153
154 mw.cookie.get( 'foo', null );
155 key = jqcookie.lastCall.args[ 0 ];
156 assert.strictEqual( key, 'mywikifoo', 'Use default prefix for null' );
157
158 mw.cookie.get( 'foo', '' );
159 key = jqcookie.lastCall.args[ 0 ];
160 assert.strictEqual( key, 'foo', 'Don\'t use default prefix for empty string' );
161
162 value = mw.cookie.get( 'foo' );
163 assert.strictEqual( value, null, 'Return null by default' );
164
165 value = mw.cookie.get( 'foo', null, 'bar' );
166 assert.strictEqual( value, 'bar', 'Custom default value' );
167 } );
168
169 QUnit.test( 'get( key ) - with value', function ( assert ) {
170 var value;
171
172 jqcookie.returns( 'bar' );
173
174 value = mw.cookie.get( 'foo' );
175 assert.strictEqual( value, 'bar', 'Return value of cookie' );
176 } );
177
178 QUnit.test( 'get( key, prefix )', function ( assert ) {
179 var key;
180
181 mw.cookie.get( 'foo', 'bar' );
182
183 key = jqcookie.lastCall.args[ 0 ];
184 assert.strictEqual( key, 'barfoo' );
185 } );
186
187 }() );