Working with enums in graphql...
This commit is contained in:
parent
b9c9b009ff
commit
ab8dbd09ef
|
|
@ -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. */
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
}
|
||||
],
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue