1# This Source Code Form is subject to the terms of the Mozilla Public 2# License, v. 2.0. If a copy of the MPL was not distributed with this 3# file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5import calendar 6import random 7import time 8 9from marionette_driver.errors import UnsupportedOperationException 10from marionette_harness import MarionetteTestCase 11 12 13class CookieTest(MarionetteTestCase): 14 15 def setUp(self): 16 MarionetteTestCase.setUp(self) 17 test_url = self.marionette.absolute_url('test.html') 18 self.marionette.navigate(test_url) 19 self.COOKIE_A = {"name": "foo", 20 "value": "bar", 21 "path": "/", 22 "secure": False} 23 24 def tearDown(self): 25 self.marionette.delete_all_cookies() 26 MarionetteTestCase.tearDown(self) 27 28 def test_add_cookie(self): 29 self.marionette.add_cookie(self.COOKIE_A) 30 cookie_returned = str(self.marionette.execute_script("return document.cookie")) 31 self.assertTrue(self.COOKIE_A["name"] in cookie_returned) 32 33 def test_adding_a_cookie_that_expired_in_the_past(self): 34 cookie = self.COOKIE_A.copy() 35 cookie["expiry"] = calendar.timegm(time.gmtime()) - 1 36 self.marionette.add_cookie(cookie) 37 cookies = self.marionette.get_cookies() 38 self.assertEquals(0, len(cookies)) 39 40 def test_chrome_error(self): 41 with self.marionette.using_context("chrome"): 42 self.assertRaises(UnsupportedOperationException, 43 self.marionette.add_cookie, self.COOKIE_A) 44 self.assertRaises(UnsupportedOperationException, 45 self.marionette.delete_cookie, self.COOKIE_A) 46 self.assertRaises(UnsupportedOperationException, 47 self.marionette.delete_all_cookies) 48 self.assertRaises(UnsupportedOperationException, 49 self.marionette.get_cookies) 50 51 def test_delete_all_cookie(self): 52 self.marionette.add_cookie(self.COOKIE_A) 53 cookie_returned = str(self.marionette.execute_script("return document.cookie")) 54 print cookie_returned 55 self.assertTrue(self.COOKIE_A["name"] in cookie_returned) 56 self.marionette.delete_all_cookies() 57 self.assertFalse(self.marionette.get_cookies()) 58 59 def test_delete_cookie(self): 60 self.marionette.add_cookie(self.COOKIE_A) 61 cookie_returned = str(self.marionette.execute_script("return document.cookie")) 62 self.assertTrue(self.COOKIE_A["name"] in cookie_returned) 63 self.marionette.delete_cookie("foo") 64 cookie_returned = str(self.marionette.execute_script("return document.cookie")) 65 self.assertFalse(self.COOKIE_A["name"] in cookie_returned) 66 67 def test_should_get_cookie_by_name(self): 68 key = "key_{}".format(int(random.random()*10000000)) 69 self.marionette.execute_script("document.cookie = arguments[0] + '=set';", [key]) 70 71 cookie = self.marionette.get_cookie(key) 72 self.assertEquals("set", cookie["value"]) 73 74 def test_get_all_cookies(self): 75 key1 = "key_{}".format(int(random.random()*10000000)) 76 key2 = "key_{}".format(int(random.random()*10000000)) 77 78 cookies = self.marionette.get_cookies() 79 count = len(cookies) 80 81 one = {"name" :key1, 82 "value": "value"} 83 two = {"name":key2, 84 "value": "value"} 85 86 self.marionette.add_cookie(one) 87 self.marionette.add_cookie(two) 88 89 test_url = self.marionette.absolute_url('test.html') 90 self.marionette.navigate(test_url) 91 cookies = self.marionette.get_cookies() 92 self.assertEquals(count + 2, len(cookies)) 93 94 def test_should_not_delete_cookies_with_a_similar_name(self): 95 cookieOneName = "fish" 96 cookie1 = {"name" :cookieOneName, 97 "value":"cod"} 98 cookie2 = {"name" :cookieOneName + "x", 99 "value": "earth"} 100 self.marionette.add_cookie(cookie1) 101 self.marionette.add_cookie(cookie2) 102 103 self.marionette.delete_cookie(cookieOneName) 104 cookies = self.marionette.get_cookies() 105 106 self.assertFalse(cookie1["name"] == cookies[0]["name"], msg=str(cookies)) 107 self.assertEquals(cookie2["name"] , cookies[0]["name"], msg=str(cookies)) 108 109 def test_we_get_required_elements_when_available(self): 110 self.marionette.add_cookie(self.COOKIE_A) 111 cookies = self.marionette.get_cookies() 112 113 self.assertIn("name", cookies[0], 'name not available') 114 self.assertIn("value", cookies[0], 'value not available') 115 self.assertIn("httpOnly", cookies[0], 'httpOnly not available') 116