aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/net/http/response_test.v
blob: bf2fba3f6aee31da3ff8c2c373854d2d9289be58 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module http

fn test_response_bytestr() ? {
	{
		resp := new_response(
			status: .ok
			text: 'Foo'
		)
		assert resp.bytestr() == 'HTTP/1.1 200 OK\r\n' + 'Content-Length: 3\r\n' + '\r\n' + 'Foo'
	}
	{
		resp := new_response(
			status: .found
			text: 'Foo'
			header: new_header(key: .location, value: '/')
		)
		lines := resp.bytestr().split_into_lines()
		assert lines[0] == 'HTTP/1.1 302 Found'
		// header order is not guaranteed
		check_headers(['Location: /', 'Content-Length: 3'], lines[1..3]) ?
		assert lines[3] == ''
		assert lines[4] == 'Foo'
	}
}

// check_headers is a helper function for asserting all expected headers
// are found because rendered header order is not guaranteed. The check
// is O(n^2) which is fine for small lists.
fn check_headers(expected []string, found []string) ? {
	assert expected.len == found.len
	for header in expected {
		if !found.contains(header) {
			return error('expected header "$header" not in $found')
		}
	}
}