From b9a8b3ff383142d0dbe0927a7e89cf0b2918e247 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Tue, 16 Nov 2021 15:36:26 +0100 Subject: [PATCH] Fix bug, add happy path test --- server/portfolio/mutations.py | 5 ++-- .../portfolio/tests/test_project_mutations.py | 26 +++++++++++++++++++ server/portfolio/tests/test_project_query.py | 6 ++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/server/portfolio/mutations.py b/server/portfolio/mutations.py index b363e88d..8ee1cdfd 100644 --- a/server/portfolio/mutations.py +++ b/server/portfolio/mutations.py @@ -62,7 +62,8 @@ class UpdateProject(MutateProject): cls.user_is_owner(data, info.context.user) data['student'] = info.context.user.id - serializer = ProjectSerializer(data=data) + entity = get_object(Project, data['id']) + serializer = ProjectSerializer(entity, data=data) if serializer.is_valid(): serializer.save() props = { @@ -76,7 +77,7 @@ class UpdateProject(MutateProject): @classmethod def user_is_owner(cls, data, user): project = get_object(Project, data['id']) - if not project or not project.student == user.id: + if not project or not project.student == user: raise PermissionDenied('not allowed') diff --git a/server/portfolio/tests/test_project_mutations.py b/server/portfolio/tests/test_project_mutations.py index ce370a60..7008a521 100644 --- a/server/portfolio/tests/test_project_mutations.py +++ b/server/portfolio/tests/test_project_mutations.py @@ -94,6 +94,32 @@ mutation UpdateProjectMutation($input: UpdateProjectInput!){ self.assertTrue('message' in result.errors[0]) self.assertEqual(result.errors[0]['message'], 'not allowed') + def test_owner_can_edit(self): + self.assertEqual(Project.objects.count(), 1) + request = RequestFactory().get('/') + request.user = self.student + self.client = Client(schema=schema, context_value=request) + mutation = ''' +mutation UpdateProjectMutation($input: UpdateProjectInput!){ + updateProject(input: $input) { + project { + id + } + } +} +''' + + input = { + 'project': { + 'id': self.project1.graphql_id, + 'title': 'Good! THIS IS good!' + } + } + result = self.get_client(self.student).get_result(mutation, variables={ + 'input': input + }) + self.assertIsNone(result.errors) + class ProjectMutationsTestCase(DefaultUserTestCase): def test_add_project(self): diff --git a/server/portfolio/tests/test_project_query.py b/server/portfolio/tests/test_project_query.py index b26e19d0..9c66de0c 100644 --- a/server/portfolio/tests/test_project_query.py +++ b/server/portfolio/tests/test_project_query.py @@ -117,12 +117,12 @@ class ProjectQueryTestCase(SkillboxTestCase): # non-owner can't access project self._test_direct_project_access(self.student2, False) - def test_project_owner(self): + def test_project_owner_can_view(self): query = """ query ProjectQuery($id: ID!) { project(id: $id) { id - owner { + student { email } } @@ -131,4 +131,4 @@ query ProjectQuery($id: ID!) { result = self.get_client(self.student1).get_result(query, variables={ 'id': self.project1.graphql_id }) - self.assertIsNotNone(result.errors) + self.assertEqual(result.data['project']['student']['email'], self.student1.email)