Working with enums in graphql...
This commit is contained in:
parent
b9c9b009ff
commit
ab8dbd09ef
|
|
@ -107,15 +107,23 @@ export type AttendanceCourseUserMutation = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export type AttendanceUserInputType = {
|
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 = {
|
export type AttendanceUserType = {
|
||||||
__typename?: 'AttendanceUserType';
|
__typename?: 'AttendanceUserType';
|
||||||
email?: Maybe<Scalars['String']>;
|
email?: Maybe<Scalars['String']>;
|
||||||
first_name?: Maybe<Scalars['String']>;
|
first_name?: Maybe<Scalars['String']>;
|
||||||
last_name?: Maybe<Scalars['String']>;
|
last_name?: Maybe<Scalars['String']>;
|
||||||
user_id?: Maybe<Scalars['ID']>;
|
status: AttendanceUserStatus;
|
||||||
|
user_id: Scalars['ID'];
|
||||||
};
|
};
|
||||||
|
|
||||||
/** An enumeration. */
|
/** An enumeration. */
|
||||||
|
|
|
||||||
|
|
@ -25,12 +25,19 @@ value as specified by
|
||||||
scalar DateTime
|
scalar DateTime
|
||||||
|
|
||||||
type AttendanceUserType {
|
type AttendanceUserType {
|
||||||
user_id: ID
|
user_id: ID!
|
||||||
|
status: AttendanceUserStatus!
|
||||||
first_name: String
|
first_name: String
|
||||||
last_name: String
|
last_name: String
|
||||||
email: String
|
email: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""An enumeration."""
|
||||||
|
enum AttendanceUserStatus {
|
||||||
|
PRESENT
|
||||||
|
ABSENT
|
||||||
|
}
|
||||||
|
|
||||||
type CourseType {
|
type CourseType {
|
||||||
id: ID!
|
id: ID!
|
||||||
title: String!
|
title: String!
|
||||||
|
|
@ -246,7 +253,8 @@ type AttendanceCourseUserMutation {
|
||||||
}
|
}
|
||||||
|
|
||||||
input AttendanceUserInputType {
|
input AttendanceUserInputType {
|
||||||
user_id: ID
|
user_id: ID!
|
||||||
|
status: AttendanceUserStatus!
|
||||||
}
|
}
|
||||||
|
|
||||||
type AssignmentCompletionMutation {
|
type AssignmentCompletionMutation {
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@ import graphene
|
||||||
import structlog
|
import structlog
|
||||||
from rest_framework.exceptions import PermissionDenied
|
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.permissions import has_course_access
|
||||||
from vbv_lernwelt.course_session.graphql.types import (
|
from vbv_lernwelt.course_session.graphql.types import CourseSessionAttendanceCourseType
|
||||||
CourseSessionAttendanceCourseType,
|
|
||||||
)
|
|
||||||
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
|
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__)
|
logger = structlog.get_logger(__name__)
|
||||||
|
|
||||||
|
|
@ -37,29 +37,16 @@ class AttendanceCourseUserMutation(graphene.Mutation):
|
||||||
):
|
):
|
||||||
attendance_course = CourseSessionAttendanceCourse.objects.get(id=id)
|
attendance_course = CourseSessionAttendanceCourse.objects.get(id=id)
|
||||||
|
|
||||||
if not has_course_access(
|
if not attendance_course or not has_course_access(
|
||||||
info.context.user,
|
info.context.user,
|
||||||
attendance_course.course_session.course_id,
|
attendance_course.course_session.course_id,
|
||||||
):
|
):
|
||||||
raise PermissionDenied()
|
raise PermissionDenied()
|
||||||
|
|
||||||
# FIXME: create completion for every user in attendance_user_list
|
attendance_course = update_attendance_list(
|
||||||
|
attendance_course=attendance_course,
|
||||||
result_user_list = []
|
attendance_user_list=attendance_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()
|
|
||||||
|
|
||||||
return AttendanceCourseUserMutation(
|
return AttendanceCourseUserMutation(
|
||||||
course_session_attendance_course=attendance_course
|
course_session_attendance_course=attendance_course
|
||||||
|
|
|
||||||
|
|
@ -29,14 +29,18 @@ def update_attendance_list(
|
||||||
result_user_list.append(
|
result_user_list.append(
|
||||||
{
|
{
|
||||||
"user_id": u.id,
|
"user_id": u.id,
|
||||||
"status": attendance_user.get("status"),
|
"status": attendance_user.get(
|
||||||
|
"status", AttendanceUserStatus.PRESENT
|
||||||
|
).value,
|
||||||
"email": u.email,
|
"email": u.email,
|
||||||
"first_name": u.first_name,
|
"first_name": u.first_name,
|
||||||
"last_name": u.last_name,
|
"last_name": u.last_name,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
completion_status = (
|
completion_status = (
|
||||||
"success" if attendance_user.get("status") == "PRESENT" else "fail"
|
"success"
|
||||||
|
if attendance_user.get("status").value == "PRESENT"
|
||||||
|
else "fail"
|
||||||
)
|
)
|
||||||
mark_course_completion(
|
mark_course_completion(
|
||||||
page_key=attendance_course.learning_content.translation_key,
|
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.create_default_users import create_default_users
|
||||||
from vbv_lernwelt.core.models import User
|
from vbv_lernwelt.core.models import User
|
||||||
from vbv_lernwelt.course.creators.test_course import create_test_course
|
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.services import mark_course_completion
|
||||||
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
|
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):
|
class AttendanceServicesTestCase(TestCase):
|
||||||
|
|
@ -24,7 +27,8 @@ class AttendanceServicesTestCase(TestCase):
|
||||||
student = User.objects.get(username="test-student1@example.com")
|
student = User.objects.get(username="test-student1@example.com")
|
||||||
|
|
||||||
update_attendance_list(
|
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(
|
attendance_course = CourseSessionAttendanceCourse.objects.get(
|
||||||
|
|
@ -49,7 +53,8 @@ class AttendanceServicesTestCase(TestCase):
|
||||||
def test_updateAttendanceList_willUpdateUserCourseCompletion(self):
|
def test_updateAttendanceList_willUpdateUserCourseCompletion(self):
|
||||||
student = User.objects.get(username="test-student1@example.com")
|
student = User.objects.get(username="test-student1@example.com")
|
||||||
update_attendance_list(
|
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)
|
self.assertEqual(CourseCompletion.objects.count(), 1)
|
||||||
cc = CourseCompletion.objects.first()
|
cc = CourseCompletion.objects.first()
|
||||||
|
|
|
||||||
|
|
@ -23,13 +23,13 @@ class AttendanceCourseUserMutationTestCase(GraphQLTestCase):
|
||||||
|
|
||||||
def test_simple_query(self):
|
def test_simple_query(self):
|
||||||
response = self.query(
|
response = self.query(
|
||||||
"""
|
f"""
|
||||||
{
|
{{
|
||||||
course_session_attendance_course(id:1) {
|
course_session_attendance_course(id:{self.attendance_course.id}) {{
|
||||||
id
|
id
|
||||||
trainer
|
trainer
|
||||||
}
|
}}
|
||||||
}
|
}}
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -47,10 +47,10 @@ class AttendanceCourseUserMutationTestCase(GraphQLTestCase):
|
||||||
query = f"""
|
query = f"""
|
||||||
mutation {{
|
mutation {{
|
||||||
update_course_session_attendance_course_users(
|
update_course_session_attendance_course_users(
|
||||||
id:1,
|
id:{self.attendance_course.id},
|
||||||
attendance_user_list:[
|
attendance_user_list:[
|
||||||
{{user_id: {student.id}}},
|
{{user_id: {student.id}, status: PRESENT}},
|
||||||
{{user_id: "123123123"}}
|
{{user_id: "123123123", status: PRESENT}},
|
||||||
]
|
]
|
||||||
) {{
|
) {{
|
||||||
course_session_attendance_course {{
|
course_session_attendance_course {{
|
||||||
|
|
@ -60,6 +60,7 @@ class AttendanceCourseUserMutationTestCase(GraphQLTestCase):
|
||||||
first_name
|
first_name
|
||||||
last_name
|
last_name
|
||||||
email
|
email
|
||||||
|
status
|
||||||
}}
|
}}
|
||||||
}}
|
}}
|
||||||
}}
|
}}
|
||||||
|
|
@ -84,6 +85,7 @@ class AttendanceCourseUserMutationTestCase(GraphQLTestCase):
|
||||||
"first_name": student.first_name,
|
"first_name": student.first_name,
|
||||||
"last_name": student.last_name,
|
"last_name": student.last_name,
|
||||||
"email": student.email,
|
"email": student.email,
|
||||||
|
"status": "PRESENT",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue