1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/net/http/http_httpbin_test.v

96 lines
2.2 KiB
V
Raw Normal View History

2021-06-14 10:08:41 +03:00
module http
2020-01-16 20:16:11 +03:00
2021-06-14 10:08:41 +03:00
// internal tests have access to *everything in the module*
2020-01-16 20:16:11 +03:00
import json
struct HttpbinResponseBody {
args map[string]string
data string
files map[string]string
form map[string]string
headers map[string]string
json map[string]string
2020-01-16 20:16:11 +03:00
origin string
url string
}
fn http_fetch_mock(_methods []string, _config FetchConfig) ![]Response {
2020-01-16 20:16:11 +03:00
url := 'https://httpbin.org/'
methods := if _methods.len == 0 { ['GET', 'POST', 'PATCH', 'PUT', 'DELETE'] } else { _methods }
mut config := _config
2020-04-26 17:25:54 +03:00
mut result := []Response{}
2020-01-16 20:16:11 +03:00
// Note: httpbin doesn't support head
for method in methods {
lmethod := method.to_lower()
config.method = method_from_str(method)
res := fetch(FetchConfig{ ...config, url: url + lmethod })!
2020-01-16 20:16:11 +03:00
// TODO
// body := json.decode(HttpbinResponseBody,res.body)?
2020-01-16 20:16:11 +03:00
result << res
}
return result
}
fn test_http_fetch_bare() {
2021-06-14 10:08:41 +03:00
$if !network ? {
return
2020-01-16 20:16:11 +03:00
}
2021-06-14 10:08:41 +03:00
responses := http_fetch_mock([], FetchConfig{}) or { panic(err) }
2020-01-16 20:16:11 +03:00
for response in responses {
assert response.status() == .ok
2020-01-16 20:16:11 +03:00
}
}
fn test_http_fetch_with_data() {
2021-06-14 10:08:41 +03:00
$if !network ? {
return
2020-01-16 20:16:11 +03:00
}
2021-06-14 10:08:41 +03:00
responses := http_fetch_mock(['POST', 'PUT', 'PATCH', 'DELETE'],
data: 'hello world'
) or { panic(err) }
2020-01-16 20:16:11 +03:00
for response in responses {
payload := json.decode(HttpbinResponseBody, response.body) or { panic(err) }
2020-01-16 20:16:11 +03:00
assert payload.data == 'hello world'
}
}
fn test_http_fetch_with_params() {
2021-06-14 10:08:41 +03:00
$if !network ? {
return
}
responses := http_fetch_mock([],
params: {
2021-06-14 10:08:41 +03:00
'a': 'b'
2020-01-16 20:16:11 +03:00
'c': 'd'
}
2021-06-14 10:08:41 +03:00
) or { panic(err) }
2020-01-16 20:16:11 +03:00
for response in responses {
// payload := json.decode(HttpbinResponseBody,response.body) or {
// panic(err)
2020-01-16 20:16:11 +03:00
// }
assert response.status() == .ok
2020-01-16 20:16:11 +03:00
// TODO
// assert payload.args['a'] == 'b'
// assert payload.args['c'] == 'd'
}
}
fn test_http_fetch_with_headers() ! {
2021-06-14 10:08:41 +03:00
$if !network ? {
return
}
mut header := new_header()
header.add_custom('Test-Header', 'hello world')!
2021-06-14 10:08:41 +03:00
responses := http_fetch_mock([],
header: header
2021-06-14 10:08:41 +03:00
) or { panic(err) }
2020-01-16 20:16:11 +03:00
for response in responses {
// payload := json.decode(HttpbinResponseBody,response.body) or {
// panic(err)
2020-01-16 20:16:11 +03:00
// }
assert response.status() == .ok
2020-01-16 20:16:11 +03:00
// TODO
// assert payload.headers['Test-Header'] == 'hello world'
}
}