// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "google_apis/classroom/classroom_api_student_submissions_response_types.h"
#include <memory>
#include "base/json/json_reader.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace google_apis::classroom {
using ::base::JSONReader;
TEST(ClassroomApiStudentSubmissionsResponseTypesTest, ConvertsEmptyResponse) {
auto raw_student_submissions = JSONReader::Read("{}");
ASSERT_TRUE(raw_student_submissions);
auto submissions =
StudentSubmissions::CreateFrom(raw_student_submissions.value());
ASSERT_TRUE(submissions);
EXPECT_TRUE(submissions->items().empty());
EXPECT_TRUE(submissions->next_page_token().empty());
}
TEST(ClassroomApiStudentSubmissionsResponseTypesTest, ConvertsSubmissions) {
const auto raw_student_submissions = JSONReader::Read(R"(
{
"studentSubmissions": [
{
"id": "student-submission-item-1",
"courseWorkId": "course-work-id",
"state": "NEW"
},
{
"id": "student-submission-item-2",
"courseWorkId": "course-work-id",
"state": "CREATED"
},
{
"id": "student-submission-item-3",
"courseWorkId": "course-work-id",
"state": "TURNED_IN",
"assignedGrade": 3.3
},
{
"id": "student-submission-item-4",
"courseWorkId": "course-work-id",
"state": "RETURNED",
"assignedGrade": 99.0
},
{
"id": "student-submission-item-5",
"courseWorkId": "course-work-id",
"state": "RECLAIMED_BY_STUDENT",
"assignedGrade": 99.99
}
]
})");
ASSERT_TRUE(raw_student_submissions);
const auto submissions =
StudentSubmissions::CreateFrom(raw_student_submissions.value());
ASSERT_TRUE(submissions);
EXPECT_EQ(submissions->items().size(), 5u);
EXPECT_TRUE(submissions->next_page_token().empty());
EXPECT_EQ(submissions->items().at(0)->id(), "student-submission-item-1");
EXPECT_EQ(submissions->items().at(0)->course_work_id(), "course-work-id");
EXPECT_EQ(submissions->items().at(0)->state(),
StudentSubmission::State::kNew);
EXPECT_FALSE(submissions->items().at(0)->assigned_grade());
EXPECT_EQ(submissions->items().at(1)->id(), "student-submission-item-2");
EXPECT_EQ(submissions->items().at(1)->course_work_id(), "course-work-id");
EXPECT_EQ(submissions->items().at(1)->state(),
StudentSubmission::State::kCreated);
EXPECT_FALSE(submissions->items().at(1)->assigned_grade());
EXPECT_EQ(submissions->items().at(2)->id(), "student-submission-item-3");
EXPECT_EQ(submissions->items().at(2)->course_work_id(), "course-work-id");
EXPECT_EQ(submissions->items().at(2)->state(),
StudentSubmission::State::kTurnedIn);
EXPECT_DOUBLE_EQ(submissions->items().at(2)->assigned_grade().value(), 3.3);
EXPECT_EQ(submissions->items().at(3)->id(), "student-submission-item-4");
EXPECT_EQ(submissions->items().at(3)->course_work_id(), "course-work-id");
EXPECT_EQ(submissions->items().at(3)->state(),
StudentSubmission::State::kReturned);
EXPECT_DOUBLE_EQ(submissions->items().at(3)->assigned_grade().value(), 99);
EXPECT_EQ(submissions->items().at(4)->id(), "student-submission-item-5");
EXPECT_EQ(submissions->items().at(4)->course_work_id(), "course-work-id");
EXPECT_EQ(submissions->items().at(4)->state(),
StudentSubmission::State::kReclaimedByStudent);
EXPECT_DOUBLE_EQ(submissions->items().at(4)->assigned_grade().value(), 99.99);
}
TEST(ClassroomApiStudentSubmissionsResponseTypesTest, ConvertsNextPageToken) {
const auto raw_submissions = JSONReader::Read(R"(
{
"studentSubmissions": [],
"nextPageToken": "qwerty"
})");
ASSERT_TRUE(raw_submissions);
const auto submissions =
StudentSubmissions::CreateFrom(raw_submissions.value());
ASSERT_TRUE(submissions);
EXPECT_EQ(submissions->next_page_token(), "qwerty");
}
TEST(ClassroomApiStudentSubmissionsResponseTypesTest,
DoesNotCrashOnUnexpectedResponse) {
const auto raw_submissions = JSONReader::Read(R"(
{
"studentSubmissions": [{"id": []}],
"nextPageToken": true
})");
ASSERT_TRUE(raw_submissions);
const auto submissions =
StudentSubmissions::CreateFrom(raw_submissions.value());
ASSERT_FALSE(submissions);
}
} // namespace google_apis::classroom