Skip to content

Commit 6fe099f

Browse files
authored
Cookies tests improvements (#1025)
* Some progress * Cookies tests improvements * Codefactor
1 parent 8c071a0 commit 6fe099f

File tree

3 files changed

+305
-46
lines changed

3 files changed

+305
-46
lines changed
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
using System;
2+
using System.Linq;
3+
using System.Threading.Tasks;
4+
using Xunit;
5+
using Xunit.Abstractions;
6+
7+
namespace PuppeteerSharp.Tests.PageTests.Cookies
8+
{
9+
[Collection("PuppeteerLoaderFixture collection")]
10+
public class CookiesTests : PuppeteerPageBaseTest
11+
{
12+
public CookiesTests(ITestOutputHelper output) : base(output)
13+
{
14+
}
15+
16+
[Fact]
17+
public async Task ShouldReturnNoCookiesInPristineBrowserContext()
18+
{
19+
await Page.GoToAsync(TestConstants.EmptyPage);
20+
Assert.Empty(await Page.GetCookiesAsync());
21+
}
22+
23+
[Fact]
24+
public async Task ShouldGetACookie()
25+
{
26+
await Page.GoToAsync(TestConstants.EmptyPage);
27+
Assert.Empty(await Page.GetCookiesAsync());
28+
29+
await Page.EvaluateExpressionAsync("document.cookie = 'username=John Doe'");
30+
var cookie = Assert.Single(await Page.GetCookiesAsync());
31+
Assert.Equal("username", cookie.Name);
32+
Assert.Equal("John Doe", cookie.Value);
33+
Assert.Equal("localhost", cookie.Domain);
34+
Assert.Equal("/", cookie.Path);
35+
Assert.Equal(cookie.Expires, -1);
36+
Assert.Equal(16, cookie.Size);
37+
Assert.False(cookie.HttpOnly);
38+
Assert.False(cookie.Secure);
39+
Assert.True(cookie.Session);
40+
}
41+
42+
[Fact]
43+
public async Task ShouldGetMultipleCookies()
44+
{
45+
await Page.GoToAsync(TestConstants.EmptyPage);
46+
Assert.Empty(await Page.GetCookiesAsync());
47+
48+
await Page.EvaluateFunctionAsync(@"() => {
49+
document.cookie = 'username=John Doe';
50+
document.cookie = 'password=1234';
51+
}");
52+
53+
var cookies = (await Page.GetCookiesAsync()).OrderBy(c => c.Name).ToList();
54+
55+
var cookie = cookies[0];
56+
Assert.Equal("password", cookie.Name);
57+
Assert.Equal("1234", cookie.Value);
58+
Assert.Equal("localhost", cookie.Domain);
59+
Assert.Equal("/", cookie.Path);
60+
Assert.Equal(cookie.Expires, -1);
61+
Assert.Equal(12, cookie.Size);
62+
Assert.False(cookie.HttpOnly);
63+
Assert.False(cookie.Secure);
64+
Assert.True(cookie.Session);
65+
66+
cookie = cookies[1];
67+
Assert.Equal("username", cookie.Name);
68+
Assert.Equal("John Doe", cookie.Value);
69+
Assert.Equal("localhost", cookie.Domain);
70+
Assert.Equal("/", cookie.Path);
71+
Assert.Equal(cookie.Expires, -1);
72+
Assert.Equal(16, cookie.Size);
73+
Assert.False(cookie.HttpOnly);
74+
Assert.False(cookie.Secure);
75+
Assert.True(cookie.Session);
76+
}
77+
78+
[Fact]
79+
public async Task ShouldGetCookiesFromMultipleUrls()
80+
{
81+
await Page.SetCookieAsync(
82+
new CookieParam
83+
{
84+
Url = "https://foo.com",
85+
Name = "doggo",
86+
Value = "woofs"
87+
},
88+
new CookieParam
89+
{
90+
Url = "https://bar.com",
91+
Name = "catto",
92+
Value = "purrs"
93+
},
94+
new CookieParam
95+
{
96+
Url = "https://baz.com",
97+
Name = "birdo",
98+
Value = "tweets"
99+
}
100+
);
101+
var cookies = (await Page.GetCookiesAsync("https://foo.com", "https://baz.com")).OrderBy(c => c.Name).ToList();
102+
103+
Assert.Equal(2, cookies.Count);
104+
105+
var cookie = cookies[0];
106+
Assert.Equal("birdo", cookie.Name);
107+
Assert.Equal("tweets", cookie.Value);
108+
Assert.Equal("baz.com", cookie.Domain);
109+
Assert.Equal("/", cookie.Path);
110+
Assert.Equal(cookie.Expires, -1);
111+
Assert.Equal(11, cookie.Size);
112+
Assert.False(cookie.HttpOnly);
113+
Assert.True(cookie.Secure);
114+
Assert.True(cookie.Session);
115+
116+
cookie = cookies[1];
117+
Assert.Equal("doggo", cookie.Name);
118+
Assert.Equal("woofs", cookie.Value);
119+
Assert.Equal("foo.com", cookie.Domain);
120+
Assert.Equal("/", cookie.Path);
121+
Assert.Equal(cookie.Expires, -1);
122+
Assert.Equal(10, cookie.Size);
123+
Assert.False(cookie.HttpOnly);
124+
Assert.True(cookie.Secure);
125+
Assert.True(cookie.Session);
126+
}
127+
}
128+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Linq;
3+
using System.Threading.Tasks;
4+
using Xunit;
5+
using Xunit.Abstractions;
6+
7+
namespace PuppeteerSharp.Tests.PageTests.Cookies
8+
{
9+
[Collection("PuppeteerLoaderFixture collection")]
10+
public class DeleteCookiesTests : PuppeteerPageBaseTest
11+
{
12+
public DeleteCookiesTests(ITestOutputHelper output) : base(output)
13+
{
14+
}
15+
16+
[Fact]
17+
public async Task ShouldDeleteACookie()
18+
{
19+
await Page.GoToAsync(TestConstants.ServerUrl + "/grid.html");
20+
await Page.SetCookieAsync(new CookieParam
21+
{
22+
Name = "cookie1",
23+
Value = "1"
24+
}, new CookieParam
25+
{
26+
Name = "cookie2",
27+
Value = "2"
28+
}, new CookieParam
29+
{
30+
Name = "cookie3",
31+
Value = "3"
32+
});
33+
Assert.Equal("cookie1=1; cookie2=2; cookie3=3", await Page.EvaluateExpressionAsync<string>("document.cookie"));
34+
await Page.DeleteCookieAsync(new CookieParam { Name = "cookie2" });
35+
Assert.Equal("cookie1=1; cookie3=3", await Page.EvaluateExpressionAsync<string>("document.cookie"));
36+
}
37+
}
38+
}

lib/PuppeteerSharp.Tests/PageTests/CookiesTests.cs renamed to lib/PuppeteerSharp.Tests/PageTests/Cookies/SetCookiesTests.cs

Lines changed: 139 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,61 +4,130 @@
44
using Xunit;
55
using 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

Comments
 (0)