#include #include "mocks/SessionMock.hpp" #include "mocks/widgets/AuthPageMock.hpp" #include "mocks/widgets/MainPageMock.hpp" #include "utils/UniquePtrMockWrapper.hpp" #include #include #include #include #include class AuthPageFactory { public: MOCK_METHOD0(impl, std::unique_ptr< eedb::AuthPage >()); auto operator()() { return impl(); } }; class HomePageFactory { public: MOCK_METHOD0(impl, std::unique_ptr< eedb::HomePage >()); auto operator()() { return impl(); } }; using namespace testing; class EedbApplicationTest : public Test { public: EedbApplicationTest() { createApp(); } void createApp() { expectCreateAuthPage(); auto session = std::make_unique< eedb::SessionMock >(); EXPECT_CALL(*session, enviroment()).WillOnce(ReturnRef(env)); sut = new eedb::EEDB(std::move(session), [this]() { return authPageFactory(); }, [this]() { return homePageFactory(); }); } void expectCreateAuthPage() { EXPECT_CALL(authPageFactory, impl()).WillOnce(Return(ByMove(authPage.getPtr()))); EXPECT_CALL(*authPage, registerNeedVerification(_)).WillOnce(Invoke(authPage.get(), &eedb::AuthPageMock::regNeedEmailWerification)); EXPECT_CALL(*authPage, registerOnUserWeakLogin(_)).WillOnce(Invoke(authPage.get(), &eedb::AuthPageMock::regWeakLogin)); EXPECT_CALL(*authPage, registerOnUserStrongLogin(_)).WillOnce(Invoke(authPage.get(), &eedb::AuthPageMock::regStrongLogin)); EXPECT_CALL(*authPage, registerOnUserLogout(_)).WillOnce(Invoke(authPage.get(), &eedb::AuthPageMock::regUserLogout)); EXPECT_CALL(*authPage, setParent(Ne(nullptr))); EXPECT_CALL(*authPage, processEnvironment()); } void expectCreateHomePage() { EXPECT_CALL(homePageFactory, impl()).WillOnce(Return(ByMove(homePage.getPtr()))); EXPECT_CALL(*homePage, show(_)); } protected: Wt::Test::WTestEnvironment env; UniquePtrMockWrapper< eedb::AuthPageMock > authPage; AuthPageFactory authPageFactory; UniquePtrMockWrapper< eedb::HomePageMock > homePage; HomePageFactory homePageFactory; eedb::EEDB * sut; }; TEST_F(EedbApplicationTest, createApp) {} TEST_F(EedbApplicationTest, strongLoginCreatesMainPage) { expectCreateHomePage(); authPage->notifyUserStrongLogin(); } TEST_F(EedbApplicationTest, weakLoginCreatesMainPage) { expectCreateHomePage(); authPage->notifyUserWeakLogin(); }