#include "../test.h"
#define TEST(name) TEST_CASE("server-accept_response: " name, "[server-accept_response]")
TEST("successful response") {
ServerParser p;
auto data = accept_packet_s();
p.accept(data);
CHECK(p.accepted());
auto ans = p.accept_response();
CHECK_THAT(ans, ContainsSubstring("HTTP/1.1 101 Switching Protocols\r\n"));
CHECK_THAT(ans, ContainsSubstring("Upgrade: websocket\r\n"));
CHECK_THAT(ans, ContainsSubstring("Connection: Upgrade\r\n"));
CHECK_THAT(ans, ContainsSubstring("Sec-WebSocket-Protocol: chat\r\n"));
CHECK_THAT(ans, ContainsSubstring("Sec-WebSocket-Extensions: permessage-deflate;"));
CHECK_THAT(ans, ContainsSubstring("Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"));
CHECK(p.established());
}
TEST("successful response with args") {
ServerParser p;
auto data = accept_packet_s();
p.accept(data);
CHECK(p.accepted());
ConnectResponseSP cres = new ConnectResponse();
cres->ws_protocol("jopa");
cres->ws_extensions({{"ext1", {}}, {"ext2", {{"arg1", "1"}}}, {"ext3", {}}});
cres->headers = Headers{{"h1", "1"}};
auto ans = p.accept_response(cres);
CHECK_THAT(ans, ContainsSubstring("HTTP/1.1 101 Switching Protocols\r\n"));
CHECK_THAT(ans, ContainsSubstring("Sec-WebSocket-Protocol: jopa\r\n"));
CHECK_THAT(ans, ContainsSubstring("h1: 1\r\n"));
CHECK_THAT(ans, !ContainsSubstring("Sec-WebSocket-Extensions")); // unsupported extensions removed
}