diff --git a/client/src/components/profile/Classlist.vue b/client/src/components/profile/ClassList.vue
similarity index 56%
rename from client/src/components/profile/Classlist.vue
rename to client/src/components/profile/ClassList.vue
index 3f10d95f..5b66c076 100644
--- a/client/src/components/profile/Classlist.vue
+++ b/client/src/components/profile/ClassList.vue
@@ -3,16 +3,26 @@
{{name}}
@@ -28,7 +38,7 @@
return `${member.firstName} ${member.lastName}`;
},
role({isTeacher}) {
- return isTeacher ? 'Lehrperson' : '';
+ return isTeacher ? 'Lehrperson' : 'Schüler';
}
},
computed: {
@@ -44,6 +54,7 @@
diff --git a/client/src/graphql/gql/mutations/addRemoveMember.gql b/client/src/graphql/gql/mutations/addRemoveMember.gql
new file mode 100644
index 00000000..4cc6ca49
--- /dev/null
+++ b/client/src/graphql/gql/mutations/addRemoveMember.gql
@@ -0,0 +1,5 @@
+mutation AddRemoveMember($input: AddRemoveMemberInput!) {
+ addRemoveMember(input: $input) {
+ success
+ }
+}
diff --git a/client/src/graphql/gql/mutations/removeMember.gql b/client/src/graphql/gql/mutations/removeMember.gql
deleted file mode 100644
index c43074b7..00000000
--- a/client/src/graphql/gql/mutations/removeMember.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-mutation RemoveMember($input: RemoveMemberInput!) {
- removeMember(input: $input) {
- success
- }
-}
diff --git a/server/users/mutations.py b/server/users/mutations.py
index 1100f9a7..694a78b8 100644
--- a/server/users/mutations.py
+++ b/server/users/mutations.py
@@ -133,10 +133,11 @@ class JoinClass(relay.ClientIDMutation):
raise CodeNotFoundException('[CNV] Code ist nicht gültig') # CAV = Code Not Valid
-class RemoveMember(relay.ClientIDMutation):
+class AddRemoveMember(relay.ClientIDMutation):
class Input:
member = graphene.ID(required=True)
school_class = graphene.ID(required=True)
+ active = graphene.Boolean(required=True)
success = graphene.Boolean()
@@ -144,6 +145,7 @@ class RemoveMember(relay.ClientIDMutation):
def mutate_and_get_payload(cls, root, info, **kwargs):
member_id = kwargs.get('member')
school_class_id = kwargs.get('school_class')
+ active = kwargs.get('active')
user = info.context.user
member_pk = from_global_id(member_id)[1]
@@ -153,7 +155,7 @@ class RemoveMember(relay.ClientIDMutation):
raise PermissionError('Fehlende Berechtigung')
school_class_member = SchoolClassMember.objects.get(user__pk=member_pk, school_class=school_class)
- school_class_member.active = False
+ school_class_member.active = active
school_class_member.save()
return cls(success=True)
@@ -164,4 +166,4 @@ class ProfileMutations:
update_avatar = UpdateAvatar.Field()
update_setting = UpdateSetting.Field()
join_class = JoinClass.Field()
- remove_member = RemoveMember.Field()
+ add_remove_member = AddRemoveMember.Field()
diff --git a/server/users/tests/test_leave_reenter_class.py b/server/users/tests/test_leave_reenter_class.py
index 2db4a35e..1f63cc05 100644
--- a/server/users/tests/test_leave_reenter_class.py
+++ b/server/users/tests/test_leave_reenter_class.py
@@ -50,9 +50,9 @@ class JoinSchoolClassTest(TestCase):
self.teacher_context = Context(user=teacher)
self.student_context = Context(user=student)
- self.mutation = get_graphql_mutation('removeMember.gql')
+ self.mutation = get_graphql_mutation('addRemoveMember.gql')
- def test_leave_class(self):
+ def test_leave_and_join_class(self):
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
self.assertEqual(
@@ -61,7 +61,8 @@ class JoinSchoolClassTest(TestCase):
result = self.client.execute(self.mutation, variables={
'input': {
'schoolClass': self.school_class_id,
- 'member': self.student_id
+ 'member': self.student_id,
+ 'active': False
}
}, context=self.teacher_context)
self.assertIsNone(result.get('errors'))
@@ -71,6 +72,21 @@ class JoinSchoolClassTest(TestCase):
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(),
1)
+ result = self.client.execute(self.mutation, variables={
+ 'input': {
+ 'schoolClass': self.school_class_id,
+ 'member': self.student_id,
+ 'active': True
+ }
+ }, context=self.teacher_context)
+
+ self.assertIsNone(result.get('errors'))
+ self.assertEqual(
+ SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
+ self.assertEqual(
+ SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=False).count(),
+ 0)
+
def test_leave_class_student_raises_error(self):
self.assertEqual(
SchoolClassMember.objects.filter(school_class__name=self.school_class_name, active=True).count(), 6)
@@ -79,7 +95,8 @@ class JoinSchoolClassTest(TestCase):
result = self.client.execute(self.mutation, variables={
'input': {
'schoolClass': self.school_class_id,
- 'member': self.other_student_id
+ 'member': self.other_student_id,
+ 'active': False
}
}, context=self.student_context)
self.assertIsNotNone(result['errors'])
@@ -98,7 +115,8 @@ class JoinSchoolClassTest(TestCase):
result = self.client.execute(self.mutation, variables={
'input': {
'schoolClass': to_global_id('SchoolClassNode', school_class.id),
- 'member': to_global_id('UserNode', student.id)
+ 'member': to_global_id('UserNode', student.id),
+ 'active': False
}
}, context=self.teacher_context)
self.assertIsNotNone(result['errors'])