def test_cannot_approve_already_approved(self): u = UserFactory() req = ApprovalRequestFactory() req.approve(u, "r+") with pytest.raises(req.NotActionable): req.approve(u, "r+")
def test_cannot_approve_already_approved(self): u = UserFactory() req = ApprovalRequestFactory() req.approve(u, "r+") with pytest.raises(req.NotActionable): req.approve(u, "r+")
def test_it_can_enable_recipes(self, api_client): recipe = RecipeFactory(enabled=False) approval_request = ApprovalRequestFactory(recipe=recipe) approval_request.approve(UserFactory()) res = api_client.post('/api/v1/recipe/%s/enable/' % recipe.id) assert res.status_code == 204 recipe = Recipe.objects.all()[0] assert recipe.enabled
def test_approve(self): u = UserFactory() req = ApprovalRequestFactory() req.approve(u, 'r+') assert req.approved assert req.approver == u assert req.comment == 'r+' recipe = req.revision.recipe assert recipe.is_approved
def test_reject_not_actionable(self, api_client): r = RecipeFactory() a = ApprovalRequestFactory(revision=r.latest_revision) a.approve(UserFactory(), 'r+') res = api_client.post( '/api/v1/approval_request/{}/reject/'.format(a.id), {'comment': '-r'}) assert res.status_code == 400 assert res.data[ 'error'] == 'This approval request has already been approved or rejected.'
def test_recipe_is_approved(self): recipe = RecipeFactory(name="old") assert not recipe.is_approved approval = ApprovalRequestFactory(revision=recipe.latest_revision) approval.approve(UserFactory(), "r+") assert recipe.is_approved assert recipe.approved_revision == recipe.latest_revision recipe.revise(name="new") assert recipe.is_approved assert recipe.approved_revision != recipe.latest_revision
def test_recipe_is_approved(self): recipe = RecipeFactory(name="old") assert not recipe.is_approved approval = ApprovalRequestFactory(revision=recipe.latest_revision) approval.approve(UserFactory(), "r+") assert recipe.is_approved assert recipe.approved_revision == recipe.latest_revision recipe.revise(name="new") assert recipe.is_approved assert recipe.approved_revision != recipe.latest_revision
def test_approve(self, mocker): u = UserFactory() req = ApprovalRequestFactory() mocker.patch.object(req, "verify_approver") req.approve(u, "r+") assert req.approved assert req.approver == u assert req.comment == "r+" req.verify_approver.assert_called_with(u) recipe = req.revision.recipe assert recipe.is_approved
def test_approve(self, mocker): u = UserFactory() req = ApprovalRequestFactory() mocker.patch.object(req, "verify_approver") req.approve(u, "r+") assert req.approved assert req.approver == u assert req.comment == "r+" req.verify_approver.assert_called_with(u) recipe = req.revision.recipe assert recipe.is_approved
def test_approval_status(self): recipe = RecipeFactory() revision = recipe.latest_revision assert revision.approval_status is None approval = ApprovalRequestFactory(revision=revision) revision = RecipeRevision.objects.get(pk=revision.pk) assert revision.approval_status == revision.PENDING approval.approve(UserFactory(), "r+") revision = RecipeRevision.objects.get(pk=revision.pk) assert revision.approval_status == revision.APPROVED approval.delete() approval = ApprovalRequestFactory(revision=revision) approval.reject(UserFactory(), "r-") revision = RecipeRevision.objects.get(pk=revision.pk) assert revision.approval_status == revision.REJECTED
def test_current_revision_property(self): """Ensure current revision properties work as expected.""" recipe = RecipeFactory(name="first") assert recipe.name == "first" recipe.revise(name="second") assert recipe.name == "second" approval = ApprovalRequestFactory(revision=recipe.latest_revision) approval.approve(UserFactory(), "r+") assert recipe.name == "second" # When `revise` is called on a recipe with at least one approved revision, the new revision # is treated as a draft and as such the `name` property of the recipe should return the # `name` from the `approved_revision` not the `latest_revision`. recipe.revise(name="third") assert recipe.latest_revision.name == "third" # The latest revision ("draft") is updated assert recipe.name == "second" # The current revision is unchanged
def test_approval_status(self): recipe = RecipeFactory() revision = recipe.latest_revision assert revision.approval_status is None approval = ApprovalRequestFactory(revision=revision) revision = RecipeRevision.objects.get(pk=revision.pk) assert revision.approval_status == revision.PENDING approval.approve(UserFactory(), "r+") revision = RecipeRevision.objects.get(pk=revision.pk) assert revision.approval_status == revision.APPROVED approval.delete() approval = ApprovalRequestFactory(revision=revision) approval.reject(UserFactory(), "r-") revision = RecipeRevision.objects.get(pk=revision.pk) assert revision.approval_status == revision.REJECTED
def test_current_revision_property(self): """Ensure current revision properties work as expected.""" recipe = RecipeFactory(name="first") assert recipe.name == "first" recipe.revise(name="second") assert recipe.name == "second" approval = ApprovalRequestFactory(revision=recipe.latest_revision) approval.approve(UserFactory(), "r+") assert recipe.name == "second" # When `revise` is called on a recipe with at least one approved revision, the new revision # is treated as a draft and as such the `name` property of the recipe should return the # `name` from the `approved_revision` not the `latest_revision`. recipe.revise(name="third") assert recipe.latest_revision.name == "third" # The latest revision ("draft") is updated assert recipe.name == "second" # The current revision is unchanged