Skip to content

Commit d840056

Browse files
author
heraclmene
committed
Add DeleteCookie functionality and tests.
1 parent 80527e0 commit d840056

File tree

4 files changed

+174
-10
lines changed

4 files changed

+174
-10
lines changed

remote_driver_cookie.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ type AddCookieResponse struct {
3333
State string
3434
}
3535

36+
// DeleteCookieResponse is the result returned from calling the DeleteCookie
37+
// method.
38+
type DeleteCookieResponse struct {
39+
State string
40+
}
41+
3642
func (s *seleniumWebDriver) AllCookies() (*AllCookiesResponse, error) {
3743
if len(s.sessionID) == 0 {
3844
return nil, newSessionIDError("AllCookies")
@@ -95,6 +101,7 @@ func (s *seleniumWebDriver) AddCookie(c *Cookie) (*AddCookieResponse, error) {
95101
if err != nil {
96102
return nil, newMarshallingError(err, "AddCookie", c)
97103
}
104+
98105
body := bytes.NewReader(b)
99106
resp, err := s.stateRequest(&request{
100107
url: url,
@@ -108,3 +115,25 @@ func (s *seleniumWebDriver) AddCookie(c *Cookie) (*AddCookieResponse, error) {
108115

109116
return &AddCookieResponse{State: resp.State}, nil
110117
}
118+
119+
func (s *seleniumWebDriver) DeleteCookie(name string) (*DeleteCookieResponse, error) {
120+
if len(s.sessionID) == 0 {
121+
return nil, newSessionIDError("DeleteCookie")
122+
}
123+
124+
var err error
125+
126+
url := fmt.Sprintf("%s/session/%s/cookie/%s", s.seleniumURL, s.sessionID, name)
127+
128+
resp, err := s.stateRequest(&request{
129+
url: url,
130+
body: nil,
131+
method: "DELETE",
132+
callingMethod: "DeleteCookie",
133+
})
134+
if err != nil {
135+
return nil, err
136+
}
137+
138+
return &DeleteCookieResponse{State: resp.State}, nil
139+
}

remote_driver_cookie_test.go

Lines changed: 64 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -206,16 +206,7 @@ func Test_CookieAddCookie_UnmarshallingErrorIsReturnedCorrectly(t *testing.T) {
206206
func Test_CookieAddCookie_CorrectResponseIsReturned(t *testing.T) {
207207
api := &testableAPIService{
208208
jsonToReturn: `{
209-
"state": "success",
210-
"value": {
211-
"name": "Test Cookie",
212-
"value": "Test Value",
213-
"path": "/",
214-
"domain": "www.google.com",
215-
"secure": true,
216-
"httpOnly": true,
217-
"expiry": "2016-12-25T00:00:00Z"
218-
}
209+
"state": "success"
219210
}`,
220211
errorToReturn: nil,
221212
}
@@ -228,3 +219,66 @@ func Test_CookieAddCookie_CorrectResponseIsReturned(t *testing.T) {
228219
t.Errorf(correctResponseErrorText)
229220
}
230221
}
222+
223+
/*
224+
DeleteCookie tests
225+
*/
226+
func Test_CookieDeleteCookie_InvalidSessionIdResultsInError(t *testing.T) {
227+
api := &testableAPIService{
228+
jsonToReturn: "",
229+
errorToReturn: nil,
230+
}
231+
232+
d := setUpDriver(setUpDefaultCaps(), api)
233+
_, err := d.DeleteCookie("")
234+
if err == nil || !IsSessionIDError(err) {
235+
t.Errorf(sessionIDErrorText)
236+
}
237+
}
238+
239+
func Test_CookieDeleteCookie_CommunicationErrorIsReturnedCorrectly(t *testing.T) {
240+
api := &testableAPIService{
241+
jsonToReturn: "",
242+
errorToReturn: errors.New("An error :<"),
243+
}
244+
245+
d := setUpDriver(setUpDefaultCaps(), api)
246+
d.sessionID = "12345"
247+
248+
_, err := d.DeleteCookie("")
249+
if err == nil || !IsCommunicationError(err) {
250+
t.Errorf(apiCommunicationErrorText)
251+
}
252+
}
253+
254+
func Test_CookieDeleteCookie_UnmarshallingErrorIsReturnedCorrectly(t *testing.T) {
255+
api := &testableAPIService{
256+
jsonToReturn: "Invalid JSON!",
257+
errorToReturn: nil,
258+
}
259+
260+
d := setUpDriver(setUpDefaultCaps(), api)
261+
d.sessionID = "12345"
262+
263+
_, err := d.DeleteCookie("")
264+
if err == nil || !IsUnmarshallingError(err) {
265+
t.Errorf(unmarshallingErrorText)
266+
}
267+
}
268+
269+
func Test_CookieDeleteCookie_CorrectResponseIsReturned(t *testing.T) {
270+
api := &testableAPIService{
271+
jsonToReturn: `{
272+
"state": "success"
273+
}`,
274+
errorToReturn: nil,
275+
}
276+
277+
d := setUpDriver(setUpDefaultCaps(), api)
278+
d.sessionID = "12345"
279+
280+
resp, err := d.DeleteCookie("")
281+
if err != nil || resp.State != "success" {
282+
t.Errorf(correctResponseErrorText)
283+
}
284+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package integrationtests
2+
3+
import "testing"
4+
5+
func Test_CookieDeleteCookie_CanDeleteSpecifiedCookie(t *testing.T) {
6+
setUp()
7+
defer tearDown()
8+
9+
tests := []struct {
10+
url string
11+
cookieName string
12+
}{
13+
{
14+
url: "https://news.ycombinator.com",
15+
cookieName: "__cfduid",
16+
},
17+
{
18+
url: "https://www.google.com",
19+
cookieName: "CONSENT",
20+
},
21+
}
22+
for _, te := range tests {
23+
driver := createDriver(t)
24+
_, err := driver.CreateSession()
25+
if err != nil {
26+
t.Errorf("Session creation failed")
27+
}
28+
29+
_, err = driver.Go(te.url)
30+
if err != nil {
31+
t.Errorf("Navigation failed")
32+
}
33+
34+
resp, err := driver.DeleteCookie(te.cookieName)
35+
if err != nil || resp.State != "success" {
36+
t.Errorf("Error whilst deleting cookie or was not a success.")
37+
}
38+
39+
cookie, err := driver.Cookie(te.cookieName)
40+
if err != nil || cookie.Cookie.Name == te.cookieName {
41+
t.Errorf("Cookie still exists or an error occurred.")
42+
}
43+
44+
driver.DeleteSession()
45+
46+
printObjectResult(resp)
47+
}
48+
}
49+
50+
func Test_CookieDeleteCookie_CanDeleteAllCookies(t *testing.T) {
51+
setUp()
52+
defer tearDown()
53+
54+
driver := createDriver(t)
55+
_, err := driver.CreateSession()
56+
if err != nil {
57+
t.Errorf("Session creation failed")
58+
}
59+
60+
_, err = driver.Go("https://www.google.com")
61+
if err != nil {
62+
t.Errorf("Navigation failed")
63+
}
64+
65+
resp, err := driver.DeleteCookie("")
66+
if err != nil || resp.State != "success" {
67+
t.Errorf("Error whilst deleting cookie or was not a success.")
68+
}
69+
70+
cookies, err := driver.AllCookies()
71+
if err != nil || len(cookies.Cookies) != 0 {
72+
t.Errorf("Cookies still exist or error was returned.")
73+
}
74+
75+
printObjectResult(resp)
76+
}

web_driver.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ type WebDriver interface {
201201

202202
// AddCookie adds a cookie to the current browsing context.
203203
AddCookie(c *Cookie) (*AddCookieResponse, error)
204+
205+
// DeleteCookie deletes a cookie from the current browsing session. If name
206+
// is passed as an empty string, all cookies for the current address will
207+
// be deleted.
208+
DeleteCookie(name string) (*DeleteCookieResponse, error)
204209
}
205210

206211
// Element is an interface which specifies what all WebDriver elements

0 commit comments

Comments
 (0)