Skip to content

Commit f76927e

Browse files
Merge branch 'master' into feature/session-storage
2 parents a2fb204 + 6cbae3b commit f76927e

File tree

8 files changed

+1054
-1
lines changed

8 files changed

+1054
-1
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
/**
2+
* @jest-environment jsdom
3+
*/
4+
import { Cookie, Priority, SameSite } from '@/storage/Cookie'
5+
6+
7+
describe( 'Cookie', () => {
8+
9+
enum CookieName
10+
{
11+
COOKIE_1 = 'cookie-1',
12+
COOKIE_2 = 'cookie-2',
13+
}
14+
15+
interface Cookie1
16+
{
17+
test: 'value'
18+
}
19+
20+
21+
interface Cookie2
22+
{
23+
test: boolean
24+
}
25+
26+
interface CookiesMap
27+
{
28+
[ CookieName.COOKIE_1 ]: Cookie1
29+
[ CookieName.COOKIE_2 ]: Cookie2
30+
}
31+
32+
const cookie1 = Cookie.parse<CookieName, Cookie1>( {
33+
Name : CookieName.COOKIE_1,
34+
Value : { test: 'value' },
35+
Path : '/specific-path',
36+
Priority : Priority.High,
37+
Expires : Date.now() + 20 * 60 * 1000,
38+
Domain : 'example.com',
39+
Secure : true,
40+
HttpOnly : true,
41+
SameSite : SameSite.Lax,
42+
MaxAge : Date.now() + 30 * 60 * 1000,
43+
Partitioned : true,
44+
} )
45+
46+
const cookie2 = Cookie.parse<CookieName, Cookie2>( {
47+
Name : CookieName.COOKIE_2,
48+
Value : { test: true },
49+
} )
50+
51+
const defaultCookies = [ cookie1, cookie2 ]
52+
53+
beforeEach( () => {
54+
55+
let cookieValue = defaultCookies.map(
56+
cookie => Cookie.toString<CookieName, CookiesMap[ CookieName ]>( cookie )
57+
).join( '; ' )
58+
59+
Object.defineProperty( document, 'cookie', {
60+
configurable: true,
61+
get : () => cookieValue,
62+
set : value => {
63+
const cookies = Cookie.fromListString( cookieValue )
64+
const newCookie = Cookie.fromString( value )
65+
66+
if ( ! newCookie ) return
67+
68+
cookies.set( newCookie.get( 'Name' ), newCookie )
69+
70+
cookieValue = Array.from( cookies.entries() )
71+
.map( ( [, cookie ] ) => Cookie.toString( cookie ) )
72+
.join( '; ' )
73+
74+
},
75+
} )
76+
77+
} )
78+
79+
80+
describe( 'Cookie.get()', () => {
81+
82+
it( 'returns a Cookie Map if any from Document.cookie', () => {
83+
expect( Cookie.get<Cookie1>( CookieName.COOKIE_1 ) )
84+
.toBeInstanceOf( Map )
85+
86+
expect( Cookie.get( 'unexisting-cookie' ) )
87+
.toBeUndefined()
88+
} )
89+
90+
} )
91+
92+
93+
describe( 'Cookie.set()', () => {
94+
95+
it( 'accepts an object with Cookie parameters', () => {
96+
const cookie = Cookie.set( {
97+
Name: 'testcookie',
98+
} )
99+
100+
expect( cookie ).toBeInstanceOf( Map )
101+
expect(
102+
Cookie.fromListString( document.cookie ).has( 'testcookie' )
103+
).toBe( true )
104+
} )
105+
106+
107+
it( 'accepts an object with a Cookie Map', () => {
108+
const cookie = Cookie.parse( {
109+
Name: 'testcookie',
110+
} )
111+
expect( Cookie.set( cookie ) ).toBe( cookie )
112+
expect(
113+
Cookie.fromListString( document.cookie ).has( 'testcookie' )
114+
).toBe( true )
115+
116+
} )
117+
118+
} )
119+
120+
121+
describe( 'Cookie.delete()', () => {
122+
it( 'removes a cookie from Document.cookie by setting `Max-Age` to zero', () => {
123+
124+
Cookie.delete( CookieName.COOKIE_1 )
125+
const cookies = Cookie.fromListString( document.cookie )
126+
127+
expect( cookies.get( CookieName.COOKIE_1 )?.get( 'MaxAge' ) )
128+
.toBe( 0 )
129+
130+
} )
131+
} )
132+
133+
} )

0 commit comments

Comments
 (0)