#include #include #include SCENARIO("the test suite is working") { REQUIRE(true); REQUIRE_FALSE(false); } struct TestConnection { std::string reason_ = ""; int status_ = 0; }; struct TestMessage : public std::stringstream { std::string string() { return str(); } }; struct TestWsServer { void send_close(std::shared_ptr con, int status, const std::string &reason) { send_close_calls_++; con->reason_ = reason; con->status_ = status; } int send_close_calls_ = 0; }; SCENARIO("we have a websocket resource") { TestSession session; TestWsServer server; auto connection = std::make_shared(); GIVEN("the session is valid") { session.valid = true; WHEN("we open the connection") { tr::ws::on_open(server, session, connection); THEN("the session should not post torrent torrent updates") { REQUIRE(server.send_close_calls_ == 0); } } } GIVEN("the session is invalid") { WHEN("we open the connection") { tr::ws::on_open(server, session, connection); THEN("the server should close the connection") { REQUIRE(server.send_close_calls_ == 1); REQUIRE(connection->status_ == 1011); REQUIRE(connection->reason_ == "Session not valid"); } } } auto message = std::make_shared(); GIVEN("we recive an json request") { WHEN("the json isn't valid") { *message << "Not valid"; THEN("the server should reject the action") { tr::ws::on_message(session, connection, message); REQUIRE(server.send_close_calls_ == 0); REQUIRE(session.post_torrent_updates_calls_ == 0); } } WHEN("the json is valid but doesn't have any of the required fields") { *message << "{}"; THEN("the server should reject the action") { tr::ws::on_message(session, connection, message); REQUIRE(server.send_close_calls_ == 0); REQUIRE(session.post_torrent_updates_calls_ == 0); } } WHEN("the json is valid and have the required fields but not of valid type") { *message << nlohmann::json({{"type", "N/A"}}); THEN("the server should reject the action") { tr::ws::on_message(session, connection, message); REQUIRE(server.send_close_calls_ == 0); REQUIRE(session.post_torrent_updates_calls_ == 0); } } WHEN("the json is valid and have the required fields") { *message << nlohmann::json({{"type", "POST_TORRENT_UPDATES"}}); THEN("the server should post torrent updates") { tr::ws::on_message(session, connection, message); REQUIRE(server.send_close_calls_ == 0); REQUIRE(session.post_torrent_updates_calls_ == 1); } } } }