def test_moderation_another_class(self):
        email, password = signup_teacher_directly()

        email2, _ = signup_teacher_directly()
        klass2, _, access_code = create_class_directly(email2)

        student_name, _, student = create_school_student_directly(access_code)

        self.login(email, password)
        response = self.students_of_class(klass2)
        assert_that(response.status_code, equal_to(404))
        assert_that(response.content, empty)
Beispiel #2
0
    def test_level_episode_on_delete(self):
        """
        Given a level and an episode where the level is in the episode,
        When anyone tries to delete the episode,
        Then a ProtectedError is raised and the episode isn't deleted.
        """
        teacher_email, teacher_password = signup_teacher_directly()
        teacher = Teacher.objects.get(new_user__email=teacher_email)

        level_id = create_save_level(teacher)
        level = Level.objects.get(id=level_id)

        episode_id = create_episode()
        episode = Episode.objects.get(id=episode_id)

        assert level.episode is None
        assert len(episode.levels) == 0

        level.episode = episode
        level.save()

        assert len(episode.levels) == 1

        with pytest.raises(ProtectedError):
            episode.delete()
Beispiel #3
0
    def test_level_next_level_on_delete(self):
        """
        Given two levels level1 and level2 where level2 is level1's next level,
        When level2 is deleted,
        Then level1's next_level field is set to null.
        """
        teacher_email, teacher_password = signup_teacher_directly()

        teacher = Teacher.objects.get(new_user__email=teacher_email)

        level1_id = create_save_level(teacher)
        level2_id = create_save_level(teacher)

        level1 = Level.objects.get(id=level1_id)
        level2 = Level.objects.get(id=level2_id)

        assert level1.next_level is None
        assert level2.next_level is None

        level1.next_level = level2
        level1.save()

        level2.delete()

        level1 = Level.objects.get(id=level1_id)

        assert level1.next_level is None
    def test_level_sharing_with_school(self):
        email1, password1 = signup_teacher_directly()
        email2, _ = signup_teacher_directly()

        teacher1 = Teacher.objects.get(new_user__email=email1)
        teacher2 = Teacher.objects.get(new_user__email=email2)

        self.login(email1, password1)
        level_id = create_save_level(teacher1)

        school1 = create_school()
        add_teacher_to_school(teacher1, school1)
        add_teacher_to_school(teacher2, school1)

        sharing_info1 = json.loads(
            self.get_sharing_information(level_id).getvalue())
        assert_that(len(sharing_info1["teachers"]), equal_to(1))
    def test_anonymous_level_saving_school_student(self):
        email, password = signup_teacher_directly()
        create_organisation_directly(email)
        _, class_name, access_code = create_class_directly(email)
        student_name, student_password, _ = create_school_student_directly(
            access_code)

        self.student_login(student_name, access_code, student_password)
        url = reverse("save_level_for_editor")
        data1 = {
            u"origin":
            u'{"coordinate":[3,5],"direction":"S"}',
            u"pythonEnabled":
            False,
            u"decor": [],
            u"blocklyEnabled":
            True,
            u"blocks": [
                {
                    u"type": u"move_forwards"
                },
                {
                    u"type": u"turn_left"
                },
                {
                    u"type": u"turn_right"
                },
            ],
            u"max_fuel":
            u"50",
            u"pythonViewEnabled":
            False,
            u"character":
            u"3",
            u"name":
            u"abc",
            u"theme":
            1,
            u"anonymous":
            True,
            u"cows":
            u"[]",
            u"path":
            u'[{"coordinate":[3,5],"connectedNodes":[1]},{"coordinate":[3,4],'
            u'"connectedNodes":[0]}]',
            u"traffic_lights":
            u"[]",
            u"destinations":
            u"[[3,4]]",
        }
        response = self.client.post(url, {"data": json.dumps(data1)})

        assert_that(response.status_code, equal_to(200))
        sharing_info1 = json.loads(
            self.get_sharing_information(json.loads(
                response.content)["id"]).getvalue())
        assert_that(sharing_info1["teacher"]["shared"], equal_to(True))
        assert_that(len(mail.outbox), equal_to(0))
def set_up_data(classmates_data_viewable=False):
    email, password = signup_teacher_directly()
    clas, class_name, access_code = create_class_directly(email)
    if classmates_data_viewable:
        clas.classmates_data_viewable = True
        clas.save()
    _, _, student = create_school_student_directly(access_code)
    _, _, student2 = create_school_student_directly(access_code)
    create_random_school_data()
    return clas, student, student2
 def test_scoreboard_loads(self):
     email, password = signup_teacher_directly()
     create_organisation_directly(email)
     klass, name, access_code = create_class_directly(email)
     create_school_student_directly(access_code)
     url = reverse("scoreboard")
     c = Client()
     c.login(username=email, password=password)
     response = c.get(url)
     self.assertEqual(200, response.status_code)
    def test_level_loading(self):
        email1, password1 = signup_teacher_directly()

        teacher1 = Teacher.objects.get(new_user__email=email1)

        self.login(email1, password1)
        level_id = create_save_level(teacher1)
        url = reverse("load_level_for_editor", kwargs={"levelID": level_id})
        response = self.client.get(url)

        assert_that(response.status_code, equal_to(200))
    def test_level_can_only_be_shared_by_owner(self):
        email1, password1 = signup_teacher_directly()
        email2, password2 = signup_teacher_directly()

        teacher1 = Teacher.objects.get(new_user__email=email1)
        teacher2 = Teacher.objects.get(new_user__email=email2)

        self.login(email1, password1)
        level_id = create_save_level(teacher1)

        school1 = create_school()
        add_teacher_to_school(teacher1, school1)

        self.logout()
        self.login(email2, password2)

        url = reverse("share_level_for_editor", args=[level_id])
        data = {u"recipientIDs[]": [teacher2.id], u"action": ["share"]}
        response = self.client.post(url, {"data": data})

        assert_that(response.status_code, equal_to(403))
    def test_moderation_teachers_class(self):
        email, password = signup_teacher_directly()
        klass, name, access_code = create_class_directly(email)

        student_name, _, student = create_school_student_directly(access_code)

        self.login(email, password)
        response = self.students_of_class(klass)
        assert_that(response.status_code, equal_to(200))
        assert_that(
            response.content.decode(),
            equal_to('{"%s": "%s"}' % (student.id, student_name)),
        )
Beispiel #11
0
    def login_once(self):
        if not BaseGameTest.already_logged_on:
            email, password = signup_teacher_directly()
            create_organisation_directly(email)
            klass, name, access_code = create_class_directly(email)
            create_school_student_directly(access_code)
            login_page = self.go_to_homepage().go_to_teacher_login_page()
            login_page.login(email, password)
            email = email
            BaseGameTest.user_profile = UserProfile.objects.get(user__email=email)

            BaseGameTest.already_logged_on = True

        return BaseGameTest.user_profile
Beispiel #12
0
    def student_row(self, class_name=None):
        email, password = signup_teacher_directly()
        _, class_name, access_code = create_class_directly(email, class_name)
        _, _, student = create_school_student_directly(access_code)

        total_time = timedelta(0, 30)
        scores = [x for x in range(20)]
        total_score = sum(scores)
        progress = (0, 0, 0)

        all_scores = scores + [""] * 89

        row = StudentRow(
            student=student,
            total_time=total_time,
            total_score=total_score,
            start_time=datetime.fromtimestamp(1435305072, tz=utc),
            finish_time=datetime.fromtimestamp(1438305072, tz=utc),
            progress=progress,
            scores=all_scores,
            class_field=Class(name="MyClass"),
        )
        return row
Beispiel #13
0
def teacher1_email(db) -> str:
    email, _ = signup_teacher_directly()
    return email
Beispiel #14
0
def create_random_school_data():
    email, password = signup_teacher_directly()
    clas, class_name, access_code = create_class_directly(email)
    create_school_student_directly(access_code)
    create_school_student_directly(access_code)