def test_get_detail_similar_resource_view_as_author_public_resource_used_twice(self):
     for tag in self.ws_resource.tags.all():
         self.acd_resource.tags.add(tag)
         self.lt_resource.tags.add(tag)
     self.acd_resource.save()
     self.lt_resource.save()
     self.ws_resource.access = ResourceAccess.PUBLIC.name
     self.ws_resource.save()
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:resource/detail/similar", kwargs={'slug': self.ws_resource.slug})
     )
     self.assertIn("view_similar_resource", self.ws_resource.get_user_perms(self.ws))
     self.assertEqual(200, response.status_code)
     resource = response.context.get('resource')
     self.assertEqual(resource, self.ws_resource)
     self.assertNotContains(response, "alert-no-similar-resource")
     self.assertContains(response, "similar-resources")
     page_obj = response.context.get('page_obj')
     self.assertIsNotNone(page_obj)
     self.assertEqual(2, len(page_obj.object_list))
 def test_get_detail_activity_view_registered_user_public_activity(self):
     self.ws_activity.resources.add(self.resource1)
     self.ws_activity.access = ActivityAccess.PUBLIC.name
     self.ws_activity.save()
     response = ClientFactory.get_client_for_user("acd").get(
         reverse("learning:activity/detail",
                 kwargs={'slug': self.ws_activity.slug}))
     self.assertIn("view_activity",
                   self.ws_activity.get_user_perms(self.acd))
     self.assertEqual(200, response.status_code)
     self.assertNotContains(response, "link-activity-usage")
     self.assertNotContains(response, "link-activity-similar")
     self.assertNotContains(response, "link-activity-add-resource")
     self.assertNotContains(response, "btn-change-activity")
     self.assertNotContains(response, "btn-delete-activity")
     self.assertNotContains(response, "activity-no-resource")
     activity = response.context.get('activity')
     self.assertContains(
         response, "resource-block-for-{}".format(self.resource1.slug))
     self.assertEqual(activity, self.ws_activity)
    def test_update_view_for_owner_but_not_objective_author_so_cant_change_ability(self):
        form_data = {
            'objective_pk': self.course_objective_not_author.id,
            'taxonomy_level': self.course_objective_not_author.taxonomy_level.name,
            'objective_reusable': False,
            'ability': 'Aahaha i am a little hacker'
        }
        form = BasicModelDetailObjectiveUpdateView.ObjectivePKForm(data=form_data)
        form_objective = CourseObjectiveUpdateForm(data=form_data)

        self.assertTrue(form.is_valid())
        self.assertTrue(form_objective.is_valid())
        response = ClientFactory.get_client_for_user("isaac-newton").post(
            reverse("learning:course/detail/objective/change", kwargs={'slug': self.public_course.slug}),
            form_data
        )
        self.assertEquals(response.status_code, 302)
        self.assertEquals(CourseObjective.objects.filter(objective=self.objective_1,
                                                         course=self.public_course).get().objective.ability,
                          self.course_objective_not_author.objective.ability)
 def test_post_attach_on_activity_view(self):
     self.assertIn("change_activity",
                   self.ws_activity.get_user_perms(self.ws))
     r1 = Resource.objects.create(name="A sample resource",
                                  author=self.acd,
                                  reuse=ResourceReuse.NO_RESTRICTION.name,
                                  language="en")
     self.assertTrue(r1.is_reusable(self.ws_activity))
     self.assertNotIn(r1, self.ws_activity.resources.all())
     response = ClientFactory.get_client_for_user("ws").post(
         reverse("learning:activity/detail/resource/attach",
                 kwargs={'slug': self.ws_activity.slug}),
         {'resource': r1.id})
     self.assertRedirects(response,
                          status_code=302,
                          target_status_code=200,
                          expected_url=reverse(
                              "learning:activity/detail/resource/attach",
                              kwargs={'slug': self.ws_activity.slug}))
     self.assertIn(r1, self.ws_activity.resources.all())
 def test_post_create_resource_on_activity_invalid_form(self):
     form_data = {
         'description': "A short description",
         'type': ResourceType.FILE.name,
         'language': 'fr',
         'licence': Licences.CC_BY.name,
         'access': ResourceAccess.PUBLIC.name,
         'reuse': ResourceReuse.NO_RESTRICTION.name,
         'duration': Duration.NOT_SPECIFIED.name,
         'tags': "A",
         "media": get_temporary_file(name="sample.txt")
     }
     response = ClientFactory.get_client_for_user("ws").post(
         reverse("learning:activity/detail/resource/add", kwargs={'slug': self.ws_activity.slug}), form_data
     )
     self.assertEqual(200, response.status_code)
     self.assertFalse(Resource.objects.filter(name="A sample name").exists())
     self.assertEqual(0, self.ws_activity.resources.count())
     self.assertEqual(1, len(response.context.get('form').errors.as_data()))
     self.assertEqual(0, self.ws_activity.resources.count())
 def test_post_unlink_on_activity_view(self):
     self.assertIn("change_activity",
                   self.ws_activity.get_user_perms(self.ws))
     r1 = Resource.objects.create(name="A sample resource", author=self.acd)
     self.ws_activity.resources.add(r1)
     self.assertIn(r1, self.ws_activity.resources.all())
     response = ClientFactory.get_client_for_user("ws").post(
         reverse(
             "learning:activity/detail/resource/unlink",
             kwargs={
                 'slug': self.ws_activity.slug,
             },
         ), {'resource': r1.id})
     self.assertRedirects(response,
                          status_code=302,
                          target_status_code=200,
                          expected_url=reverse(
                              "learning:activity/detail",
                              kwargs={'slug': self.ws_activity.slug}))
     self.assertNotIn(r1, self.ws_activity.resources.all())
Beispiel #7
0
    def test_update_post_resource_as_author_replace_media(self):
        filename = "sample_update_{date}.txt".format(
            date=datetime.now().timestamp())
        self.ws_resource.media.save(filename, get_temporary_file(), save=True)
        self.ws_resource.save()
        self.assertIsNotNone(self.ws_resource.media.name)
        self.assertIn("sample_update", self.ws_resource.media.name)
        self.assertTrue(
            os.path.isfile(os.path.join(settings.MEDIA_ROOT, filename)))

        temp_file = get_temporary_file(file_size=2**5)
        form_data = {
            'name': "A sample name that changed",
            'description': "A short description",
            'type': ResourceType.FILE.name,
            'language': 'fr',
            'licence': Licences.CC_BY.name,
            'access': ResourceAccess.PUBLIC.name,
            'reuse': ResourceReuse.ONLY_AUTHOR.name,
            'duration': Duration.NOT_SPECIFIED.name,
            "tags": "B",
            "media": temp_file
        }
        response = ClientFactory.get_client_for_user("ws").post(
            reverse("learning:resource/update",
                    kwargs={'slug': self.ws_resource.slug}), form_data)
        self.assertRedirects(response,
                             status_code=302,
                             target_status_code=200,
                             expected_url=reverse(
                                 "learning:resource/detail",
                                 kwargs={'slug':
                                         "a-sample-name-that-changed"}))
        resource = Resource.objects.get(pk=self.ws_resource.id)
        self.assertIsNotNone(resource.media.name)
        self.assertIn(os.path.basename(temp_file.name), resource.media.name)

        # Current file exists and previous has been removed
        self.assertTrue(os.path.isfile(resource.media.path))
        self.assertFalse(
            os.path.isfile(os.path.join(settings.MEDIA_ROOT, filename)))
 def test_get_detail_usage_resource_view_as_author_public_resource_used_twice(self):
     a1 = Activity.objects.create(author=self.ws, name="test1")
     a2 = Activity.objects.create(author=self.acd, name="test2")
     a1.resources.add(self.ws_resource)
     a2.resources.add(self.ws_resource)
     self.assertEqual(2, self.ws_resource.activities.count())
     self.ws_resource.access = ResourceAccess.PUBLIC.name
     self.ws_resource.save()
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:resource/detail/usage", kwargs={'slug': self.ws_resource.slug})
     )
     self.assertIn("view_usage_resource", self.ws_resource.get_user_perms(self.ws))
     self.assertEqual(200, response.status_code)
     resource = response.context.get('resource')
     self.assertEqual(resource, self.ws_resource)
     self.assertContains(response, "table-resource-usage")
     self.assertContains(response, "usage-activity-row", count=2)
     self.assertNotContains(response, "alert-not-used")
     page_obj = response.context.get('page_obj')
     self.assertIsNotNone(page_obj)
     self.assertEqual(2, len(page_obj.object_list))
 def test_get_detail_resource_view_as_author_private_resource(self):
     self.ws_resource.access = ResourceAccess.PRIVATE.name
     self.ws_resource.save()
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:resource/detail", kwargs={'slug': self.ws_resource.slug})
     )
     self.assertIn("view_resource", self.ws_resource.get_user_perms(self.ws))
     self.assertEqual(200, response.status_code)
     self.assertContains(response, "access-badge", count=1)
     self.assertContains(response, "reuse-badge", count=1)
     self.assertContains(response, "licence-badge", count=1)
     self.assertContains(response, "duration-badge", count=1)
     self.assertContains(response, "btn-edit-resource", count=1)
     self.assertContains(response, "btn-delete-resource", count=1)
     self.assertContains(response, "link-resource-detail", count=1)
     self.assertContains(response, "link-resource-usage", count=1)
     self.assertContains(response, "link-resource-similar", count=1)
     self.assertNotContains(response, "attachment-description")
     self.common_contains_resource_detail_view(response)
     resource = response.context.get('resource')
     self.assertEqual(resource, self.ws_resource)
 def test_get_detail_usage_activity_view_as_author_public_resource_used_twice(self):
     c1 = Course.objects.create(author=self.ws, name="test1")
     c2 = Course.objects.create(author=self.acd, name="test2")
     CourseActivity.objects.create(activity=self.ws_activity, rank=1, course=c1)
     CourseActivity.objects.create(activity=self.ws_activity, rank=1, course=c2)
     self.assertEqual(2, self.ws_activity.course_activities.count())
     self.ws_activity.access = ResourceAccess.PUBLIC.name
     self.ws_activity.save()
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:activity/detail/usage", kwargs={'slug': self.ws_activity.slug})
     )
     self.assertIn("view_usage_activity", self.ws_activity.get_user_perms(self.ws))
     self.assertEqual(200, response.status_code)
     activity = response.context.get('activity')
     self.assertEqual(activity, self.ws_activity)
     self.assertContains(response, "table-activity-usage")
     self.assertContains(response, "usage-activity-row", count=2)
     self.assertNotContains(response, "alert-not-used")
     page_obj = response.context.get('page_obj')
     self.assertIsNotNone(page_obj)
     self.assertEqual(2, len(page_obj.object_list))
 def test_get_detail_activity_view_as_author_private_resource_one_resource(self):
     self.ws_activity.resources.add(self.resource1)
     self.ws_activity.access = ActivityAccess.PRIVATE.name
     self.ws_activity.save()
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:activity/detail", kwargs={'slug': self.ws_activity.slug})
     )
     self.assertIn("view_activity", self.ws_activity.get_user_perms(self.ws))
     self.assertEqual(200, response.status_code)
     self.assertContains(response, "link-activity-usage", count=1)
     self.assertContains(response, "link-activity-similar", count=1)
     self.assertContains(response, "link-activity-add-resource", count=2)
     self.assertContains(response, "btn-change-activity", count=1)
     self.assertContains(response, "btn-delete-activity", count=1)
     self.assertNotContains(response, "activity-no-resource")
     self.assertContains(
         response, "add-resource-on-activity-{}".format(self.ws_activity.slug), count=3
     )
     activity = response.context.get('activity')
     self.assertContains(response, "resource-block-for-{}".format(self.resource1.slug))
     self.assertEqual(activity, self.ws_activity)
 def test_post_create_activity(self):
     form_data = {
         'name': "A sample name",
         'description': "A short description",
         'language': 'fr',
         'reuse': ActivityReuse.NO_RESTRICTION.name,
         'access': ActivityAccess.PUBLIC.name,
         'tags': "A",
     }
     response = ClientFactory.get_client_for_user("ws").post(
         reverse("learning:activity/add"), form_data)
     # Check redirection after resource creation
     self.assertRedirects(response,
                          status_code=302,
                          target_status_code=200,
                          expected_url=reverse(
                              "learning:activity/detail",
                              kwargs={'slug': "a-sample-name"}))
     # The author is the request sender
     resource = Activity.objects.get(pk=4)
     self.assertEqual(self.ws, resource.author)
 def test_post_attach_on_activity_view_already_linked(self):
     self.assertIn("change_activity",
                   self.ws_activity.get_user_perms(self.ws))
     r1 = Resource.objects.create(name="A sample resource",
                                  author=self.acd,
                                  language="en")
     r2 = Resource.objects.create(name="A sample resource 2",
                                  author=self.lt,
                                  language="en")
     self.ws_activity.resources.add(r1)
     self.assertIn(r1, self.ws_activity.resources.all())
     self.assertNotIn(r2, self.ws_activity.resources.all())
     response = ClientFactory.get_client_for_user("ws").post(
         reverse(
             "learning:activity/detail/resource/attach",
             kwargs={
                 'slug': self.ws_activity.slug,
             },
         ), {'resource': r1.id})
     self.assertEqual(302, response.status_code)
     self.assertIn(r1, self.ws_activity.resources.all())
     self.assertNotIn(r2, self.ws_activity.resources.all())
 def test_get_detail_similar_activity_view_as_author_public_activity_used_twice(self):
     self.ws_activity.tags.add("tag1")
     self.ws_activity.tags.add("tag2")
     for tag in self.ws_activity.tags.all():
         self.acd_activity.tags.add(tag)
         self.lt_activity.tags.add(tag)
     self.acd_activity.save()
     self.lt_activity.save()
     self.ws_activity.access = ActivityAccess.PUBLIC.name
     self.ws_activity.save()
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:activity/detail/similar", kwargs={'slug': self.ws_activity.slug})
     )
     self.assertIn("view_similar_activity", self.ws_activity.get_user_perms(self.ws))
     self.assertEqual(200, response.status_code)
     activity = response.context.get('activity')
     self.assertEqual(activity, self.ws_activity)
     self.assertNotContains(response, "alert-no-similar-activity")
     self.assertContains(response, "similar-activities")
     page_obj = response.context.get('page_obj')
     self.assertIsNotNone(page_obj)
     self.assertEqual(2, len(page_obj.object_list))
    def test_course_detail_objective_list_as_owner_but_not_as_objective_author(self):
        self.public_course.remove_objective(self.objective)
        self.public_course.add_objective(objective=self.objective_1,
                                         objective_reusable=True,
                                         taxonomy_level=TaxonomyLevel.EVALUATION
                                         )

        response = ClientFactory.get_client_for_user("isaac-newton").get(
            reverse("learning:course/detail", kwargs={'slug': self.public_course.slug}))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed("learning/detail.html")

        content = response.content.decode("utf-8")
        # Checking if table is here
        self.assertIn("table-object-objective-list", content)
        self.assert_basic_test_for_owner(content, self.objective_1)
        self.assertNotIn("author-of-objective-change-fields", content)

        # Check that user can't delete objective
        self.assertNotIn("form-delete-object-objective-{}".format(self.objective_1.slug), content)
        self.assertNotIn("objective-delete-{}-pk".format(self.objective_1.slug), content)
        self.assertNotIn("object-objective-{}-delete".format(self.objective_1.slug), content)
Beispiel #16
0
 def test_get_detail_resource_view_as_author_public_resource(self):
     self.ws_resource.access = ResourceAccess.PUBLIC.name
     self.ws_resource.media.save("sample_detail.txt",
                                 get_temporary_file("sample_detail.txt"),
                                 save=True)
     self.ws_resource.save()
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:resource/detail",
                 kwargs={'slug': self.ws_resource.slug}))
     self.assertIn("view_resource",
                   self.ws_resource.get_user_perms(self.ws))
     self.assertEqual(200, response.status_code)
     self.assertContains(response, "btn-edit-resource", count=1)
     self.assertContains(response, "btn-delete-resource", count=1)
     self.assertContains(response, "link-resource-detail", count=1)
     self.assertContains(response, "link-resource-usage", count=1)
     self.assertContains(response, "link-resource-similar", count=1)
     self.assertContains(response, "media-description")
     self.common_contains_resource_detail_view(response)
     resource = response.context.get('resource')
     self.assertEqual(resource, self.ws_resource)
     self.assertIsNotNone(resource.media.name)
     self.assertIn("sample_detail", resource.media.name)
 def test_update_get_activity_without_being_author_forbidden(self):
     response = ClientFactory.get_client_for_user("acd").get(
         reverse("learning:activity/update",
                 kwargs={'slug': self.ws_activity.slug}))
     self.assertEqual(403, response.status_code)
 def test_update_get_activity_as_author(self):
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:activity/update", kwargs={'slug': self.ws_activity.slug})
     )
     self.assertEqual(200, response.status_code)
     self.assertTemplateUsed(response, "learning/activity/details/change.html")
 def test_attach_on_activity_no_perm(self):
     self.assertNotIn("change_activity", self.ws_activity.get_user_perms(self.acd))
     response = ClientFactory.get_client_for_user("acd").get(
         reverse("learning:activity/detail/resource/attach", kwargs={'slug': self.ws_activity.slug})
     )
     self.assertEqual(403, response.status_code)
 def test_post_detail_resource_view_method_not_allowed(self):
     response = ClientFactory.get_client_for_user("ws").post(
         reverse("learning:resource/detail", kwargs={'slug': self.ws_resource.slug})
     )
     self.assertEqual(405, response.status_code)
 def test_get_create_activity_view(self):
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:activity/add"))
     self.assertEqual(200, response.status_code)
     self.assertTemplateUsed(response, "learning/activity/add.html")
 def test_delete_resource_get_as_author(self):
     response = ClientFactory.get_client_for_user("ws").get(
         reverse("learning:resource/delete", kwargs={'slug': self.ws_resource.slug})
     )
     self.assertEqual(200, response.status_code)
     self.assertTemplateUsed(response, "learning/resource/delete.html")
 def test_delete_resource_post_without_being_author_forbidden(self):
     response = ClientFactory.get_client_for_user("acd").post(
         reverse("learning:resource/delete", kwargs={'slug': self.ws_resource.slug})
     )
     self.assertEqual(403, response.status_code)
 def test_post_create_resource_error_missing_all_fields(self):
     response = ClientFactory.get_client_for_user("ws").post(reverse("learning:resource/add"))
     self.assertEqual(200, response.status_code)
     self.assertTemplateUsed(response, "learning/resource/add.html")
     self.assertContains(response, "is-invalid", count=9)
 def test_get_create_resource_view(self):
     response = ClientFactory.get_client_for_user("ws").get(reverse("learning:resource/add"))
     self.assertEqual(200, response.status_code)
     self.assertTemplateUsed(response, "learning/resource/add.html")
     self.assertContains(response, """id="resource_add_form" enctype=\"multipart/form-data\"""")
 def test_teacher_progression_for_student(self):
     response = ClientFactory.get_client_for_user("louis-xiv").get(
         reverse("learning:course/detail/progression/teacher", kwargs={'slug': self.public_course.slug}))
     self.assertEquals(response.status_code, 403)
 def test_post_detail_similar_activity_view_method_not_allowed(self):
     response = ClientFactory.get_client_for_user("ws").post(
         reverse("learning:activity/detail/similar",
                 kwargs={'slug': self.ws_activity.slug}))
     self.assertEqual(405, response.status_code)
Beispiel #28
0
 def test_btn_new_question_in_agora_page(self):
     response = ClientFactory.get_client_for_user("ws").get(reverse("learning:course/detail/agora", kwargs={'slug': self.public_course.slug}))
     self.assertEqual(response.status_code, 200)
     self.assertTemplateUsed(response, "learning/course/details/agora/agora.html")
     content = response.content.decode("utf-8")
     self.assertIn("btn-new-question", content)
 def test_student_progression_for_author(self):
     response = ClientFactory.get_client_for_user("isaac-newton").get(
         reverse("learning:course/detail/progression/student", kwargs={'slug': self.public_course.slug}))
     self.assertEquals(response.status_code, 200)
Beispiel #30
0
 def test_btn_new_question_on_course(self):
     response = ClientFactory.get_client_for_user("ws").get(reverse("learning:course/detail", kwargs={'slug': self.public_course.slug}))
     content = response.content.decode("utf-8")
     self.assertTemplateUsed(response, "learning/course/detail.html")
     self.assertIn("btn-new-question", content)