diff --git a/server/internal/service/include/Exceptions.h b/server/internal/service/include/Exceptions.h index a032c21f5db1fa1cd4376dca67e295819a91d665..0d108ab7d4c6106d7ef2713e5fe147f33e6f2a37 100644 --- a/server/internal/service/include/Exceptions.h +++ b/server/internal/service/include/Exceptions.h @@ -6,4 +6,13 @@ class ValidateException : public std::exception { public: ValidateException(const std::string& msg) : _msg(msg) {} virtual const char* what() const noexcept override { return _msg.c_str(); } +}; + + +class LoginException : public std::exception { + std::string _msg; + + public: + LoginException(const std::string& msg) : _msg(msg) {} + virtual const char* what() const noexcept override { return _msg.c_str(); } }; \ No newline at end of file diff --git a/server/internal/service/include/UserService.h b/server/internal/service/include/UserService.h index 98ee105a222b3249328866bcb11e914f6e062884..1a889b8158e20de056ca66cdd9e4e4f1ff04c29b 100644 --- a/server/internal/service/include/UserService.h +++ b/server/internal/service/include/UserService.h @@ -15,7 +15,6 @@ class UserService : IUserService { UserService(); User createUser(const std::string& login, const std::string& username, const std::string& password) override; - // TODO login - User getUserById(size_t id) override; + User login(const std::string& login, const std::string& password) override; void deleteUser(size_t id) override; }; diff --git a/server/internal/service/src/UserService.cpp b/server/internal/service/src/UserService.cpp index b695cefa5a7e4290f3eed4e6d3c464b8026f6d45..b6b1666d1d2d7cc2297756bb31041ba6863b67e9 100644 --- a/server/internal/service/src/UserService.cpp +++ b/server/internal/service/src/UserService.cpp @@ -26,14 +26,19 @@ User UserService::createUser(const std::string& login, const std::string& userna } } -User UserService::getUserById(size_t id) { +User UserService::login(const std::string& login, const std::string& password) { try { - return userRepo->getUserById(id); + User u = userRepo->getUserByLogin(login); + if (u.getPassword() != password){ + throw LoginException("incorrect password"); + } + return u; } catch (std::exception& e) { throw e; } } + void UserService::deleteUser(size_t id) { try { userRepo->deleteByUserId(id); diff --git a/server/internal/service/tests/UserServiceTest.cpp b/server/internal/service/tests/UserServiceTest.cpp index 9038fd3a1b7d304d7dbd3e16dcbdb828e5366c5b..e576a99b1adc84af2749a8c6995c5e369aa229e2 100644 --- a/server/internal/service/tests/UserServiceTest.cpp +++ b/server/internal/service/tests/UserServiceTest.cpp @@ -50,20 +50,27 @@ TEST_F(UserServiceTest, deleteUserWithInvalidId) { EXPECT_THROW(us->deleteUser(1), std::exception); } -TEST_F(UserServiceTest, getUserOk) { - EXPECT_CALL(*mock_ptr, getUserById(1)) +TEST_F(UserServiceTest, loginOk) { + EXPECT_CALL(*mock_ptr, getUserByLogin("login")) .Times(1) .WillOnce(::testing::Return(User(1, "login", "password", "username"))); - User u = us->getUserById(1); + User u = us->login("login","password"); EXPECT_EQ(u.getLogin(), "login"); EXPECT_EQ(u.getId(), 1); EXPECT_EQ(u.getPassword(), "password"); EXPECT_EQ(u.getUsername(), "username"); } -TEST_F(UserServiceTest, getUserInvalidId) { - EXPECT_CALL(*mock_ptr, getUserById(-1)).Times(1).WillOnce(NoUserException()); - EXPECT_THROW(us->getUserById(-1), std::exception); +TEST_F(UserServiceTest, loginInvalidLogin) { + EXPECT_CALL(*mock_ptr, getUserByLogin("loginnn")).Times(1).WillOnce(NoUserException()); + EXPECT_THROW(us->login("loginnn","password"), std::exception); +} + +TEST_F(UserServiceTest, loginInvalidPass) { + EXPECT_CALL(*mock_ptr, getUserByLogin("login")) + .Times(1) + .WillOnce(::testing::Return(User(1, "login", "password", "username"))); + EXPECT_THROW(us->login("login","password1"), std::exception); } TEST_F(UserServiceTest, makeUserOk) { diff --git a/server/internal/service/virtual/IUserService.h b/server/internal/service/virtual/IUserService.h index c8e9c683288d9957081a1893cf682e43db6671d6..b3a0ab5d6a34923b0527f16aacbbf822b23c4b7a 100644 --- a/server/internal/service/virtual/IUserService.h +++ b/server/internal/service/virtual/IUserService.h @@ -9,6 +9,6 @@ class IUserService { virtual ~IUserService() = default; virtual User createUser(const std::string& login, const std::string& username, const std::string& password) = 0; - virtual User getUserById(size_t id) = 0; + virtual User login(const std::string& login, const std::string& password) = 0; virtual void deleteUser(size_t id) = 0; };