def test_response_handler_script(self): script = dedent(''' console.log('Multiline script'); client.global.set("auth", response.body.token); ''') body = dedent(''' > {% ''' + script + ''' %}''') tail = TailParser().parse(body) self.assertEqual( tail.response_handler, ResponseHandler(script=script.strip(), path=None, expected_status_code=None))
def test_multipart(self): body = dedent(''' --abcd Content-Disposition: form-data; name="text" Text --abcd Content-Disposition: form-data; name="file_to_send"; filename="input.txt" < ./input.txt --abcd--''') tail = TailParser(multipart_boundary='abcd').parse(body) self.assertEqual( tail.message_body, MessageBody([ MultipartField(headers=[ Header(field='Content-Disposition', value='form-data; name="text"') ], messages=[ContentLine(content='Text')]), MultipartField(headers=[ Header( field='Content-Disposition', value= 'form-data; name="file_to_send"; filename="input.txt"') ], messages=[InputFileRef(path='./input.txt')]) ]))
def test_multiple_requests(self): reqs = self.parser.parse(dedent(''' ### First GET http://example.com ### Second POST http://example.com ### ### Third /api/test Host: example.com ### ### ''')) self.assertEqual(len(reqs), 3) self.assertEqual(reqs[0].method, 'GET') self.assertEqual(reqs[0].separators, [RequestSeparator('First')]) self.assertEqual(reqs[0].target, 'http://example.com') self.assertEqual(reqs[1].method, 'POST') self.assertEqual(reqs[1].separators, [RequestSeparator('Second')]) self.assertEqual(reqs[1].target, 'http://example.com') self.assertEqual(reqs[2].method, 'GET') self.assertEqual(reqs[2].separators, [RequestSeparator(None), RequestSeparator('Third')]) self.assertEqual(reqs[2].target, '/api/test') self.assertEqual(reqs[2].headers[0], Header('Host', 'example.com'))
def test_response_ref(self): body = dedent(''' <> ./previous-response.200.json''') tail = TailParser().parse(body) self.assertEqual( tail.response_ref, ResponseReference(path='./previous-response.200.json'))
def test_response_status_code(self): body = dedent(''' >STATUS 301''') tail = TailParser().parse(body) self.assertEqual( tail.response_handler, ResponseHandler(script=None, path=None, expected_status_code=301))
def test_localhost_port(self): reqs = self.parser.parse(dedent(''' POST http://localhost:3000/api/a/b/c/ ''')) self.assertEqual(len(reqs), 1) self.assertEqual(reqs[0].method, 'POST') self.assertEqual(reqs[0].target, 'http://localhost:3000/api/a/b/c/')
def test_response_handler_path(self): body = dedent(''' > ./script.js''') tail = TailParser().parse(body) self.assertEqual( tail.response_handler, ResponseHandler(script=None, path='./script.js', expected_status_code=None))
def test_simple_with_tail(self): reqs = self.parser.parse(dedent(''' ### Post to API add POST http://example.com/api/a/b/c Content-Type: application/json From: [email protected] { "name": "entity", "value": "content" } > {% if (resp.status === 200) { resolve(); } %} <> ./path/response.ref.json ''')) self.assertEqual(len(reqs), 1) self.assertEqual(reqs[0].method, 'POST') self.assertEqual(reqs[0].target, 'http://example.com/api/a/b/c') self.assertEqual(len(reqs[0].headers), 2) self.assertEqual(reqs[0].headers[0], Header('Content-Type', 'application/json')) self.assertEqual(reqs[0].headers[1], Header('From', '*****@*****.**')) self.assertEqual(reqs[0].tail, RequestTail( message_body=MessageBody([ ContentLine('{'), ContentLine(' "name": "entity",'), ContentLine(' "value": "content"'), ContentLine('}') ]), response_handler=ResponseHandler( script=dedent(''' if (resp.status === 200) { resolve(); } ''').strip(), path=None, expected_status_code=None ), response_ref=ResponseReference(path='./path/response.ref.json') ))
def test_absolute_form(self): reqs = self.parser.parse(dedent(''' ### Post to API add POST http://example.com/api/a/b/c Content-Type: application/json ''')) self.assertEqual(len(reqs), 1) self.assertEqual(reqs[0].method, 'POST') self.assertEqual(reqs[0].target, 'http://example.com/api/a/b/c')
def test_file_refs(self): body = dedent(''' < body.json < /home/file''') tail = TailParser().parse(body) self.assertEqual( tail.message_body, MessageBody( [InputFileRef('body.json'), InputFileRef('/home/file')]))
def test_request_options(self): reqs = self.parser.parse(dedent(''' ### Post to API add // @no-redirect POST http://example.com/api/a/b/c Content-Type: application/json ''')) self.assertEqual(len(reqs), 1) self.assertEqual(reqs[0].method, 'POST') self.assertEqual(reqs[0].target, 'http://example.com/api/a/b/c')
def test_origin_form_and_headers(self): reqs = self.parser.parse(dedent(''' PUT /api/a/b/c?a=123&b=456& c=789#foo Host: multiline. example. com Content-Type: application/json ''')) self.assertEqual(len(reqs), 1) self.assertEqual(reqs[0].method, 'PUT') self.assertEqual(reqs[0].target, '/api/a/b/c?a=123&b=456&c=789#foo') self.assertEqual(reqs[0].headers[0], Header('Host', 'multiline.example.com')) self.assertEqual(reqs[0].headers[1], Header('Content-Type', 'application/json'))
def test_simple(self): reqs = self.parser.parse(dedent(''' ### Post to API add ### post-to-api POST http://example.com/api/a/b/c/ Content-Type: application/json From: [email protected] ''')) self.assertEqual(len(reqs), 1) self.assertEqual(reqs[0].id, 'post-to-api') self.assertEqual(reqs[0].method, 'POST') self.assertEqual(reqs[0].target, 'http://example.com/api/a/b/c/') self.assertEqual(len(reqs[0].headers), 2) self.assertEqual(reqs[0].headers[0], Header('Content-Type', 'application/json')) self.assertEqual(reqs[0].headers[1], Header('From', '*****@*****.**'))
def test_content_lines(self): body = dedent(''' { "foo": "bar", "param2": "value2" }''') tail = TailParser().parse(body) self.assertEqual( tail.message_body, MessageBody([ ContentLine('{'), ContentLine(' "foo": "bar",'), ContentLine(' "param2": "value2"'), ContentLine('}') ]))
def test_message_body(self): body = dedent(''' { "key": "val" } < body.json < /home/file testing''') tail = TailParser().parse(body) self.assertEqual( tail.message_body, MessageBody([ ContentLine('{'), ContentLine(' "key": "val"'), ContentLine('}'), InputFileRef('body.json'), InputFileRef('/home/file'), ContentLine('testing') ]))
def test_newlines(self): reqs = self.parser.parse(dedent(''' ### POST http://example.com/api/a/b/c ### ### ### POST http://example.com/api/a/b/c ### ### ''')) self.assertEqual(len(reqs), 2)