#include "web_server/src/Page_Session.hpp" #include namespace aethera::web { TEST(Page_Session, New_Page_Displaces_Previous_Page_Without_Waiting_For_Close) { Page_Session session; const auto first_token = session.begin_page(); std::size_t displaced{}; const auto first_connection = session.attach( first_token, [&displaced] { ++displaced; }); ASSERT_TRUE(first_connection.has_value()); const auto second_token = session.begin_page(); EXPECT_NE(first_token, second_token); EXPECT_EQ(displaced, 1U); EXPECT_EQ(session.attach(first_token, [] {}).error(), Page_Session::Attach_Result::stale_session); const auto second_connection = session.attach(second_token, [] {}); EXPECT_TRUE(second_connection.has_value()); session.detach(*first_connection); session.detach(*second_connection); } TEST(Page_Session, One_Page_Can_Attach_All_Of_Its_Connections) { Page_Session session; const auto token = session.begin_page(); const auto gallery = session.attach(token, [] {}); const auto plot = session.attach(token, [] {}); ASSERT_TRUE(gallery.has_value()); ASSERT_TRUE(plot.has_value()); EXPECT_NE(*gallery, *plot); session.detach(*gallery); session.detach(*plot); } }