def test_match_data(self): """Pick the best data match""" url = "form" form = MockResponse() form.src = """ <form method="post"> <input type="text" name="one" value="one" /> <input type="text" name="two" value="two" /> <input type="text" name="three" value="three" /> <input type="submit" /> </form> """ right = MockResponse() right.src = "right" wrong = MockResponse() wrong.src = "wrong" self.backend.responses.add(form, url) self.backend.responses.add(wrong, url, "POST", dict(one="one")) self.backend.responses.add(wrong, url, "POST", dict(two="two")) self.backend.responses.add(right, url, "POST", dict(one="one", two="two")) self.backend.responses.add(wrong, url, "POST", dict(three="three")) self.browser.go(url) self.browser.form_select(0) self.browser.form_submit() self.assertEqual(right.src, self.browser.src)
def test_header_passed(self): """Pass a header and make sure the correct data comes back""" right = MockResponse() wrong = MockResponse() right.src = "right" wrong.src = "wrong" headers_for_right = dict(a=1, b=2) url = "header" self.backend.responses.add(right, url, headers=headers_for_right) self.backend.responses.add(wrong, url) self.browser.go(url=url, headers=headers_for_right) self.assertEqual(self.browser.src, right.src)
def test_mocked_content_duckduckgo(self): """Let's pretend that duckduckgo.com's frontpage has a silly message""" # Arrange url = "duckduckgo.com/html" mock = MockResponse() mock.src = "Try Google" self.backend.responses.add(mock, url) # Act self.browser.go(url) # Assert self.assertEqual(self.browser.src, mock.src)
def test_follow_link(self): """Follow a link""" link_url = 'link' right_url = 'http://right' link_text = "Link text" link = MockResponse() link.src = """ <a href="%s">%s</a> """ % (right_url, link_text) right = MockResponse() right.src = "success" self.backend.responses.add(link, link_url) self.backend.responses.add(right, right_url) # Act self.browser.go(link_url) self.browser.follow_link(link_text) self.assertEqual(self.browser.src, right.src)
def test_no_match_data(self): """Error when no canned data matches""" url = "form" form = MockResponse() form.src = """ <form method="post"> <input type="text" name="one" value="one" /> <input type="text" name="two" value="two" /> <input type="text" name="three" value="three" /> <input type="submit" /> </form> """ wrong = MockResponse() wrong.src = "wrong" self.backend.responses.add(form, url) self.backend.responses.add(wrong, url, "POST", dict(four="four")) self.browser.go(url) self.browser.form_select(0) self.assertRaises(LookupError, self.browser.form_submit)
def test_no_action(self): """When no action is specified in a form the URL should be replicated""" url = 'form' form = MockResponse() form.src = """ <form method="post"> <input type="submit" /> </form> """ self.backend.responses.add(form, url) self.backend.responses.add(form, url, 'POST', dict()) self.browser.go(url) self.browser.form_select(0) self.browser.form_submit()
def test_no_method(self): """When no method is specified in a form the default should be GET""" form = MockResponse() form.src = """ <form> <input type="hidden" name="name" value="value" /> <input type="submit" /> </form> """ self.backend.responses.add(form, 'form') self.backend.responses.add(form, 'form?name=value', 'GET') self.browser.go('form') self.browser.form_select(0) self.browser.form_submit()
def test_delete(self): """Positive test for DELETE""" # Arrange mock = MockResponse() mock.http_code = 200 mock.src = 'success' uid = 1 url = '%s/object/%s' % (self.client.base, uid) method = 'DELETE' self.backend.responses.add(mock, url, method) # Act, Assert self.assertEqual(self.client.delete('object', uid), mock.src)
def test_head(self): """Positive test for HEAD""" # Arrange mock = MockResponse() mock.http_code = 200 mock.src = 'failure' uid = 1 url = '%s/object/%s' % (self.client.base, uid) method = 'HEAD' self.backend.responses.add(mock, url, method) # Act, Assert self.assertEqual(self.client.head('object', uid), None)
def test_post(self): """Positive test for POST""" # Arrange mock = MockResponse() mock.http_code = 200 mock.src = 'success' url = '%s/object' % self.client.base method = 'POST' data = urlencode(dict(a=1, b=2, c=3)) self.backend.responses.add(mock, url, method, data) # Act, Assert self.assertEqual(self.client.post('object', data), mock.src)
def test_get(self): """Positive test for JSON GET""" # Arrange mock = MockResponse() mock.http_code = 200 mock.src = '"success"' expected = "success" uid = 1 url = '%s/object/%s' % (self.client.base, uid) method = 'GET' self.backend.responses.add(mock, url, method) # Act, Assert self.assertEqual(self.client.get('object', uid), expected)
def test_post(self): """Positive test for JSON POST""" # Arrange mock = MockResponse() mock.http_code = 200 mock.src = '"success"' expected = "success" url = '%s/object' % self.client.base method = 'POST' data = dict(a=1, b=2, c=3) expected_data = '{"a": 1, "c": 3, "b": 2}' headers = { 'Content-Type': 'text/json' } self.backend.responses.add(mock, url, method, expected_data, headers) # Act, Assert self.assertEqual(self.client.post('object', data), expected, {'Content-Type': 'text/json'})
def mocked_visit(self): mock = MockResponse() mock.src = "test data" mock.http_code = 123 mock.headers = {} url = "" method = 'GET' data = None headers = None follow = None agent = None retries = None debug = None self.backend.responses.add(mock, url, method, data, headers) self.browser.go(url, method, data, headers, follow, agent, retries, debug) return url, mock