Skip to content

Commit 75e89a9

Browse files
committed
Simplify cookies and add extra unit tests
1 parent 1aa8835 commit 75e89a9

File tree

8 files changed

+119
-165
lines changed

8 files changed

+119
-165
lines changed

rb/lib/selenium/webdriver/bidi/network/cookies.rb

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,34 @@ module Selenium
2121
module WebDriver
2222
class BiDi
2323
class Cookies < Hash
24+
KNOWN_KEYS = %i[name value domain path expiry http_only secure same_site size max_age].freeze
25+
2426
def initialize(cookies = {})
2527
super()
2628
merge!(cookies)
2729
end
2830

2931
def as_json
30-
map do |name, value|
31-
{
32-
name: name.to_s,
33-
value: {
34-
type: 'string',
35-
value: value.to_s
36-
}
37-
}
38-
end
32+
cookie_hash = {
33+
name: self[:name].to_s,
34+
value: {
35+
type: 'string',
36+
value: self[:value].to_s
37+
},
38+
domain: self[:domain],
39+
path: self[:path],
40+
size: self[:size],
41+
httpOnly: self[:http_only],
42+
secure: self[:secure],
43+
sameSite: self[:same_site],
44+
expiry: self[:expiry],
45+
maxAge: self[:max_age]
46+
}
47+
48+
extra_fields = except(KNOWN_KEYS)
49+
cookie_hash.merge!(extra_fields) { |_k, old_val, _new_val| old_val }
50+
51+
[cookie_hash.compact]
3952
end
4053
end
4154
end # BiDi

rb/lib/selenium/webdriver/bidi/network/intercepted_response.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
require_relative 'credentials'
2121
require_relative 'headers'
22-
require_relative 'set_cookie_headers'
22+
require_relative 'cookies'
2323

2424
module Selenium
2525
module WebDriver
@@ -35,7 +35,7 @@ def initialize(network, request)
3535
def continue
3636
network.continue_response(
3737
id: id,
38-
cookies: set_cookie_headers.as_json,
38+
cookies: cookies.as_json,
3939
headers: headers.as_json,
4040
credentials: credentials.as_json,
4141
reason: reason
@@ -50,8 +50,8 @@ def headers
5050
@headers ||= Headers.new
5151
end
5252

53-
def set_cookie_headers(set_cookie_headers = {})
54-
@set_cookie_headers ||= SetCookieHeaders.new(set_cookie_headers)
53+
def cookies(cookies = {})
54+
@cookies ||= Cookies.new(cookies)
5555
end
5656
end
5757
end # BiDi

rb/lib/selenium/webdriver/bidi/network/set_cookie_headers.rb

Lines changed: 0 additions & 52 deletions
This file was deleted.

rb/sig/lib/selenium/webdriver/bidi/network/cookies.rbs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ module Selenium
22
module WebDriver
33
class BiDi
44
class Cookies
5-
def initialize: (Hash[Symbol, String] cookies) -> void
5+
KNOWN_KEYS: Array[Symbol]
66

7-
def as_json: () -> Hash[Symbol, String]
7+
def initialize: (Hash[Symbol, String | Integer | bool] cookies) -> void
8+
9+
def as_json: () -> Array[Hash[Symbol, untyped]]
810
end
911
end
1012
end

rb/sig/lib/selenium/webdriver/bidi/network/intercepted_response.rbs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,25 @@ module Selenium
22
module WebDriver
33
class BiDi
44
class InterceptedResponse < InterceptedItem
5-
@reason: untyped
5+
@cookies: Hash[Symbol, String | Integer]?
6+
7+
@reason: String
68

79
@credentials: untyped
810

911
@headers: untyped
1012

11-
@set_cookie_headers: untyped
12-
13-
attr_accessor reason: untyped
13+
attr_accessor reason: String
1414

1515
def initialize: (untyped network, untyped request) -> void
1616

1717
def continue: () -> untyped
1818

19+
def cookies:(?Hash[Symbol, String | Integer]? set_cookie_headers) -> untyped
20+
1921
def credentials: (?username: untyped?, ?password: untyped?) -> untyped
2022

2123
def headers: () -> untyped
22-
23-
def set_cookie_headers: (?untyped? set_cookie_headers) -> untyped
2424
end
2525
end
2626
end

rb/spec/integration/selenium/webdriver/network_spec.rb

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,17 @@ module WebDriver
149149
request.url = url_for('formPage.html')
150150
request.headers['foo'] = 'bar'
151151
request.headers['baz'] = 'qux'
152-
request.cookies['foo'] = 'bar'
152+
request.cookies({
153+
name: 'test',
154+
value: 'value4',
155+
domain: 'example.com',
156+
path: '/path',
157+
size: 1234,
158+
http_only: true,
159+
secure: true,
160+
same_site: 'Strict',
161+
expiry: 1234
162+
})
153163
request.body = ({test: 'example'})
154164
request.continue
155165
end
@@ -159,28 +169,6 @@ module WebDriver
159169
end
160170
end
161171

162-
it 'removes a header from a request handler' do
163-
reset_driver!(web_socket_url: true) do |driver|
164-
network = described_class.new(driver)
165-
network.add_request_handler do |request|
166-
request.add_header('foo', 'bar')
167-
request.remove_header('foo')
168-
expect(request.headers).to be_empty
169-
end
170-
end
171-
end
172-
173-
it 'removes a cookie from a request handler' do
174-
reset_driver!(web_socket_url: true) do |driver|
175-
network = described_class.new(driver)
176-
network.add_request_handler do |request|
177-
request.add_cookie('foo', 'bar')
178-
request.remove_cookie('foo')
179-
expect(request.cookies).to be_empty
180-
end
181-
end
182-
end
183-
184172
it 'fails a request' do
185173
reset_driver!(web_socket_url: true) do |driver|
186174
network = described_class.new(driver)
@@ -256,16 +244,16 @@ module WebDriver
256244
response.headers['foo'] = 'bar'
257245
response.credentials.username = 'foo'
258246
response.credentials.password = 'bar'
259-
response.set_cookie_headers({
260-
name: 'foo',
261-
domain: 'localhost',
262-
http_only: true,
263-
expiry: '1_000_000',
264-
max_age: 1_000,
265-
path: '/',
266-
same_site: 'none',
267-
secure: false
268-
})
247+
response.cookies({
248+
name: 'foo',
249+
domain: 'localhost',
250+
http_only: true,
251+
expiry: '1_000_000',
252+
max_age: 1_000,
253+
path: '/',
254+
same_site: 'none',
255+
secure: false
256+
})
269257
response.continue
270258
end
271259
driver.navigate.to url_for('formPage.html')

rb/spec/unit/selenium/webdriver/bidi/cookies_spec.rb

Lines changed: 62 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,76 @@ module Selenium
2424
module WebDriver
2525
class BiDi
2626
describe Cookies do
27-
let(:cookies) { described_class.new }
28-
2927
it 'returns the cookies as json' do
28+
cookies = described_class.new
3029
cookies['key4'] = 'value4'
3130
cookies['session_id'] = 'xyz123'
3231

3332
formatted_cookies = cookies.as_json
3433
expect(formatted_cookies).to be_an(Array)
35-
expect(formatted_cookies.size).to eq(2)
34+
expect(formatted_cookies.first['key4']).to eq('value4')
35+
expect(formatted_cookies.first['session_id']).to eq('xyz123')
36+
end
37+
38+
it 'serializes the cookies needed for request' do
39+
cookies =
40+
described_class.new(
41+
{
42+
name: 'test',
43+
value: 'value4',
44+
domain: 'example.com',
45+
path: '/path',
46+
size: 1234,
47+
http_only: true,
48+
secure: true,
49+
same_site: 'Strict',
50+
expiry: 1234
51+
}
52+
)
53+
54+
formatted_cookies = cookies.as_json
55+
expect(formatted_cookies).to be_an(Array)
56+
expect(formatted_cookies.size).to eq(1)
57+
58+
request_cookies = formatted_cookies.first
59+
expect(request_cookies[:name]).to eq('test')
60+
expect(request_cookies[:value][:type]).to eq('string')
61+
expect(request_cookies[:value][:value]).to eq('value4')
62+
expect(request_cookies[:domain]).to eq('example.com')
63+
expect(request_cookies[:path]).to eq('/path')
64+
expect(request_cookies[:expiry]).to eq(1234)
65+
expect(request_cookies[:httpOnly]).to be(true)
66+
expect(request_cookies[:secure]).to be(true)
67+
expect(request_cookies[:sameSite]).to eq('Strict')
68+
expect(request_cookies[:size]).to eq(1234)
69+
end
3670

37-
key4_item = formatted_cookies.find { |h| h[:name] == 'key4' }
38-
expect(key4_item).not_to be_nil
39-
expect(key4_item[:value][:type]).to eq('string')
40-
expect(key4_item[:value][:value]).to eq('value4')
71+
it 'serializes the cookies needed for response' do
72+
cookies = described_class.new({
73+
name: 'test',
74+
value: 'bar',
75+
domain: 'localhost',
76+
http_only: true,
77+
expiry: '1_000_000',
78+
max_age: 1_000,
79+
path: '/',
80+
same_site: 'lax',
81+
secure: false
82+
})
4183

42-
session_item = formatted_cookies.find { |h| h[:name] == 'session_id' }
43-
expect(session_item).not_to be_nil
44-
expect(session_item[:value][:value]).to eq('xyz123')
84+
formatted_cookies = cookies.as_json
85+
expect(formatted_cookies).to be_an(Array)
86+
expect(formatted_cookies.size).to eq(1)
87+
response_cookies = formatted_cookies.first
88+
expect(response_cookies[:value][:type]).to eq('string')
89+
expect(response_cookies[:value][:value]).to eq('bar')
90+
expect(response_cookies[:domain]).to eq('localhost')
91+
expect(response_cookies[:path]).to eq('/')
92+
expect(response_cookies[:expiry]).to eq('1_000_000')
93+
expect(response_cookies[:httpOnly]).to be(true)
94+
expect(response_cookies[:secure]).to be(false)
95+
expect(response_cookies[:sameSite]).to eq('lax')
96+
expect(response_cookies[:maxAge]).to eq(1_000)
4597
end
4698
end
4799
end

rb/spec/unit/selenium/webdriver/bidi/set_cookie_headers_spec.rb

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)