from django.test import TestCase, RequestFactory from graphene.test import Client from graphql_relay import to_global_id from api.schema import schema from portfolio.factories import ProjectFactory from portfolio.models import Project from rooms.models import Room from users.factories import SchoolClassFactory from users.models import User, SchoolClass from users.services import create_users class ProjectQuery(TestCase): def setUp(self): create_users() self.teacher = User.objects.get(username='teacher') self.teacher2 = User.objects.get(username='teacher2') self.student = User.objects.get(username='student1') self.student2 = User.objects.get(username='student2') school_class1 = SchoolClassFactory(users=[self.teacher, self.student]) school_class2 = SchoolClassFactory(users=[self.teacher2, self.student2]) self.project1 = ProjectFactory(student=self.student) self.mutation = ''' mutation DeleteProject($input: DeleteProjectInput!) { deleteProject(input: $input) { success errors } } ''' self.variables = { 'input': { 'id': to_global_id('ProjectNode', self.project1.id) } } def test_should_be_able_to_delete_own_projects(self): self.assertEqual(Project.objects.count(), 1) request = RequestFactory().get('/') request.user = self.student self.client = Client(schema=schema, context_value=request) result = self.client.execute(self.mutation, variables=self.variables) self.assertIsNone(result.get('errors')) self.assertEqual(Project.objects.count(), 0) def test_should_not_be_able_to_delete_other_projects(self): self.assertEqual(Project.objects.count(), 1) request = RequestFactory().get('/') request.user = self.student2 self.client = Client(schema=schema, context_value=request) result = self.client.execute(self.mutation, variables=self.variables) self.assertEqual(result.get('errors')[0]['message'], 'Permission denied: Incorrect project')