Working with enums in graphql...

This commit is contained in:
Daniel Egger 2023-06-26 15:16:08 +02:00
parent b9c9b009ff
commit ab8dbd09ef
6 changed files with 55 additions and 41 deletions

View File

@ -107,15 +107,23 @@ export type AttendanceCourseUserMutation = {
};
export type AttendanceUserInputType = {
user_id?: InputMaybe<Scalars['ID']>;
status: AttendanceUserStatus;
user_id: Scalars['ID'];
};
/** An enumeration. */
export enum AttendanceUserStatus {
Absent = 'ABSENT',
Present = 'PRESENT'
}
export type AttendanceUserType = {
__typename?: 'AttendanceUserType';
email?: Maybe<Scalars['String']>;
first_name?: Maybe<Scalars['String']>;
last_name?: Maybe<Scalars['String']>;
user_id?: Maybe<Scalars['ID']>;
status: AttendanceUserStatus;
user_id: Scalars['ID'];
};
/** An enumeration. */

View File

@ -25,12 +25,19 @@ value as specified by
scalar DateTime
type AttendanceUserType {
user_id: ID
user_id: ID!
status: AttendanceUserStatus!
first_name: String
last_name: String
email: String
}
"""An enumeration."""
enum AttendanceUserStatus {
PRESENT
ABSENT
}
type CourseType {
id: ID!
title: String!
@ -246,7 +253,8 @@ type AttendanceCourseUserMutation {
}
input AttendanceUserInputType {
user_id: ID
user_id: ID!
status: AttendanceUserStatus!
}
type AssignmentCompletionMutation {

View File

@ -2,13 +2,13 @@ import graphene
import structlog
from rest_framework.exceptions import PermissionDenied
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.permissions import has_course_access
from vbv_lernwelt.course_session.graphql.types import (
CourseSessionAttendanceCourseType,
)
from vbv_lernwelt.course_session.graphql.types import CourseSessionAttendanceCourseType
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
from vbv_lernwelt.course_session.services.attendance import AttendanceUserStatus
from vbv_lernwelt.course_session.services.attendance import (
AttendanceUserStatus,
update_attendance_list,
)
logger = structlog.get_logger(__name__)
@ -37,29 +37,16 @@ class AttendanceCourseUserMutation(graphene.Mutation):
):
attendance_course = CourseSessionAttendanceCourse.objects.get(id=id)
if not has_course_access(
if not attendance_course or not has_course_access(
info.context.user,
attendance_course.course_session.course_id,
):
raise PermissionDenied()
# FIXME: create completion for every user in attendance_user_list
result_user_list = []
for attendance_user in attendance_user_list:
u = User.objects.filter(id=attendance_user.user_id).first()
if u is not None:
result_user_list.append(
{
"user_id": u.id,
"email": u.email,
"first_name": u.first_name,
"last_name": u.last_name,
}
)
attendance_course.attendance_user_list = result_user_list
attendance_course.save()
attendance_course = update_attendance_list(
attendance_course=attendance_course,
attendance_user_list=attendance_user_list,
)
return AttendanceCourseUserMutation(
course_session_attendance_course=attendance_course

View File

@ -29,14 +29,18 @@ def update_attendance_list(
result_user_list.append(
{
"user_id": u.id,
"status": attendance_user.get("status"),
"status": attendance_user.get(
"status", AttendanceUserStatus.PRESENT
).value,
"email": u.email,
"first_name": u.first_name,
"last_name": u.last_name,
}
)
completion_status = (
"success" if attendance_user.get("status") == "PRESENT" else "fail"
"success"
if attendance_user.get("status").value == "PRESENT"
else "fail"
)
mark_course_completion(
page_key=attendance_course.learning_content.translation_key,

View File

@ -3,10 +3,13 @@ from django.test import TestCase
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.models import CourseSession, CourseCompletion
from vbv_lernwelt.course.models import CourseCompletion, CourseSession
from vbv_lernwelt.course.services import mark_course_completion
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
from vbv_lernwelt.course_session.services.attendance import update_attendance_list
from vbv_lernwelt.course_session.services.attendance import (
AttendanceUserStatus,
update_attendance_list,
)
class AttendanceServicesTestCase(TestCase):
@ -24,7 +27,8 @@ class AttendanceServicesTestCase(TestCase):
student = User.objects.get(username="test-student1@example.com")
update_attendance_list(
self.attendance_course, [{"user_id": student.id, "status": "PRESENT"}]
self.attendance_course,
[{"user_id": student.id, "status": AttendanceUserStatus.PRESENT}],
)
attendance_course = CourseSessionAttendanceCourse.objects.get(
@ -49,7 +53,8 @@ class AttendanceServicesTestCase(TestCase):
def test_updateAttendanceList_willUpdateUserCourseCompletion(self):
student = User.objects.get(username="test-student1@example.com")
update_attendance_list(
self.attendance_course, [{"user_id": student.id, "status": "PRESENT"}]
self.attendance_course,
[{"user_id": student.id, "status": AttendanceUserStatus.PRESENT}],
)
self.assertEqual(CourseCompletion.objects.count(), 1)
cc = CourseCompletion.objects.first()

View File

@ -23,13 +23,13 @@ class AttendanceCourseUserMutationTestCase(GraphQLTestCase):
def test_simple_query(self):
response = self.query(
"""
{
course_session_attendance_course(id:1) {
f"""
{{
course_session_attendance_course(id:{self.attendance_course.id}) {{
id
trainer
}
}
}}
}}
"""
)
@ -47,10 +47,10 @@ class AttendanceCourseUserMutationTestCase(GraphQLTestCase):
query = f"""
mutation {{
update_course_session_attendance_course_users(
id:1,
id:{self.attendance_course.id},
attendance_user_list:[
{{user_id: {student.id}}},
{{user_id: "123123123"}}
{{user_id: {student.id}, status: PRESENT}},
{{user_id: "123123123", status: PRESENT}},
]
) {{
course_session_attendance_course {{
@ -60,6 +60,7 @@ class AttendanceCourseUserMutationTestCase(GraphQLTestCase):
first_name
last_name
email
status
}}
}}
}}
@ -84,6 +85,7 @@ class AttendanceCourseUserMutationTestCase(GraphQLTestCase):
"first_name": student.first_name,
"last_name": student.last_name,
"email": student.email,
"status": "PRESENT",
}
],
}