def test_when_unlike_post_then_down_post_like_count(session,
                                                    normal_user_factory,
                                                    post_factory):
    # 찜취소하면 count - 1
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()
    post = post_factory(
        Article=True,
        PostLikeCount=True,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
        PostLikeCount__count=PostLikeCountEnum.UP.value,
    )
    session.add(post)
    session.commit()

    post_like_count = BoardRepository().get_post_like_count(post_id=post.id)
    assert post_like_count.count == PostLikeCountEnum.UP.value

    is_post_like_counted = BoardRepository().update_post_like_count(
        post_id=post.id, count=PostLikeCountEnum.DOWN.value)
    post_like_count = BoardRepository().get_post_like_count(post_id=post.id)
    assert post_like_count.count == PostLikeCountEnum.DEFAULT.value
    assert is_post_like_counted == True
def test_get_post_except_deleted_or_blocked(session, normal_user_factory,
                                            post_factory):
    """
    post 조회 시 삭제, 차단 정보 포함
    """
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()
    deleted_post = post_factory(
        Article=True,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
        is_deleted=True,
    )
    blocked_post = post_factory(
        Article=True,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
        is_blocked=True,
    )
    session.add_all([deleted_post, blocked_post])
    session.commit()

    post_entity = BoardRepository().get_post(post_id=deleted_post.id,
                                             is_deleted=True)
    assert post_entity.is_deleted == True

    post_entity = BoardRepository().get_post(post_id=blocked_post.id,
                                             is_blocked=True)
    assert post_entity.is_blocked == True
def test_is_post_exist(session, normal_user_factory):
    user = normal_user_factory(Region=True, UserProfile=True, Post=True)
    session.add(user)
    session.commit()

    result = BoardRepository().is_post_exist(post_id=user.post[0].id)

    assert result == True

    result = BoardRepository().is_post_exist(post_id=0)

    assert result == False
def test_update_post(session, normal_user_factory, post_factory):
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    post = post_factory(Article=True, user_id=user.id)
    session.add(post)
    session.commit()

    dto = UpdatePostDto(
        post_id=user.post[0].id,
        user_id=user.id,
        title="떡볶이 같이 먹어요",
        body="new body",
        region_group_id=1,
        type="article",
        is_comment_disabled=True,
        amount=10,
        unit=PostUnitEnum.UNIT.value,
        price_per_unit=10000,
        status=PostStatusEnum.SELLING.value,
    )

    post_entity = BoardRepository().update_post(dto=dto)

    assert post_entity.title == dto.title
    assert post_entity.body == dto.body
    assert post_entity.is_comment_disabled == dto.is_comment_disabled
def test_get_selling_post_list_pagination(
    session,
    normal_user_factory,
    create_categories,
    post_factory,
):
    """
    판매 목록 조회 페이지네이션
    """
    user = normal_user_factory.build(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    categories = create_categories(PostCategoryEnum.get_dict())

    region_group_id = user.region.region_group_id

    post_list = post_factory.build_batch(
        size=11,
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=user.id,
        status=PostStatusEnum.SELLING.value,
    )

    session.add_all(post_list)
    session.commit()

    selling_post_list = BoardRepository().get_selling_post_list(
        user_id=user.id,
        previous_post_id=len(post_list) % PostLimitEnum.LIMIT.value + 1)

    assert len(selling_post_list) == 1
    assert selling_post_list[0].id == post_list[0].id
def test_get_empty_like_post_list_success(
    session,
    normal_user_factory,
    create_categories,
    post_factory,
):
    """
    게시글 응답 빈 list 확인
    """
    user_list = normal_user_factory.build_batch(size=2,
                                                Region=True,
                                                UserProfile=True)
    session.add_all(user_list)
    session.commit()

    user1 = user_list[0]
    user2 = user_list[1]

    categories = create_categories(PostCategoryEnum.get_dict())

    region_group_id = user1.region.region_group_id

    post = post_factory(
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=user1.id,
        status=PostStatusEnum.SELLING.value,
    )
    session.add(post)
    session.commit()

    like_post_list = BoardRepository().get_like_post_list(user_id=user2.id)

    assert like_post_list == []
def test_create_post(session, normal_user_factory, create_categories):
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    categories = create_categories(PostCategoryEnum.get_dict())

    dto = CreatePostDto(
        user_id=user.id,
        title="떡볶이 나눠 먹어요",
        body="",
        region_group_id=1,
        type="article",
        is_comment_disabled=True,
        is_deleted=False,
        is_blocked=False,
        report_count=0,
        read_count=0,
        last_user_action="default",
        last_admin_action="default",
        amount=10,
        unit=PostUnitEnum.UNIT.value,
        price_per_unit=10000,
        status=PostStatusEnum.SELLING.value,
        category_ids=[categories[0].id],
    )

    post_entity = BoardRepository().create_post(dto=dto)

    assert post_entity.title == dto.title
def test_get_post_list_except_deleted_or_blocked(session, normal_user_factory,
                                                 post_factory):
    """
    post list 조회 시 삭제, 차단된 게시글 제외
    """
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()
    deleted_post = post_factory(
        Article=True,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
        is_deleted=True,
    )
    blocked_post = post_factory(
        Article=True,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
        is_blocked=True,
    )

    session.add_all([deleted_post, blocked_post])
    session.commit()

    post_list = BoardRepository().get_post_list(
        region_group_id=user.region.region_group.id)

    assert len(post_list) == 0
def test_get_post_list_pagination(session, normal_user_factory,
                                  create_categories):
    """
    post list 조회 시 페이지네이션
    """
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    categories = create_categories(PostCategoryEnum.get_dict())

    post_list = PostFactory.create_batch(
        size=11,
        Article=True,
        Categories=categories,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
    )
    session.add_all(post_list)
    session.commit()

    post_list = BoardRepository().get_post_list(
        region_group_id=user.region.region_group.id,
        previous_post_id=len(post_list) % PostLimitEnum.LIMIT.value + 1,
        category_ids=[categories[0].id],
    )

    assert len(post_list) == 1
    assert post_list[0].region_group_name == user.region.region_group.name
def test_get_empty_post(session, normal_user_factory):
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    post = BoardRepository().get_post(post_id=0)

    assert post == None
def test_get_like_post_list_success(
    session,
    normal_user_factory,
    create_categories,
    post_factory,
    post_like_state_factory,
):
    """
    내가 찜한 게시글, 찜 안한 게시글 생성 후 찜한 게시글만 응답  확인
    """
    user_list = normal_user_factory.build_batch(size=2,
                                                Region=True,
                                                UserProfile=True)
    session.add_all(user_list)
    session.commit()

    user1 = user_list[0]
    user2 = user_list[1]

    categories = create_categories(PostCategoryEnum.get_dict())

    region_group_id = user1.region.region_group_id

    liked_post = post_factory(
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=user1.id,
        status=PostStatusEnum.SELLING.value,
    )
    post = post_factory(
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=user1.id,
        status=PostStatusEnum.SELLING.value,
    )
    session.add(liked_post)
    session.commit()

    post_like_state = post_like_state_factory(post_id=liked_post.id,
                                              user_id=user2.id)

    session.add_all([post, post_like_state])
    session.commit()

    like_post_list = BoardRepository().get_like_post_list(user_id=user2.id)

    assert len(like_post_list) == 1
    assert like_post_list[0].id == liked_post.id
    assert like_post_list[0].user_id == user1.id
def test_create_post_like_count(session, normal_user_factory, post_factory):
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()
    post = post_factory(
        Article=True,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
    )
    session.add(post)
    session.commit()

    post_like_count = BoardRepository().create_post_like_count(post_id=post.id)
    assert post_like_count.count == PostLikeCountEnum.DEFAULT.value
def test_get_post_list(session, normal_user_factory, post_factory,
                       create_categories):
    """
    post list 조회 시 관련 table 목록 가져옴.
    """
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    categories = create_categories(PostCategoryEnum.get_dict())

    post1 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
    )
    post2 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
    )

    user2 = normal_user_factory(Region=True, UserProfile=True)
    session.add(user2)
    session.commit()
    post3 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=user2.region.region_group.id,
        user_id=user2.id,
    )
    post4 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=user2.region.region_group.id,
        user_id=user2.id,
    )

    session.add_all([post1, post2, post3, post4])
    session.commit()

    post_list = BoardRepository().get_post_list(
        region_group_id=user.region.region_group.id,
        category_ids=[categories[0].id])

    assert len(post_list) == 2
    for post in post_list:
        post.region_group_name = user.region.region_group.name
def test_get_like_post_list_pagination_success(
    session,
    normal_user_factory,
    create_categories,
    post_factory,
    post_like_state_factory,
):
    """
    내가 찜한 게시글 페이지네이션
    """
    user_list = normal_user_factory.build_batch(size=2,
                                                Region=True,
                                                UserProfile=True)
    session.add_all(user_list)
    session.commit()

    user1 = user_list[0]
    user2 = user_list[1]

    categories = create_categories(PostCategoryEnum.get_dict())

    region_group_id = user1.region.region_group_id

    liked_post_list = post_factory.build_batch(
        size=11,
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=user1.id,
        status=PostStatusEnum.SELLING.value,
    )
    session.add_all(liked_post_list)
    session.commit()

    post_like_state_list = []
    for liked_post in liked_post_list:
        post_like_state_list.append(
            post_like_state_factory(post_id=liked_post.id, user_id=user2.id))

    session.add_all(post_like_state_list)
    session.commit()

    like_post_list_result = BoardRepository().get_like_post_list(
        user_id=user2.id,
        previous_post_id=len(liked_post_list) % PostLimitEnum.LIMIT.value + 1,
    )

    assert len(like_post_list_result) == 1
    assert like_post_list_result[0].id == liked_post_list[0].id
def test_delete_post(session, normal_user_factory, post_factory):
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    post = post_factory(Article=True, user_id=user.id)
    session.add(post)
    session.commit()

    dto = DeletePostDto(post_id=user.post[0].id, user_id=user.id)

    post_entity = BoardRepository().delete_post(dto=dto)

    assert post_entity.id == dto.post_id
    assert post_entity.is_deleted == True
def test_get_post_list_order_by_desc(session, normal_user_factory,
                                     create_categories, post_factory):
    """
    판매중, 거래완료 최신순으로 조회
    """
    user = normal_user_factory.build(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    categories = create_categories(PostCategoryEnum.get_dict())

    region_group_id = user.region.region_group_id

    post1 = post_factory(
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=user.id,
        status=PostStatusEnum.SELLING.value,
    )
    post2 = post_factory(
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=user.id,
        status=PostStatusEnum.COMPLETED.value,
    )
    post3 = post_factory(
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=user.id,
        status=PostStatusEnum.COMPLETED.value,
    )

    session.add_all([post1, post2, post3])
    session.commit()

    post_list = BoardRepository().get_post_list(
        region_group_id=region_group_id,
        category_ids=[categories[0].id],
        status=PostStatusEnum.ALL.value,
    )

    assert len(post_list) == 3
    assert post_list[0].id == 3
    assert post_list[1].id == 2
    assert post_list[2].id == 1
def test_get_attachments(session, normal_user_factory, post_factory,
                         attachment_factory):
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    attachments = attachment_factory.build_batch(size=3)

    post = post_factory(Article=True, Attachments=attachments, user_id=user.id)
    session.add(post)
    session.commit()

    attachments = BoardRepository().get_attachments(post_id=post.id)

    for attachment in attachments:
        assert isinstance(attachment, AttachmentEntity)
def test_add_read_count(session, normal_user_factory, post_factory):
    """
    post 조회 시 read_count + 1
    """
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()
    post = post_factory(Article=True,
                        region_group_id=user.region.region_group.id,
                        user_id=user.id)
    session.add(post)
    session.commit()

    result = BoardRepository().add_read_count(post_id=post.id)

    assert result == True
def test_create_attachment(session, post_factory):
    post = post_factory()

    session.add(post)
    session.commit()

    attachment = BoardRepository().create_attachment(
        post_id=post.id,
        type=AttachmentEnum.PICTURE.value,
        file_name="hi",
        path=S3PathEnum.POST_IMGS.value,
        uuid=str(uuid.uuid4()),
        extension="jpg",
    )

    assert attachment.post_id == post.id
def test_get_selling_post_list(
    post_count_result,
    input_user_id,
    session,
    normal_user_factory,
    create_categories,
    post_factory,
):
    """
    판매 목록 조회
    """
    user_list = normal_user_factory.build_batch(size=2,
                                                Region=True,
                                                UserProfile=True)
    session.add_all(user_list)
    session.commit()

    post_owner = user_list[0]

    categories = create_categories(PostCategoryEnum.get_dict())

    region_group_id = post_owner.region.region_group_id

    post1 = post_factory(
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=post_owner.id,
        status=PostStatusEnum.SELLING.value,
    )
    post2 = post_factory(
        Article=True,
        Categories=[categories[0]],
        region_group_id=region_group_id,
        user_id=post_owner.id,
        status=PostStatusEnum.COMPLETED.value,
    )

    session.add_all([post1, post2])
    session.commit()

    selling_post_list = BoardRepository().get_selling_post_list(
        user_id=input_user_id)

    assert len(selling_post_list) == post_count_result
def test_create_post_like_state(session, normal_user_factory, post_factory):
    # 최초 찜하기
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()
    post = post_factory(
        Article=True,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
    )
    session.add(post)
    session.commit()

    post_like_state = BoardRepository().create_post_like_state(user_id=user.id,
                                                               post_id=post.id)

    assert post_like_state.post_id == post.id
    assert post_like_state.user_id == user.id
    assert post_like_state.state == PostLikeStateEnum.LIKE.value
def test_get_post_list_by_status(
    post_status,
    input_status,
    result_count,
    session,
    normal_user_factory,
    post_factory,
    create_categories,
):
    """
    post list 조회 시 판매중, 거래완료 상태에 따라 응답
    """
    user = normal_user_factory.build(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    region_group_id = user.region.region_group_id

    categories = create_categories(PostCategoryEnum.get_dict())

    post1 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=region_group_id,
        user_id=user.id,
    )
    post2 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=region_group_id,
        user_id=user.id,
        status=post_status,
    )

    session.add_all([post1, post2])
    session.commit()

    post_list = BoardRepository().get_post_list(
        region_group_id=region_group_id, status=input_status)

    assert len(post_list) == result_count
def test_get_post(session, normal_user_factory, post_factory,
                  attachment_factory):
    """
    post 조회 시 관련 table 목록 가져옴.
    """
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()
    attachments1 = attachment_factory.build_batch(size=1)
    attachments2 = attachment_factory.build_batch(size=1)

    post1 = post_factory(
        Article=True,
        Attachments=attachments1,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
    )
    post2 = post_factory(
        Article=True,
        Attachments=attachments2,
        region_group_id=user.region.region_group.id,
        user_id=user.id,
    )

    session.add_all([post1, post2])
    session.commit()

    post_entity = BoardRepository().get_post(post_id=user.post[0].id)

    assert post_entity.id == user.post[0].id
    assert post_entity.body == user.post[0].article.body
    assert post_entity.is_deleted == False
    assert post_entity.is_blocked == False
    assert post_entity.read_count == 0
    assert post_entity.is_comment_disabled == False
    assert post_entity.region_group_name == user.post[0].region_group.name
    assert isinstance(post_entity.created_at, datetime)
    assert isinstance(post_entity.user, UserEntity)
    assert isinstance(post_entity.attachments, list)
def test_get_post_list_by_category(
    input_category_ids,
    result_count,
    session,
    normal_user_factory,
    post_factory,
    create_categories,
):
    """
    post category에 해당되는 post 응답
    """
    user = normal_user_factory.build(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    categories = create_categories(PostCategoryEnum.get_dict())

    region_group_id = user.region.region_group_id

    post1 = post_factory(
        Article=True,
        Categories=[categories[0], categories[1], categories[3]],
        region_group_id=region_group_id,
        user_id=user.id,
    )
    post2 = post_factory(
        Article=True,
        Categories=[categories[3]],
        region_group_id=region_group_id,
        user_id=user.id,
    )

    session.add_all([post1, post2])
    session.commit()

    post_list = BoardRepository().get_post_list(
        region_group_id=region_group_id, category_ids=input_category_ids)

    assert len(post_list) == result_count
Example #25
0
def is_post_exist(post_id: int):
    is_exist = BoardRepository().is_post_exist(post_id=post_id)

    setattr(g, PostTopicEnum.IS_POST_EXIST.value, is_exist)
Example #26
0
def get_post(post_id: int, is_blocked: bool = False, is_deleted: bool = False):
    post = BoardRepository().get_post(
        post_id=post_id, is_blocked=is_blocked, is_deleted=is_deleted
    )

    setattr(g, PostTopicEnum.GET_POST.value, post)
Example #27
0
def block(post_id: int):
    is_blocked = BoardRepository().block(post_id=post_id)

    setattr(g, PostTopicEnum.BLOCK.value, is_blocked)
Example #28
0
def add_report_count(post_id: int):
    post = BoardRepository().add_report_count(post_id=post_id)

    setattr(g, PostTopicEnum.ADD_REPORT_COUNT.value, post)
def test_create_notification_history(session, normal_user_factory,
                                     create_categories):
    user = normal_user_factory(Region=True, UserProfile=True)
    session.add(user)
    session.commit()

    categories = create_categories(PostCategoryEnum.get_dict())

    post_dto = CreatePostDto(
        user_id=user.id,
        title="떡볶이 나눠 먹어요",
        body="",
        region_group_id=1,
        type="article",
        is_comment_disabled=True,
        is_deleted=False,
        is_blocked=False,
        report_count=0,
        read_count=0,
        last_user_action="default",
        last_admin_action="default",
        amount=10,
        unit=PostUnitEnum.UNIT.value,
        price_per_unit=10000,
        status=PostStatusEnum.SELLING.value,
        category_ids=[categories[0].id],
    )

    post_entity = BoardRepository().create_post(dto=post_dto)

    user2 = normal_user_factory(Region=True, UserProfile=True)
    session.add(user2)
    session.commit()

    message_dto = MessageDto(
        post_id=post_entity.id,
        user_id=user2.id,
        category=CategoryEnum.KEYWORD.value,
        type=TypeEnum.ALL.value,
        title=TitleEnum.KEYWORD.value,
        body=BodyEnum.KEYWORD.value,
        token="asdfasdf",
    )

    notification_message = NotificationMessageConverter.to_dict(message_dto)

    notification_history_list = list()
    notification_history_list.append(
        NotificationHistoryDto(
            user_id=message_dto.user_id,
            status=StatusEnum.PENDING.value,
            type=message_dto.type,
            category=message_dto.category,
            message=notification_message,
        ))
    NotificationRepository().create_notification_history(
        notification_list=notification_history_list)
    notification_history = (session.query(NotificationHistoryModel).filter(
        NotificationHistoryModel.id == 1).first())

    assert notification_history.message == notification_message
def test_search_post_list(session, normal_user_factory, post_factory,
                          create_categories):
    """
    post 검색. user1 post 2개, user2 post 2개, user3 post 1개, 다른 지역 user4 post 1개
    총 5개 post 응답
    """
    user_list = normal_user_factory.build_batch(size=4,
                                                Region=True,
                                                UserProfile=True)
    session.add_all(user_list)
    session.commit()

    region_group_id = user_list[0].region.region_group_id

    categories = create_categories(PostCategoryEnum.get_dict())

    post1 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=region_group_id,
        user_id=user_list[0].id,
    )
    post2 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=region_group_id,
        user_id=user_list[0].id,
    )
    post3 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=region_group_id,
        user_id=user_list[1].id,
    )
    post4 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=region_group_id,
        user_id=user_list[1].id,
    )
    post5 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=region_group_id,
        user_id=user_list[2].id,
    )
    post6 = post_factory(
        Article=True,
        Categories=categories,
        region_group_id=user_list[3].region.region_group_id,
        user_id=user_list[3].id,
    )

    session.add_all([post1, post2, post3, post4, post5, post6])
    session.commit()

    post_list = BoardRepository().get_post_list(
        region_group_id=region_group_id,
        title=post1.title[2:6],
        category_ids=[categories[0].id],
    )

    for post in post_list:
        assert post.region_group_id == region_group_id
        assert post1.title[2:6] in post.title
    assert len(post_list) == 5