def test_get_post_extra_details_dtos_for_presenter_with_comment_with_no_reactions(
            self, post_dto, user_dtos, post_reactions_dtos_with_duplicates):

        # Arrrange
        empty_comment_dtos = []
        expected_comment_reactions_details_dto_list = []
        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetPostInteractor(post_storage=post_storage,
                                       presenter=presenter)

        post_complete_dto = PostCompleteDetailsDto(
            user_dtos=user_dtos,
            post_dto=post_dto,
            comment_dtos=empty_comment_dtos,
            reaction_dtos= \
                post_reactions_dtos_with_duplicates)

        # Act
        (post_comment_count_dtos_list,
        post_reactions_details_dto_list,
        comment_replies_count_dto_list,
        actual_comment_reactions_details_dto_list) = interactor. \
            get_post_extra_details_dtos_for_presenter(post_complete_dto)

        # Assert
        assert actual_comment_reactions_details_dto_list == \
            expected_comment_reactions_details_dto_list
    def test_get_post_extra_details_dtos_for_presenter_with_post_no_comments(
            self, post_dto):

        # Arrrange
        expected_post_comment_count_dtos_list = [
            PostWithCommentsCountDto(post_id=1, comments_count=0)
        ]
        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetPostInteractor(post_storage=post_storage,
                                       presenter=presenter)

        post_complete_dto = PostCompleteDetailsDto(user_dtos=[],
                                                   post_dto=post_dto,
                                                   comment_dtos=[],
                                                   reaction_dtos=[])

        # Act
        (actual_post_comment_count_dtos_list,
        post_reactions_details_dto_list,
        actual_comment_replies_count_dto_list,
        comment_reactions_details_dto_list) = interactor. \
            get_post_extra_details_dtos_for_presenter(post_complete_dto)

        # Assert
        assert actual_post_comment_count_dtos_list == \
            expected_post_comment_count_dtos_list
    def test_get_post_extra_details_dtos_for_presenter_with_comment_with_reactions(
            self, post_dto, user_dtos, comment_dtos,
            comment_reactions_dtos_with_duplicates):

        # Arrrange
        expected_comment_reactions_details_dto_list = [
            CommentWithReactionDetailsDto(comment_id=1,
                                          reaction_type=["LIT", "LOVE", "WOW"],
                                          count=4),
            CommentWithReactionDetailsDto(comment_id=2,
                                          reaction_type=[],
                                          count=0),
        ]
        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetPostInteractor(post_storage=post_storage,
                                       presenter=presenter)

        post_complete_dto = PostCompleteDetailsDto(
            user_dtos=user_dtos,
            post_dto=post_dto,
            comment_dtos=comment_dtos,
            reaction_dtos= \
                comment_reactions_dtos_with_duplicates)

        # Act
        (post_comment_count_dtos_list,
        post_reactions_details_dto_list,
        comment_replies_count_dto_list,
        actual_comment_reactions_details_dto_list) = interactor. \
            get_post_extra_details_dtos_for_presenter(post_complete_dto)

        # Assert
        assert actual_comment_reactions_details_dto_list == \
            expected_comment_reactions_details_dto_list
    def test_get_user_posts_extra_dto_details_for_presenter_with_post_no_reactions(
            self, post_dto, user_dtos, comment_dtos):

        # Arrrange
        expected_post_comment_count_dtos_list = [
            PostWithReactionDetailsDto(post_id=1, reaction_type=[], count=0)
        ]
        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetUserPostsInteractor(post_storage=post_storage,
                                            presenter=presenter)

        post_complete_dto = [
            PostCompleteDetailsDto(user_dtos=user_dtos,
                                   post_dto=post_dto,
                                   comment_dtos=comment_dtos,
                                   reaction_dtos=[])
        ]

        # Act
        (post_comment_count_dtos_list,
        actual_post_reactions_details_dto_list,
        comment_replies_count_dto_list,
        comment_reactions_details_dto_list) = interactor. \
            get_user_posts_extra_dto_details_for_presenter(post_complete_dto)

        # Assert
        assert actual_post_reactions_details_dto_list == \
            expected_post_comment_count_dtos_list
    def test_get_user_posts_extra_dto_details_for_presenter(
            self, user_dtos, post_dto, comment_dtos, reaction_dtos):

        # Arrange
        post_id = 1

        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetUserPostsInteractor(post_storage=post_storage,
                                            presenter=presenter)

        exp_post_comment_count_dtos_list = [
            PostWithCommentsCountDto(post_id=1, comments_count=1)
        ]

        exp_post_reactions_details_dto_list = [
            PostWithReactionDetailsDto(post_id=1,
                                       reaction_type=["WOW"],
                                       count=1)
        ]

        exp_comment_replies_count_dto_list = [
            CommentWithRepliesCountDto(comment_id=1, replies_count=1)
        ]

        exp_comment_reactions_details_dto_list = [
            CommentWithReactionDetailsDto(comment_id=1,
                                          reaction_type=[],
                                          count=0),
            CommentWithReactionDetailsDto(comment_id=2,
                                          reaction_type=["LOVE"],
                                          count=1)
        ]

        get_user_posts_dto = [
            PostCompleteDetailsDto(user_dtos=user_dtos,
                                   post_dto=post_dto,
                                   comment_dtos=comment_dtos,
                                   reaction_dtos=reaction_dtos)
        ]

        # Act
        (post_comment_count_dtos_list, post_reactions_details_dto_list,
        comment_replies_count_dto_list, comment_reactions_details_dto_list) = \
            interactor.get_user_posts_extra_dto_details_for_presenter(
                post_dtos_list=get_user_posts_dto)

        # Assert
        assert post_comment_count_dtos_list == \
             exp_post_comment_count_dtos_list
        assert post_reactions_details_dto_list == \
             exp_post_reactions_details_dto_list
        assert comment_replies_count_dto_list == \
            exp_comment_replies_count_dto_list
        assert comment_reactions_details_dto_list == \
            exp_comment_reactions_details_dto_list
    def test_get_user_posts_interactor_(self, user_dtos, post_dto,
                                        comment_dtos, reaction_dtos,
                                        get_user_posts_response):

        # Arrange
        user_id = 1
        expected_post_details_list_mock = get_user_posts_response

        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetUserPostsInteractor(post_storage=post_storage,
                                            presenter=presenter)

        post_comment_count_dtos_list = [],
        post_reactions_details_dto_list = [],
        comment_replies_count_dto_list = [],
        comment_reactions_details_dto_list = []

        empty_lists = (post_comment_count_dtos_list,
                       post_reactions_details_dto_list,
                       comment_replies_count_dto_list,
                       comment_reactions_details_dto_list)

        interactor.get_user_posts_extra_dto_details_for_presenter.return_value = \
            empty_lists

        get_user_posts_dtos = [
            PostCompleteDetailsDto(post_dto=post_dto,
                                   user_dtos=user_dtos,
                                   comment_dtos=comment_dtos,
                                   reaction_dtos=reaction_dtos)
        ]

        post_storage.get_user_posts_dto.return_value = get_user_posts_dtos
        presenter.get_user_posts_response.return_value = \
            expected_post_details_list_mock

        # Act
        actual_post_details_list = interactor.get_user_posts(user_id=user_id)

        # Assert
        assert actual_post_details_list == expected_post_details_list_mock
        post_storage.get_user_posts_dto.assert_called_once_with(
            user_id=user_id)

        presenter.get_user_posts_response.assert_called_once_with(
            get_user_posts_dto=get_user_posts_dtos,
            post_comment_count_dtos_list=post_comment_count_dtos_list,
            post_reactions_details_dto_list=post_reactions_details_dto_list,
            comment_replies_count_dto_list=comment_replies_count_dto_list,
            comment_reactions_details_dto_list= \
                comment_reactions_details_dto_list
        )
    def test_get_user_posts_extra_dto_details_for_presenter_with_post_with_comments(
            self, post_dto):

        # Arrrange
        expected_post_comment_count_dtos_list = [
            PostWithCommentsCountDto(post_id=1, comments_count=2)
        ]
        comment1 = CommentDto(comment_id=1,
                             commented_by_id=1,
                             post_id=1,
                             commented_at = \
                                datetime.datetime(2020, 10, 10, 0, 0),
                             content='HII',
                             parent_comment_id=None)
        comment2 = CommentDto(comment_id=2,
                             commented_by_id=2,
                             post_id=1,
                             commented_at = \
                                datetime.datetime(2020, 10, 10, 0, 0),
                             content='HII',
                             parent_comment_id=1)
        comment3 = CommentDto(comment_id=3,
                             commented_by_id=2,
                             post_id=1,
                             commented_at = \
                                datetime.datetime(2020, 10, 10, 0, 0),
                             content='HII',
                             parent_comment_id=None)
        comments_dtos_list = [comment1, comment2, comment3]
        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetUserPostsInteractor(post_storage=post_storage,
                                            presenter=presenter)

        post_complete_dto = [
            PostCompleteDetailsDto(user_dtos=[],
                                   post_dto=post_dto,
                                   comment_dtos= \
                                       comments_dtos_list,
                                   reaction_dtos=[])
        ]

        # Act
        (actual_post_comment_count_dtos_list,
        post_reactions_details_dto_list,
        actual_comment_replies_count_dto_list,
        comment_reactions_details_dto_list) = interactor. \
            get_user_posts_extra_dto_details_for_presenter(post_complete_dto)

        # Assert
        assert actual_post_comment_count_dtos_list == \
            expected_post_comment_count_dtos_list
    def test_get_user_posts_extra_dto_details_for_presenter_comment_with_no_replies(
            self, post_dto, reaction_dtos, user_dtos):

        # Arrange
        comment1 = CommentDto(comment_id=1,
                             commented_by_id=1,
                             post_id=1,
                             commented_at = \
                                datetime.datetime(2020, 10, 10, 0, 0),
                             content='HII',
                             parent_comment_id=None)
        comment2 = CommentDto(comment_id=2,
                             commented_by_id=2,
                             post_id=2,
                             commented_at = \
                                datetime.datetime(2020, 10, 10, 0, 0) ,
                             content='HII',
                             parent_comment_id=None)
        testing_comment_dtos_list = [comment1, comment2]

        expected_comment_count_dtos = [
            CommentWithRepliesCountDto(comment_id=1, replies_count=0),
            CommentWithRepliesCountDto(comment_id=2, replies_count=0)
        ]
        post_complete_dto = [
            PostCompleteDetailsDto(user_dtos=user_dtos,
                                   post_dto=post_dto,
                                   comment_dtos= \
                                       testing_comment_dtos_list,
                                   reaction_dtos=reaction_dtos)
        ]

        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetUserPostsInteractor(post_storage=post_storage,
                                            presenter=presenter)

        # Act
        (post_comment_count_dtos_list,
        post_reactions_details_dto_list,
        actual_comment_replies_count_dto_list,
        comment_reactions_details_dto_list) = interactor. \
            get_user_posts_extra_dto_details_for_presenter(post_complete_dto)

        # Assert
        assert actual_comment_replies_count_dto_list == \
            expected_comment_count_dtos
Ejemplo n.º 9
0
def test_get_post_dto_with_valid_details_return_dto(
        create_users, create_posts, get_post_create_comments, create_reactions,
        get_post_user_dtos, get_post_comment_dtos, get_post_reaction_dtos,
        get_post_post_dto):

    # Arrange
    post_id = 1
    expected = PostCompleteDetailsDto(post_dto=get_post_post_dto,
                                      user_dtos=get_post_user_dtos,
                                      comment_dtos=get_post_comment_dtos,
                                      reaction_dtos=get_post_reaction_dtos)
    storage = StorageImplementation()

    # Act
    actual_post_complete_dto = storage.get_post_dto(post_id=post_id)

    # Assert
    assert actual_post_complete_dto == expected
Ejemplo n.º 10
0
    def _get_post_details_dto_obj(self, post):

        post_user_dto_dict = {}
        post_dto = self._convert_post_obj_to_dto(post)
        post_reaction_dtos = self._get_post_reactions(post)
       
        user_obj = post.posted_by
        user_dto = self._convert_user_obj_to_dto(user_obj)
        user_id = user_dto.user_id
        post_user_dto_dict[user_id] = user_dto

        comments = post.comment_set.all()
        comments_list = self._get_comments_only(comments)
        users_dto_dict, comment_dtos_list, comment_reaction_dtos = \
            self._get_comments_details(comments_list)

        reply_user_dtos_dict, reply_dtos, reply_reaction_dtos = \
             self._get_replies_details(comments)

        comment_reaction_dtos = \
            self._merge_comment_reactions_dtos_and_reply_reactions_dtos(
            comment_reaction_dtos, reply_reaction_dtos)
        comment_dtos = self._merge_comment_dtos_and_reply_dtos(
            comment_dtos_list, reply_dtos)

        users_dto_dict.update(post_user_dto_dict)
        users_dto_dict.update(reply_user_dtos_dict)
        user_dtos = list(users_dto_dict.values())

        reaction_dtos = self._merge_post_reaction_dtos_and_comment_reaction_dtos(
            post_reaction_dtos, comment_reaction_dtos
            )

        post_details_dto = PostCompleteDetailsDto(post_dto=post_dto,
                                                  user_dtos=user_dtos,
                                                  comment_dtos=comment_dtos,
                                                  reaction_dtos=reaction_dtos)
        return post_details_dto
    def test_get_user_posts_extra_dto_details_for_presenter_with_multiple_data(
            self, user_dtos, create_user_posts_dtos,
            post_reactions_dtos_with_duplicates,
            comment_reactions_dtos_with_duplicates, comment_dtos,
            reaction_dtos):

        # Arrange
        post_id = 1
        post_storage = create_autospec(PostStorageInterface)
        presenter = create_autospec(PresenterInterface)
        interactor = GetUserPostsInteractor(post_storage=post_storage,
                                            presenter=presenter)
        post_and_comments_reactions_dtos = \
            (post_reactions_dtos_with_duplicates
            + comment_reactions_dtos_with_duplicates)

        exp_post_comment_count_dtos_list = [
            PostWithCommentsCountDto(post_id=1, comments_count=1),
            PostWithCommentsCountDto(post_id=2, comments_count=0)
        ]

        exp_post_reactions_details_dto_list = [
            PostWithReactionDetailsDto(post_id=1,
                                       reaction_type=["LIT", "LOVE", "WOW"],
                                       count=4),
            PostWithReactionDetailsDto(post_id=2, reaction_type=[], count=0)
        ]

        exp_comment_replies_count_dto_list = [
            CommentWithRepliesCountDto(comment_id=1, replies_count=1)
        ]

        exp_comment_reactions_details_dto_list = [
            CommentWithReactionDetailsDto(comment_id=1,
                                          reaction_type=["LIT", "LOVE", "WOW"],
                                          count=4),
            CommentWithReactionDetailsDto(comment_id=2,
                                          reaction_type=[],
                                          count=0)
        ]

        get_user_posts_dto = [
            PostCompleteDetailsDto(
                user_dtos=user_dtos,
                post_dto=create_user_posts_dtos[0],
                comment_dtos=comment_dtos,
                reaction_dtos=post_and_comments_reactions_dtos),
            PostCompleteDetailsDto(user_dtos=[],
                                   post_dto=create_user_posts_dtos[1],
                                   comment_dtos=[],
                                   reaction_dtos=reaction_dtos)
        ]

        # Act
        (post_comment_count_dtos_list, post_reactions_details_dto_list,
        comment_replies_count_dto_list, comment_reactions_details_dto_list) = \
            interactor.get_user_posts_extra_dto_details_for_presenter(
                post_dtos_list=get_user_posts_dto)

        # Assert
        assert post_comment_count_dtos_list == \
             exp_post_comment_count_dtos_list
        assert post_reactions_details_dto_list == \
             exp_post_reactions_details_dto_list
        assert comment_replies_count_dto_list == \
            exp_comment_replies_count_dto_list
        assert comment_reactions_details_dto_list == \
            exp_comment_reactions_details_dto_list