From 71a93975c2b59a11678fc4258234abacf1973345 Mon Sep 17 00:00:00 2001 From: Denis Date: Sun, 14 May 2023 22:03:29 +0300 Subject: [PATCH] add login function --- server/internal/service/include/Exceptions.h | 9 +++++++++ server/internal/service/include/UserService.h | 3 +-- server/internal/service/src/UserService.cpp | 9 +++++++-- .../service/tests/UserServiceTest.cpp | 19 +++++++++++++------ .../internal/service/virtual/IUserService.h | 2 +- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/server/internal/service/include/Exceptions.h b/server/internal/service/include/Exceptions.h index a032c21..0d108ab 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 98ee105..1a889b8 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 b695cef..b6b1666 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 9038fd3..e576a99 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 c8e9c68..b3a0ab5 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; }; -- GitLab