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