def test_approve_review_by_manager_success(running_interval, client):
    self_review = SelfReviewFactory(user__with_manager=True,
                                    interval=running_interval,
                                    published=True)
    review = ReviewFactory(target=self_review.user,
                           interval=running_interval,
                           pending=True)
    client.force_login(user=review.target.manager)
    client.post(review.get_absolute_url(), {'action': 'hidden'})
    review.refresh_from_db()
    assert review.status == review.STATUS.hidden
def test_cant_approve_own_review(running_interval, client):
    self_review = SelfReviewFactory(user__with_manager=True,
                                    interval=running_interval,
                                    published=True)
    review = ReviewFactory(target=self_review.user,
                           interval=running_interval,
                           pending=True)
    client.force_login(user=review.reviewer)
    response = client.post(review.get_absolute_url(), {'action': 'hidden'})
    assert response.context['approve_form'].errors['__all__'].as_data(
    )[0].code == 'not_manager'
    review.refresh_from_db()
    assert review.status == review.STATUS.pending
def test_submit_review(running_interval, client, action, visitor_slug,
                       expected_status):
    user = UserFactory(with_manager=True)
    users = {
        'manager': user.manager,
        'other_user': UserFactory(),
    }
    review = ReviewFactory(interval=running_interval,
                           target=user,
                           reviewer=users[visitor_slug],
                           draft=True)
    SelfReviewFactory(user=user, interval=running_interval, published=True)
    client.force_login(user=users[visitor_slug])
    response = client.post(review.get_absolute_url(), {
        'score': 1,
        'text': 'some text',
        'interval': running_interval.id,
        'action': action
    },
                           follow=True)
    assert response.status_code == 200
    review.refresh_from_db()
    assert review.status == expected_status