44using Xunit ;
55using Xunit . Abstractions ;
66
7- namespace PuppeteerSharp . Tests . PageTests
7+ namespace PuppeteerSharp . Tests . PageTests . Cookies
88{
99 [ Collection ( "PuppeteerLoaderFixture collection" ) ]
10- public class CookiesTests : PuppeteerPageBaseTest
10+ public class SetCookiesTests : PuppeteerPageBaseTest
1111 {
12- public CookiesTests ( ITestOutputHelper output ) : base ( output )
12+ public SetCookiesTests ( ITestOutputHelper output ) : base ( output )
1313 {
1414 }
1515
1616 [ Fact ]
17- public async Task ShouldGetAndSetCookies ( )
17+ public async Task ShouldWork ( )
1818 {
19- await Page . GoToAsync ( TestConstants . ServerUrl + "/grid.html" ) ;
20- Assert . Empty ( await Page . GetCookiesAsync ( ) ) ;
19+ await Page . GoToAsync ( TestConstants . EmptyPage ) ;
20+ await Page . SetCookieAsync ( new CookieParam
21+ {
22+ Name = "password" ,
23+ Value = "123456"
24+ } ) ;
25+ Assert . Equal ( "password=123456" , await Page . EvaluateExpressionAsync < string > ( "document.cookie" ) ) ;
26+ }
2127
22- await Page . EvaluateExpressionAsync ( "document.cookie = 'username=John Doe'" ) ;
23- var cookie = Assert . Single ( await Page . GetCookiesAsync ( ) ) ;
24- Assert . Equal ( "username" , cookie . Name ) ;
25- Assert . Equal ( "John Doe" , cookie . Value ) ;
26- Assert . Equal ( "localhost" , cookie . Domain ) ;
27- Assert . Equal ( "/" , cookie . Path ) ;
28- Assert . Equal ( cookie . Expires , - 1 ) ;
29- Assert . Equal ( 16 , cookie . Size ) ;
30- Assert . False ( cookie . HttpOnly ) ;
31- Assert . False ( cookie . Secure ) ;
32- Assert . True ( cookie . Session ) ;
28+ [ Fact ]
29+ public async Task ShouldIsolateCookiesInBrowserContexts ( )
30+ {
31+ var anotherContext = await Browser . CreateIncognitoBrowserContextAsync ( ) ;
32+ var anotherPage = await anotherContext . NewPageAsync ( ) ;
33+
34+ await Page . GoToAsync ( TestConstants . EmptyPage ) ;
35+ await anotherPage . GoToAsync ( TestConstants . EmptyPage ) ;
36+
37+ await Page . SetCookieAsync ( new CookieParam
38+ {
39+ Name = "page1cookie" ,
40+ Value = "page1value"
41+ } ) ;
42+
43+ await anotherPage . SetCookieAsync ( new CookieParam
44+ {
45+ Name = "page2cookie" ,
46+ Value = "page2value"
47+ } ) ;
48+
49+ var cookies1 = await Page . GetCookiesAsync ( ) ;
50+ var cookies2 = await anotherPage . GetCookiesAsync ( ) ;
51+
52+ Assert . Single ( cookies1 ) ;
53+ Assert . Single ( cookies2 ) ;
54+ Assert . Equal ( "page1cookie" , cookies1 [ 0 ] . Name ) ;
55+ Assert . Equal ( "page1value" , cookies1 [ 0 ] . Value ) ;
56+ Assert . Equal ( "page2cookie" , cookies2 [ 0 ] . Name ) ;
57+ Assert . Equal ( "page2value" , cookies2 [ 0 ] . Value ) ;
58+
59+ await anotherContext . CloseAsync ( ) ;
60+ }
61+
62+ [ Fact ]
63+ public async Task ShouldSetMultipleCookies ( )
64+ {
65+ await Page . GoToAsync ( TestConstants . EmptyPage ) ;
66+
67+ await Page . SetCookieAsync (
68+ new CookieParam
69+ {
70+ Name = "password" ,
71+ Value = "123456"
72+ } ,
73+ new CookieParam
74+ {
75+ Name = "foo" ,
76+ Value = "bar"
77+ }
78+ ) ;
79+
80+ Assert . Equal (
81+ new [ ]
82+ {
83+ "foo=bar" ,
84+ "password=123456"
85+ } ,
86+ await Page . EvaluateFunctionAsync < string [ ] > ( @"() => {
87+ const cookies = document.cookie.split(';');
88+ return cookies.map(cookie => cookie.trim()).sort();
89+ }" )
90+ ) ;
91+ }
92+
93+ [ Fact ]
94+ public async Task ShouldHaveExpiresSetToMinus1ForSessionCookies ( )
95+ {
96+ await Page . GoToAsync ( TestConstants . EmptyPage ) ;
3397
3498 await Page . SetCookieAsync ( new CookieParam
3599 {
36100 Name = "password" ,
37101 Value = "123456"
38102 } ) ;
39- Assert . Equal ( "username=John Doe; password=123456" , await Page . EvaluateExpressionAsync < string > ( "document.cookie" ) ) ;
40- var cookies = ( await Page . GetCookiesAsync ( ) ) . OrderBy ( c => c . Name ) . ToList ( ) ;
41- Assert . Equal ( 2 , cookies . Count ) ;
42-
43- Assert . Equal ( "password" , cookies [ 0 ] . Name ) ;
44- Assert . Equal ( "123456" , cookies [ 0 ] . Value ) ;
45- Assert . Equal ( "localhost" , cookies [ 0 ] . Domain ) ;
46- Assert . Equal ( "/" , cookies [ 0 ] . Path ) ;
47- Assert . Equal ( cookies [ 0 ] . Expires , - 1 ) ;
48- Assert . Equal ( 14 , cookies [ 0 ] . Size ) ;
49- Assert . False ( cookies [ 0 ] . HttpOnly ) ;
50- Assert . False ( cookies [ 0 ] . Secure ) ;
103+
104+ var cookies = await Page . GetCookiesAsync ( ) ;
105+
51106 Assert . True ( cookies [ 0 ] . Session ) ;
107+ Assert . Equal ( - 1 , cookies [ 0 ] . Expires ) ;
108+ }
109+
110+ [ Fact ]
111+ public async Task ShouldSetCookieWithReasonableDefaults ( )
112+ {
113+ await Page . GoToAsync ( TestConstants . EmptyPage ) ;
114+
115+ await Page . SetCookieAsync ( new CookieParam
116+ {
117+ Name = "password" ,
118+ Value = "123456"
119+ } ) ;
52120
53- Assert . Equal ( "username" , cookies [ 1 ] . Name ) ;
54- Assert . Equal ( "John Doe" , cookies [ 1 ] . Value ) ;
55- Assert . Equal ( "localhost" , cookies [ 1 ] . Domain ) ;
56- Assert . Equal ( "/" , cookies [ 1 ] . Path ) ;
57- Assert . Equal ( cookies [ 1 ] . Expires , - 1 ) ;
58- Assert . Equal ( 16 , cookies [ 1 ] . Size ) ;
59- Assert . False ( cookies [ 1 ] . HttpOnly ) ;
60- Assert . False ( cookies [ 1 ] . Secure ) ;
61- Assert . True ( cookies [ 1 ] . Session ) ;
121+ var cookie = Assert . Single ( await Page . GetCookiesAsync ( ) ) ;
122+ Assert . Equal ( "password" , cookie . Name ) ;
123+ Assert . Equal ( "123456" , cookie . Value ) ;
124+ Assert . Equal ( "localhost" , cookie . Domain ) ;
125+ Assert . Equal ( "/" , cookie . Path ) ;
126+ Assert . Equal ( - 1 , cookie . Expires ) ;
127+ Assert . Equal ( 14 , cookie . Size ) ;
128+ Assert . False ( cookie . HttpOnly ) ;
129+ Assert . False ( cookie . Secure ) ;
130+ Assert . True ( cookie . Session ) ;
62131 }
63132
64133 [ Fact ]
@@ -81,14 +150,6 @@ await Page.SetCookieAsync(new CookieParam
81150 Assert . False ( cookie . HttpOnly ) ;
82151 Assert . False ( cookie . Secure ) ;
83152 Assert . True ( cookie . Session ) ;
84- Assert . Equal ( "gridcookie=GRID" , await Page . EvaluateExpressionAsync < string > ( "document.cookie" ) ) ;
85-
86- await Page . GoToAsync ( TestConstants . ServerUrl + "/empty.html" ) ;
87- Assert . Empty ( await Page . GetCookiesAsync ( ) ) ;
88- Assert . Equal ( string . Empty , await Page . EvaluateExpressionAsync < string > ( "document.cookie" ) ) ;
89-
90- await Page . GoToAsync ( TestConstants . ServerUrl + "/grid.html" ) ;
91- Assert . Equal ( "gridcookie=GRID" , await Page . EvaluateExpressionAsync < string > ( "document.cookie" ) ) ;
92153 }
93154
94155 [ Fact ]
@@ -149,6 +210,38 @@ public async Task ShouldNotSetACookieOnADataURLPage()
149210 Assert . Equal ( "Protocol error (Network.deleteCookies): At least one of the url and domain needs to be specified" , exception . Message ) ;
150211 }
151212
213+ [ Fact ]
214+ public async Task ShouldDefaultToSettingSecureCookieForHttpsWebsites ( )
215+ {
216+ await Page . GoToAsync ( TestConstants . EmptyPage ) ;
217+ var SecureUrl = "https://example.com" ;
218+
219+ await Page . SetCookieAsync ( new CookieParam
220+ {
221+ Url = SecureUrl ,
222+ Name = "foo" ,
223+ Value = "bar"
224+ } ) ;
225+ var cookie = Assert . Single ( await Page . GetCookiesAsync ( SecureUrl ) ) ;
226+ Assert . True ( cookie . Secure ) ;
227+ }
228+
229+ [ Fact ]
230+ public async Task ShouldBeAbleToSetUnsecureCookieForHttpWebSite ( )
231+ {
232+ await Page . GoToAsync ( TestConstants . EmptyPage ) ;
233+ var SecureUrl = "http://example.com" ;
234+
235+ await Page . SetCookieAsync ( new CookieParam
236+ {
237+ Url = SecureUrl ,
238+ Name = "foo" ,
239+ Value = "bar"
240+ } ) ;
241+ var cookie = Assert . Single ( await Page . GetCookiesAsync ( SecureUrl ) ) ;
242+ Assert . False ( cookie . Secure ) ;
243+ }
244+
152245 [ Fact ]
153246 public async Task ShouldSetACookieOnADifferentDomain ( )
154247 {
0 commit comments