Skip to content
This repository has been archived by the owner on Jun 29, 2024. It is now read-only.

Commit

Permalink
change find user friends to find user friendships query handler
Browse files Browse the repository at this point in the history
  • Loading branch information
cieslarmichal committed Dec 19, 2023
1 parent 9c8b6d2 commit 11e3125
Show file tree
Hide file tree
Showing 18 changed files with 158 additions and 160 deletions.
4 changes: 2 additions & 2 deletions apps/server/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ set(SOURCES
application/commandHandlers/friend/rejectFriendInvitationCommandHandler/RejectFriendInvitationCommandHandlerImpl.cpp
application/commandHandlers/friend/deleteFriendshipCommandHandler/DeleteFriendshipCommandHandlerImpl.cpp
application/queryHandlers/friend/findReceivedFriendInvitationsQueryHandler/FindReceivedFriendInvitationsQueryHandlerImpl.cpp
application/queryHandlers/friend/findUserFriendsQueryHandler/FindUserFriendsQueryHandlerImpl.cpp
application/queryHandlers/friend/findUserFriendshipsQueryHandler/FindUserFriendshipsQueryHandlerImpl.cpp

domain/entities/group/Group.cpp
domain/entities/userGroup/UserGroup.cpp
Expand Down Expand Up @@ -236,7 +236,7 @@ set(IT_SOURCES
application/commandHandlers/friend/rejectFriendInvitationCommandHandler/RejectFriendInvitationCommandHandlerImplIntegrationTest.cpp
application/commandHandlers/friend/deleteFriendshipCommandHandler/DeleteFriendshipCommandHandlerImplIntegrationTest.cpp
application/queryHandlers/friend/findReceivedFriendInvitationsQueryHandler/FindReceivedFriendInvitationsQueryHandlerImplIntegrationTest.cpp
application/queryHandlers/friend/findUserFriendsQueryHandler/FindUserFriendsQueryHandlerImplIntegrationTest.cpp
application/queryHandlers/friend/findUserFriendshipsQueryHandler/FindUserFriendshipsQueryHandlerImplIntegrationTest.cpp

infrastructure/repositories/groupRepository/GroupRepositoryImplIntegrationTest.cpp
application/commandHandlers/group/createGroupCommandHandler/CreateGroupCommandHandlerImplIntegrationTest.cpp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ namespace server::api
{
GetUserFriendsMessageHandler::GetUserFriendsMessageHandler(
std::shared_ptr<application::TokenService> tokenServiceInit,
std::unique_ptr<application::FindUserFriendsQueryHandler> findUserFriendsQueryHandlerInit)
: tokenService{std::move(tokenServiceInit)}, findUserFriendsQueryHandler{std::move(findUserFriendsQueryHandlerInit)}
std::unique_ptr<application::FindUserFriendshipsQueryHandler> findUserFriendshipsQueryHandlerInit)
: tokenService{std::move(tokenServiceInit)},
findUserFriendshipsQueryHandler{std::move(findUserFriendshipsQueryHandlerInit)}
{
}

Expand All @@ -24,12 +25,15 @@ common::messages::Message GetUserFriendsMessageHandler::handleMessage(const comm

auto [userId] = tokenService->verifyToken(token);

const auto& [friends] = findUserFriendsQueryHandler->execute({userId});
const auto& [friendships] = findUserFriendshipsQueryHandler->execute({userId});

nlohmann::json friendsJsonArray = nlohmann::json::array();

for (const auto& userFriend : friends)
for (const auto& friendship : friendships)
{
const auto userFriend =
friendship.getUser()->getId() == userId ? *friendship.getUserFriend() : *friendship.getUser();

nlohmann::json friendJson{
{"id", userFriend.getId()}, {"name", userFriend.getNickname()}, {"isActive", userFriend.isActive()}};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include <memory>

#include "../../MessageHandler.h"
#include "server/application/queryHandlers/friend/findUserFriendsQueryHandler/FindUserFriendsQueryHandler.h"
#include "server/application/queryHandlers/friend/findUserFriendshipsQueryHandler/FindUserFriendshipsQueryHandler.h"
#include "server/application/services/tokenService/TokenService.h"

namespace server::api
Expand All @@ -12,12 +12,12 @@ class GetUserFriendsMessageHandler : public MessageHandler
{
public:
GetUserFriendsMessageHandler(std::shared_ptr<application::TokenService> tokenService,
std::unique_ptr<application::FindUserFriendsQueryHandler> findUserFriendsQueryHandler);
std::unique_ptr<application::FindUserFriendshipsQueryHandler> findUserFriendshipsQueryHandler);

common::messages::Message handleMessage(const common::messages::Message& message) const override;

private:
std::shared_ptr<application::TokenService> tokenService;
std::unique_ptr<application::FindUserFriendsQueryHandler> findUserFriendsQueryHandler;
std::unique_ptr<application::FindUserFriendshipsQueryHandler> findUserFriendshipsQueryHandler;
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
#include <gtest/gtest.h>
#include <regex>

#include "server/application/queryHandlers/friend/findUserFriendsQueryHandler/FindUserFriendsQueryHandlerMock.h"
#include "server/application/queryHandlers/friend/findUserFriendshipsQueryHandler/FindUserFriendshipsQueryHandlerMock.h"
#include "server/application/services/tokenService/TokenServiceMock.h"

#include "faker-cxx/Date.h"
#include "faker-cxx/Image.h"
#include "faker-cxx/String.h"
#include "nlohmann/json.hpp"
#include "server/tests/factories/friendshipTestFactory/FriendshipTestFactory.h"

using namespace ::testing;
using namespace server::api;
Expand All @@ -31,13 +32,6 @@ auto friendId1 = "id1";
auto friendName1 = "friendName1";
auto friendId2 = "id2";
auto friendName2 = "friendName2";
auto fewFriendInvitationsResponsePayloadJson =
nlohmann::json{{"data", nlohmann::json::array({{{"id", friendId1}, {"name", friendName1}, {"isActive", false}},
{{"id", friendId2}, {"name", friendName2}, {"isActive", true}}})}};

auto fewFriendInvitationsMessageResponse =
common::messages::Message{common::messages::MessageId::GetUserFriendsResponse,
common::bytes::Bytes{fewFriendInvitationsResponsePayloadJson.dump()}};

std::runtime_error invalidToken("invalidToken");
auto invalidTokenMessageResponse = common::messages::Message{common::messages::MessageId::GetUserFriendsResponse,
Expand All @@ -51,16 +45,18 @@ auto getUserChannelsErrorMessageResponse = common::messages::Message{
class GetUserFriendsMessageHandlerTest : public Test
{
public:
server::tests::FriendshipTestFactory friendshipTestFactory;

std::shared_ptr<server::application::TokenServiceMock> tokenServiceMock =
std::make_shared<StrictMock<server::application::TokenServiceMock>>();

std::unique_ptr<server::application::FindUserFriendsQueryHandlerMock> findUserFriendsQueryHandlerMockInit =
std::make_unique<StrictMock<server::application::FindUserFriendsQueryHandlerMock>>();
server::application::FindUserFriendsQueryHandlerMock* findUserFriendsQueryHandlerMock =
findUserFriendsQueryHandlerMockInit.get();
std::unique_ptr<server::application::FindUserFriendshipsQueryHandlerMock> findUserFriendshipsQueryHandlerMockInit =
std::make_unique<StrictMock<server::application::FindUserFriendshipsQueryHandlerMock>>();
server::application::FindUserFriendshipsQueryHandlerMock* findUserFriendshipsQueryHandlerMock =
findUserFriendshipsQueryHandlerMockInit.get();

GetUserFriendsMessageHandler getUserFriendsMessageHandler{tokenServiceMock,
std::move(findUserFriendsQueryHandlerMockInit)};
std::move(findUserFriendshipsQueryHandlerMockInit)};
};

TEST_F(GetUserFriendsMessageHandlerTest, handleValidGetUserFriendsMessageWithNoFriends)
Expand All @@ -70,9 +66,9 @@ TEST_F(GetUserFriendsMessageHandlerTest, handleValidGetUserFriendsMessageWithNoF
const auto verifyTokenResult = server::application::VerifyTokenResult{userId};

EXPECT_CALL(*tokenServiceMock, verifyToken(token)).WillOnce(Return(verifyTokenResult));
EXPECT_CALL(*findUserFriendsQueryHandlerMock,
execute(server::application::FindUserFriendsQueryHandlerPayload{userId}))
.WillOnce(Return(server::application::FindUserFriendsQueryHandlerResult{}));
EXPECT_CALL(*findUserFriendshipsQueryHandlerMock,
execute(server::application::FindUserFriendshipsQueryHandlerPayload{userId}))
.WillOnce(Return(server::application::FindUserFriendshipsQueryHandlerResult{}));

auto responseMessage = getUserFriendsMessageHandler.handleMessage(message);

Expand All @@ -81,7 +77,6 @@ TEST_F(GetUserFriendsMessageHandlerTest, handleValidGetUserFriendsMessageWithNoF

TEST_F(GetUserFriendsMessageHandlerTest, handleValidGetUserFriendsMessageWithFewFriends)
{
const auto userId = faker::String::uuid();
const auto email = "email";
const auto password = "password";
const auto emailVerified = true;
Expand All @@ -97,16 +92,28 @@ TEST_F(GetUserFriendsMessageHandlerTest, handleValidGetUserFriendsMessageWithFew
std::make_shared<server::domain::User>(friendId2, email, password, friendName2, true, emailVerified,
verificationCode, createdAt, updatedAt, avatarUrl);

const auto verifyTokenResult = server::application::VerifyTokenResult{userId};
const auto groupId = faker::String::uuid();

const auto group = std::make_shared<server::domain::Group>(groupId, createdAt);

const auto verifyTokenResult = server::application::VerifyTokenResult{friendId1};

const auto friendship = friendshipTestFactory.createDomainFriendship(user1, user2, group);

EXPECT_CALL(*tokenServiceMock, verifyToken(token)).WillOnce(Return(verifyTokenResult));
EXPECT_CALL(*findUserFriendsQueryHandlerMock,
execute(server::application::FindUserFriendsQueryHandlerPayload{userId}))
.WillOnce(Return(server::application::FindUserFriendsQueryHandlerResult{{*user1, *user2}}));
EXPECT_CALL(*findUserFriendshipsQueryHandlerMock,
execute(server::application::FindUserFriendshipsQueryHandlerPayload{friendId1}))
.WillOnce(Return(server::application::FindUserFriendshipsQueryHandlerResult{{*friendship}}));

auto responseMessage = getUserFriendsMessageHandler.handleMessage(message);

EXPECT_EQ(responseMessage, fewFriendInvitationsMessageResponse);
auto expectedResponsePayloadJson = nlohmann::json{
{"data", nlohmann::json::array({{{"id", friendId2}, {"name", friendName2}, {"isActive", true}}})}};

auto expectedMessageResponse = common::messages::Message{common::messages::MessageId::GetUserFriendsResponse,
common::bytes::Bytes{expectedResponsePayloadJson.dump()}};

EXPECT_EQ(responseMessage, expectedMessageResponse);
}

TEST_F(GetUserFriendsMessageHandlerTest, handleGetUserFriendsMessageWithInvalidToken)
Expand All @@ -125,8 +132,8 @@ TEST_F(GetUserFriendsMessageHandlerTest, handleGetUserFriendsMessageWithErrorWhi
const auto verifyTokenResult = server::application::VerifyTokenResult{userId};

EXPECT_CALL(*tokenServiceMock, verifyToken(token)).WillOnce(Return(verifyTokenResult));
EXPECT_CALL(*findUserFriendsQueryHandlerMock,
execute(server::application::FindUserFriendsQueryHandlerPayload{userId}))
EXPECT_CALL(*findUserFriendshipsQueryHandlerMock,
execute(server::application::FindUserFriendshipsQueryHandlerPayload{userId}))
.WillOnce(Throw(getUserChannelsError));

auto responseMessage = getUserFriendsMessageHandler.handleMessage(message);
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#pragma once

#include "payloads/FindUserFriendshipsQueryHandlerPayload.h"
#include "payloads/FindUserFriendshipsQueryHandlerResult.h"

namespace server::application
{
class FindUserFriendshipsQueryHandler
{
public:
virtual ~FindUserFriendshipsQueryHandler() = default;

virtual FindUserFriendshipsQueryHandlerResult execute(const FindUserFriendshipsQueryHandlerPayload&) const = 0;
};

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#include "FindUserFriendshipsQueryHandlerImpl.h"

namespace server::application
{
FindUserFriendshipsQueryHandlerImpl::FindUserFriendshipsQueryHandlerImpl(
std::shared_ptr<domain::FriendshipRepository> friendshipRepositoryInit)
: friendshipRepository{std::move(friendshipRepositoryInit)}
{
}

FindUserFriendshipsQueryHandlerResult
FindUserFriendshipsQueryHandlerImpl::execute(const FindUserFriendshipsQueryHandlerPayload& payload) const
{
const auto friendships = friendshipRepository->findFriendshipsByUserId({payload.userId});

return {friendships};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#pragma once

#include <memory>

#include "FindUserFriendshipsQueryHandler.h"
#include "server/domain/repositories/friendshipRepository/FriendshipRepository.h"

namespace server::application
{
class FindUserFriendshipsQueryHandlerImpl : public FindUserFriendshipsQueryHandler
{
public:
explicit FindUserFriendshipsQueryHandlerImpl(std::shared_ptr<domain::FriendshipRepository>);

FindUserFriendshipsQueryHandlerResult execute(const FindUserFriendshipsQueryHandlerPayload&) const override;

private:
std::shared_ptr<domain::FriendshipRepository> friendshipRepository;
};
}
Loading

0 comments on commit 11e3125

Please sign in to comment.