Exemple #1
0
    def test_update_reference_in_string(self):
        old_asset = AssetFactory(course=self.sample_course, author=self.student_one)
        old_note = SherdNoteFactory(asset=old_asset, author=self.student_one, title="Selection", range1=43, range2=75)
        alt_note = SherdNoteFactory(
            asset=old_asset, author=self.student_one, title="Alt Selection", range1=43, range2=75
        )

        new_asset = AssetFactory(course=self.sample_course, author=self.student_one)
        new_note = SherdNoteFactory(asset=new_asset, author=self.student_one, title="Selection", range1=43, range2=75)

        text = (
            '<p><a href="/asset/%s/annotations/%s/">Selection</a>'
            '</p><p><a href="/asset/%s/annotations/%s/">Selection</a>'
            '</p><p><a href="/asset/%s/annotations/%s/">Alt Selection</a>'
            '</p><a href="/asset/%s/">Global</a></p>'
            % (old_asset.id, old_note.id, old_asset.id, old_note.id, old_asset.id, alt_note.id, old_asset.id)
        )

        new_text = new_note.update_references_in_string(text, old_note)

        citations = SherdNote.objects.references_in_string(new_text, old_note.author)
        self.assertEquals(len(citations), 4)
        self.assertEquals(citations[0].id, new_note.id)
        self.assertEquals(citations[0].asset.id, new_note.asset.id)

        self.assertEquals(citations[1].id, new_note.id)
        self.assertEquals(citations[1].asset.id, new_note.asset.id)

        self.assertEquals(citations[2].id, alt_note.id)
        self.assertEquals(citations[2].asset.id, old_asset.id)

        gann = old_asset.global_annotation(self.student_one, auto_create=False)
        self.assertEquals(citations[3].id, gann.id)
        self.assertEquals(citations[3].asset.id, old_asset.id)
    def setUp(self):
        self.setup_sample_course()

        self.assignment = ProjectFactory.create(
            course=self.sample_course, author=self.instructor_one,
            policy=PUBLISH_WHOLE_CLASS[0],
            project_type='selection-assignment')

        self.asset = AssetFactory.create(course=self.sample_course,
                                         primary_source='image')
        self.assets = Asset.objects.filter(id=self.asset.id)

        AssignmentItemFactory.create(project=self.assignment, asset=self.asset)

        self.response_one = ProjectFactory.create(
            course=self.sample_course, author=self.student_one,
            policy='PrivateEditorsAreOwners', parent=self.assignment)
        self.note_one = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            body='student one selection note', range1=0, range2=1)
        ProjectNoteFactory(project=self.response_one, annotation=self.note_one)

        self.response_two = ProjectFactory.create(
            course=self.sample_course, author=self.student_two,
            policy='PrivateEditorsAreOwners', parent=self.assignment)
        self.note_two = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            body='student one selection note', range1=0, range2=1)
        ProjectNoteFactory(project=self.response_two, annotation=self.note_two)

        self.mixin = RestrictedMaterialsMixin()
        self.mixin.request = RequestFactory().get('/')
        self.mixin.request.course = self.sample_course
Exemple #3
0
    def test_get_selection(self):
        asset = AssetFactory.create(course=self.sample_course,
                                    primary_source='image',
                                    author=self.instructor_one)
        gann = SherdNoteFactory(asset=asset,
                                author=self.instructor_one,
                                title=None,
                                range1=None,
                                range2=None)
        note = SherdNoteFactory(asset=asset,
                                author=self.instructor_one,
                                title='Selection')

        view = AssetEmbedListView()

        keys = ['foo-1234']
        self.assertIsNone(view.get_selection(keys, self.instructor_one))

        with self.assertRaises(Http404):
            keys = ['item-666']
            view.get_selection(keys, self.instructor_one)

        with self.assertRaises(Http404):
            keys = ['selection-666']
            view.get_selection(keys, self.instructor_one)

        keys = ['item-%s' % asset.id]
        view = AssetEmbedListView()
        self.assertEquals(view.get_selection(keys, self.instructor_one), gann)

        keys = ['selection-%s' % note.id]
        view = AssetEmbedListView()
        self.assertEquals(view.get_selection(keys, self.instructor_one), note)
Exemple #4
0
    def setUp(self):
        self.setup_sample_course()

        self.assignment1 = ProjectFactory.create(
            title='Alpha', course=self.sample_course,
            author=self.instructor_one, policy='CourseProtected',
            project_type='assignment')

        self.response1 = ProjectFactory.create(
            title="Response 1",
            course=self.sample_course, author=self.student_one,
            policy='InstructorShared', parent=self.assignment1)

        self.asset = AssetFactory(course=self.sample_course)
        SherdNote.objects.global_annotation(
            self.asset, self.student_one, auto_create=True)
        self.student_one_selection1 = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_selection',
            title="Selection", range1=116.25, range2=6.75)
        self.student_one_selection2 = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            title="Selection", range1=116.25, range2=6.75)
        self.student_two_selection = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            title="Selection", range1=16.25, range2=2.75)

        self.add_citation(self.response1, self.student_one_selection1)
        self.add_citation(self.response1, self.student_two_selection)
    def test_create_with_track_elements_with_large_decimals(self):
        course = CourseFactory()
        note = SherdNoteFactory()
        note2 = SherdNoteFactory()
        project = ProjectFactory()
        r = self.client.post(
            reverse('sequenceasset-list'),
            {
                'course': course.pk,
                'spine': note.pk,
                'project': project.pk,
                'media_elements': [
                    {
                        'media': note2.pk,
                        'start_time': Decimal('0.9999999999992222'),
                        'end_time': Decimal('10.15955395959359395'),
                    }
                ],
                'text_elements': [
                    {
                        'text': 'My text',
                        'start_time': Decimal('0.19898591249142984912849218'),
                        'end_time': Decimal('10.853598923859285928598958392'),
                    },
                    {
                        'text': 'My text 2',
                        'start_time': Decimal('11'),
                        'end_time': Decimal('148744.835739573575'),
                    },
                ]
            }, format='json')

        self.assertEqual(r.status_code, 201)

        sa = SequenceAsset.objects.first()
        self.assertEqual(sa.course, sa.course)
        self.assertEqual(sa.author, self.u)
        self.assertEqual(sa.spine, note)

        self.assertEqual(ProjectSequenceAsset.objects.count(), 1)
        psa = ProjectSequenceAsset.objects.first()
        self.assertEqual(psa.sequence_asset, sa)
        self.assertEqual(psa.project, project)

        self.assertEqual(SequenceTextElement.objects.count(), 2)
        e0 = SequenceTextElement.objects.first()
        e1 = SequenceTextElement.objects.last()
        self.assertEqual(e0.text, 'My text')
        self.assertEqual(e0.start_time, Decimal('0.19899'))
        self.assertEqual(e0.end_time, Decimal('10.85360'))
        self.assertEqual(e1.text, 'My text 2')
        self.assertEqual(e1.start_time, Decimal('11'))
        self.assertEqual(e1.end_time, Decimal('148744.83574'))

        self.assertEqual(SequenceMediaElement.objects.count(), 1)
        e0 = SequenceMediaElement.objects.first()
        self.assertEqual(e0.media, note2)
        self.assertEqual(e0.start_time, Decimal('1.00000'))
        self.assertEqual(e0.end_time, Decimal('10.15955'))
Exemple #6
0
    def setUp(self):
        self.setup_sample_course()

        self.asset1 = AssetFactory(course=self.sample_course)
        global_annotation, created = SherdNote.objects.global_annotation(
            self.asset1, self.student_three, auto_create=True
        )
        self.assertTrue(global_annotation.is_global_annotation())

        whole_item_annotation = SherdNoteFactory(
            asset=self.asset1, author=self.student_three, title="Whole Item Selection", range1=0, range2=0
        )
        self.assertFalse(whole_item_annotation.is_global_annotation())

        real_annotation = SherdNoteFactory(
            asset=self.asset1, author=self.student_three, title="Selection", range1=116.25, range2=6.75
        )
        self.assertFalse(real_annotation.is_global_annotation())

        self.assignment1 = ProjectFactory.create(
            title="Alpha",
            course=self.sample_course,
            author=self.instructor_one,
            policy="CourseProtected",
            project_type="assignment",
        )

        self.response1 = ProjectFactory.create(
            title="Response 1",
            course=self.sample_course,
            author=self.student_one,
            policy="InstructorShared",
            parent=self.assignment1,
        )
        self.response2 = ProjectFactory.create(
            title="Response 2",
            date_submitted=datetime.now(),
            course=self.sample_course,
            author=self.student_two,
            policy="InstructorShared",
            parent=self.assignment1,
        )

        self.assignment2 = ProjectFactory.create(
            title="Beta",
            course=self.sample_course,
            author=self.instructor_one,
            policy="CourseProtected",
            project_type="assignment",
        )

        self.project = ProjectFactory(
            title="Gamma", course=self.sample_course, author=self.instructor_one, policy="CourseProtected"
        )

        self.add_citation(self.project, global_annotation)
        self.add_citation(self.project, whole_item_annotation)
        self.add_citation(self.project, real_annotation)
Exemple #7
0
    def setUp(self):
        self.setup_sample_course()
        self.setup_alternate_course()

        taxonomy = {
            'Shapes': ['Square', 'Triangle'],
            'Colors': ['Red', 'Blue', 'Green']
        }
        self.create_vocabularies(self.sample_course, taxonomy)

        taxonomy = {'Materials': ['Paper', 'Wood', 'Stone']}
        self.create_vocabularies(self.alt_course, taxonomy)

        asset = AssetFactory(course=self.sample_course,
                             author=self.student_one,
                             title="Asset One")

        # instructor_one in Sample Course
        note = SherdNoteFactory(asset=asset,
                                author=self.student_three,
                                title="Nice Tie",
                                tags=',student_three_selection',
                                body='student three selection note',
                                range1=0,
                                range2=1)
        term = Term.objects.get(name="square")
        self.create_term_relationship(note, term)

        note = SherdNoteFactory(asset=asset,
                                author=self.instructor_one,
                                title="Left Corner",
                                tags=',instructor_one_selection',
                                body='instructor one selection note',
                                range1=0,
                                range2=1)
        term = Term.objects.get(name="square")
        self.create_term_relationship(note, term)
        term = Term.objects.get(name="red")
        self.create_term_relationship(note, term)

        # alt_student in Alternate Course
        asset = AssetFactory(course=self.alt_course,
                             author=self.alt_student,
                             title="Asset Two")
        note = SherdNoteFactory(asset=asset,
                                author=self.student_two,
                                title="Whole Item Selection",
                                tags=',alt_student_selection',
                                body='alt student selection note',
                                range1=0,
                                range2=1)
        term = Term.objects.get(name="paper")
        self.create_term_relationship(note, term)
Exemple #8
0
    def setUp(self):
        self.setup_sample_course()

        self.assignment = ProjectFactory.create(
            course=self.sample_course,
            author=self.instructor_one,
            policy='CourseProtected',
            project_type='selection-assignment')

        self.asset = AssetFactory.create(course=self.sample_course,
                                         primary_source='image')
        AssignmentItemFactory.create(project=self.assignment, asset=self.asset)

        self.response_one = ProjectFactory.create(
            course=self.sample_course,
            author=self.student_one,
            title="Student One Response",
            policy='PrivateEditorsAreOwners',
            parent=self.assignment)
        self.note_one = SherdNoteFactory(asset=self.asset,
                                         author=self.student_one,
                                         body='student one selection note',
                                         range1=0,
                                         range2=1)
        ProjectNoteFactory(project=self.response_one, annotation=self.note_one)

        self.response_two = ProjectFactory.create(
            course=self.sample_course,
            author=self.student_two,
            policy='PrivateEditorsAreOwners',
            parent=self.assignment)
        self.note_two = SherdNoteFactory(asset=self.asset,
                                         author=self.student_two,
                                         title="Student One Response",
                                         body='student two selection note',
                                         range1=0,
                                         range2=1)
        ProjectNoteFactory(project=self.response_two, annotation=self.note_two)

        ProjectFactory.create(course=self.sample_course,
                              author=self.student_three,
                              policy='CourseProtected',
                              parent=self.assignment,
                              date_submitted=datetime.now())

        url = reverse('project-item-view',
                      args=[self.assignment.id, self.asset.id])
        self.view = ProjectItemView()
        self.view.request = RequestFactory().get(url)
        self.view.request.course = self.sample_course
Exemple #9
0
    def test_is_global_annotation(self):
        asset = AssetFactory(course=self.sample_course)
        global_annotation, created = SherdNote.objects.global_annotation(
            asset, self.student_three, auto_create=True)
        self.assertTrue(global_annotation.is_global_annotation())

        whole_item_annotation = SherdNoteFactory(
            asset=asset, author=self.student_three,
            title="Whole Item Selection", range1=0, range2=0)
        self.assertFalse(whole_item_annotation.is_global_annotation())

        real_annotation = SherdNoteFactory(
            asset=asset, author=self.student_three,
            title="Selection", range1=116.25, range2=6.75)
        self.assertFalse(real_annotation.is_global_annotation())
    def test_create_without_spine_with_track_elements(self):
        course = CourseFactory()
        project = ProjectFactory()
        note = SherdNoteFactory()
        r = self.client.post(
            reverse('sequenceasset-list'),
            {
                'course': course.pk,
                'spine': '',
                'project': project.pk,
                'media_elements': [
                    {
                        'media': note.pk,
                        'start_time': Decimal('0'),
                        'end_time': Decimal('10'),
                    }
                ],
                'text_elements': [
                    {
                        'text': 'My text',
                        'start_time': Decimal('0'),
                        'end_time': Decimal('10'),
                    }
                ]
            }, format='json')

        self.assertEqual(
            r.status_code, 400,
            'Attempting to create a SequenceAsset without a spine but '
            'with track elements should be invalid.')
Exemple #11
0
    def test_copy_annotation(self):
        asset = AssetFactory(course=self.sample_course, primary_source='image')

        self.assertIsNone(asset.global_annotation(self.student_two, False))

        note = SherdNoteFactory(asset=asset,
                                author=self.student_one,
                                title='Sample Note',
                                annotation_data='{1:2}',
                                body='student one notes',
                                tags=',student_one_selection',
                                range1=0,
                                range2=1)

        params = {'asset_id': asset.id, 'annotation_id': note.id}

        url = reverse('annotation-copy-view', args=[asset.id, note.id])
        self.client.login(username=self.student_two.username, password='******')
        response = self.client.post(url,
                                    params,
                                    HTTP_X_REQUESTED_WITH='XMLHttpRequest')
        the_json = loads(response.content)

        self.assertEquals(the_json['asset']['id'], asset.id)
        self.assertNotEquals(the_json['annotation']['id'], note.id)

        self.assertEquals(response.status_code, 200)
        note = SherdNote.objects.get(author=self.student_two,
                                     title=note.title,
                                     range1=note.range1,
                                     range2=note.range2,
                                     annotation_data=note.annotation_data)
        self.assertEquals(note.tags, '')
        self.assertIsNone(note.body)
        self.assertIsNotNone(asset.global_annotation(self.student_two, False))
    def test_update_someone_elses_sequence_asset(self):
        someone_else = UserFactory()
        sa = SequenceAssetFactory(author=someone_else)
        psa = ProjectSequenceAssetFactory(sequence_asset=sa)
        note = SherdNoteFactory()
        r = self.client.put(
            reverse('sequenceasset-detail', args=(sa.pk,)),
            {
                'course': sa.course.pk,
                'project': psa.project.pk,
                'spine': note.pk,
                'spine_volume': 100,
                'media_elements': [],
                'text_elements': [
                    {
                        'text': 'My text',
                        'start_time': Decimal('0'),
                        'end_time': Decimal('10'),
                    }
                ],
            }, format='json')

        self.assertEqual(r.status_code, 403)

        sa.refresh_from_db()
        self.assertEqual(sa.course, sa.course)
        self.assertEqual(sa.author, someone_else)
        self.assertEqual(sa.spine, None)
        self.assertEqual(sa.spine_volume, 80)
        self.assertEqual(SequenceAsset.objects.count(), 1)
        self.assertEqual(ProjectSequenceAsset.objects.count(), 1)
        self.assertEqual(SequenceTextElement.objects.count(), 0)
Exemple #13
0
    def test_asset_title_save_as_author_global_annotation(self):
        asset1 = AssetFactory.create(course=self.sample_course,
                                     primary_source='image',
                                     title="Item Title",
                                     author=self.instructor_one)

        gann = SherdNoteFactory(asset=asset1,
                                author=self.instructor_one,
                                title=None,
                                range1=None,
                                range2=None)

        self.assert_(
            self.client.login(username=self.instructor_one.username,
                              password="******"))
        self.switch_course(self.client, self.sample_course)

        # Update passing in a non-global annotation. This should fail
        post_data = {'asset-title': "Updated Item Title"}
        url = "/asset/save/%s/annotations/%s/" % (asset1.id, gann.id)
        response = self.client.post(url,
                                    post_data,
                                    HTTP_X_REQUESTED_WITH='XMLHttpRequest')
        self.assertEquals(response.status_code, 200)
        asset = Asset.objects.get(id=asset1.id)
        self.assertEquals(asset.title, "Updated Item Title")
    def test_create(self):
        course = CourseFactory()
        note = SherdNoteFactory()
        project = ProjectFactory()
        r = self.client.post(
            reverse('sequenceasset-list'),
            {
                'course': course.pk,
                'spine': note.pk,
                'project': project.pk,
                'media_elements': [],
                'text_elements': [],
            }, format='json')

        self.assertEqual(r.status_code, 201)

        sa = SequenceAsset.objects.first()
        self.assertEqual(sa.course, sa.course)
        self.assertEqual(sa.author, self.u)
        self.assertEqual(sa.spine, note)

        self.assertEqual(ProjectSequenceAsset.objects.count(), 1)
        psa = ProjectSequenceAsset.objects.first()
        self.assertEqual(psa.sequence_asset, sa)
        self.assertEqual(psa.project, project)
Exemple #15
0
    def setUp(self):
        super(self.__class__, self).setUp()

        self.asset = AssetFactory(course=self.sample_course,
                                  author=self.student_one)

        self.ga1 = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_item', title=None, range1=None, range2=None)
        self.assertTrue(self.ga1.is_global_annotation())
        self.note1 = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_selection', range1=0, range2=1)

        self.ga2 = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            tags=',student_two_item', title=None, range1=None, range2=None)
        self.note2 = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            tags=',student_two_selection', range1=0, range2=1)

        self.ga3 = SherdNoteFactory(
            asset=self.asset, author=self.instructor_one,
            tags=',instructor_one_item', title=None, range1=None, range2=None)
        self.note3 = SherdNoteFactory(
            asset=self.asset, author=self.instructor_one,
            tags=',image,instructor_one_selection,', range1=0, range2=1)
Exemple #16
0
    def setUp(self):
        self.setup_sample_course()

        self.asset = AssetFactory(course=self.sample_course,
                                  author=self.student_one,
                                  primary_source='image',)

        self.student_one_ga = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_item', title=None, range1=None, range2=None)
        self.assertTrue(self.student_one_ga.is_global_annotation())
        self.student_one_note = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_selection', range1=0, range2=1)

        self.student_two_ga = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            tags=',student_two_item', title=None, range1=None, range2=None)
        self.student_two_note = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            tags=',student_two_selection', range1=0, range2=1)

        self.instructor_one_ga = SherdNoteFactory(
            asset=self.asset, author=self.instructor_one,
            tags=',instructor_one_item', title=None, range1=None, range2=None)
        self.instructor_one_note = SherdNoteFactory(
            asset=self.asset, author=self.instructor_one,
            tags=',image,instructor_one_selection,', range1=0, range2=1)
Exemple #17
0
    def setUp(self):
        self.setup_sample_course()
        asset = AssetFactory(author=self.student_one,
                             primary_source='image',
                             course=self.sample_course)

        self.note1 = SherdNoteFactory(asset=asset,
                                      author=self.student_one,
                                      title='one',
                                      range1=116.25,
                                      range2=6.75)

        self.note2 = SherdNoteFactory(asset=asset,
                                      author=self.student_one,
                                      title='two',
                                      range1=116.25,
                                      range2=6.75)
Exemple #18
0
    def test_update_reference_in_string(self):
        old_asset = AssetFactory(course=self.sample_course,
                                 author=self.student_one)
        old_note = SherdNoteFactory(asset=old_asset,
                                    author=self.student_one,
                                    title="Selection",
                                    range1=43,
                                    range2=75)
        alt_note = SherdNoteFactory(asset=old_asset,
                                    author=self.student_one,
                                    title="Alt Selection",
                                    range1=43,
                                    range2=75)

        new_asset = AssetFactory(course=self.sample_course,
                                 author=self.student_one)
        new_note = SherdNoteFactory(asset=new_asset,
                                    author=self.student_one,
                                    title="Selection",
                                    range1=43,
                                    range2=75)

        text = ('<p><a href="/asset/%s/annotations/%s/">Selection</a>'
                '</p><p><a href="/asset/%s/annotations/%s/">Selection</a>'
                '</p><p><a href="/asset/%s/annotations/%s/">Alt Selection</a>'
                '</p><a href="/asset/%s/">Global</a></p>' %
                (old_asset.id, old_note.id, old_asset.id, old_note.id,
                 old_asset.id, alt_note.id, old_asset.id))

        new_text = new_note.update_references_in_string(text, old_note)

        citations = SherdNote.objects.references_in_string(
            new_text, old_note.author)
        self.assertEquals(len(citations), 4)
        self.assertEquals(citations[0].id, new_note.id)
        self.assertEquals(citations[0].asset.id, new_note.asset.id)

        self.assertEquals(citations[1].id, new_note.id)
        self.assertEquals(citations[1].asset.id, new_note.asset.id)

        self.assertEquals(citations[2].id, alt_note.id)
        self.assertEquals(citations[2].asset.id, old_asset.id)

        gann = old_asset.global_annotation(self.student_one, auto_create=False)
        self.assertEquals(citations[3].id, gann.id)
        self.assertEquals(citations[3].asset.id, old_asset.id)
    def test_create_duplicate(self):
        course = CourseFactory()
        note = SherdNoteFactory()
        project = ProjectFactory()
        r = self.client.post(
            reverse('sequenceasset-list'),
            {
                'course': course.pk,
                'spine': note.pk,
                'project': project.pk,
                'media_elements': [
                ],
                'text_elements': [
                    {
                        'text': 'My text',
                        'start_time': Decimal('0'),
                        'end_time': Decimal('10'),
                    }
                ]
            }, format='json')

        self.assertEqual(r.status_code, 201)

        sa = SequenceAsset.objects.first()
        self.assertEqual(sa.course, sa.course)
        self.assertEqual(sa.author, self.u)
        self.assertEqual(sa.spine, note)

        self.assertEqual(ProjectSequenceAsset.objects.count(), 1)
        psa = ProjectSequenceAsset.objects.first()
        self.assertEqual(psa.sequence_asset, sa)
        self.assertEqual(psa.project, project)

        self.assertEqual(SequenceTextElement.objects.count(), 1)

        r = self.client.post(
            reverse('sequenceasset-list'),
            {
                'course': course.pk,
                'spine': note.pk,
                'project': project.pk,
                'media_elements': [
                ],
                'text_elements': [
                    {
                        'text': 'My text',
                        'start_time': Decimal('0'),
                        'end_time': Decimal('10'),
                    }
                ]
            }, format='json')

        self.assertEqual(
            r.status_code, 400,
            'Creating two SequenceAssets for the same combination '
            'of author / project should be invalid.')
        self.assertEqual(SequenceAsset.objects.count(), 1)
Exemple #20
0
    def test_get(self):
        asset = AssetFactory(course=self.sample_course, primary_source='image')
        SherdNoteFactory(asset=asset,
                         author=self.student_one,
                         tags=',student_one_selection',
                         range1=0,
                         range2=1)
        SherdNoteFactory(asset=asset,
                         author=self.student_one,
                         tags=',student_one_item',
                         title=None,
                         range1=None,
                         range2=None)

        url = reverse('asset-references', args=[asset.id])

        # anonymous
        response = self.client.get(url)
        self.assertEquals(response.status_code, 302)

        self.client.login(username=self.student_one, password='******')

        # non-ajax
        response = self.client.get(url)
        self.assertEquals(response.status_code, 405)

        # ajax
        response = self.client.get(url, {},
                                   HTTP_X_REQUESTED_WITH='XMLHttpRequest')
        self.assertEquals(response.status_code, 200)
        the_json = loads(response.content)
        self.assertTrue('tags' in the_json)
        self.assertTrue('vocabulary' in the_json)
        self.assertTrue('references' in the_json)

        # invalid asset
        url = reverse('asset-references', args=[1234])
        response = self.client.get(url, {},
                                   HTTP_X_REQUESTED_WITH='XMLHttpRequest')
        self.assertEquals(response.status_code, 200)
        the_json = loads(response.content)
        self.assertFalse('tags' in the_json)
        self.assertFalse('vocabulary' in the_json)
        self.assertFalse('references' in the_json)
Exemple #21
0
    def setUp(self):
        self.setup_sample_course()
        self.setup_alternate_course()

        # instructor that sees both Sample Course & Alternate Course
        self.instructor_three = UserFactory(username='******')
        self.add_as_faculty(self.sample_course, self.instructor_three)
        self.add_as_faculty(self.alt_course, self.instructor_three)

        # Sample Course Image Asset
        self.asset1 = AssetFactory.create(course=self.sample_course,
                                          primary_source='image',
                                          author=self.instructor_one)

        self.student_note = SherdNoteFactory(asset=self.asset1,
                                             author=self.student_one,
                                             tags=',student_one_selection',
                                             body='student one selection note',
                                             range1=0,
                                             range2=1)
        self.student_ga = SherdNoteFactory(asset=self.asset1,
                                           author=self.student_one,
                                           tags=',student_one_item',
                                           body='student one item note',
                                           title=None,
                                           range1=None,
                                           range2=None)
        self.instructor_note = SherdNoteFactory(
            asset=self.asset1,
            author=self.instructor_one,
            tags=',image, instructor_one_selection,',
            body='instructor one selection note',
            range1=0,
            range2=1)
        self.instructor_ga = SherdNoteFactory(
            asset=self.asset1,
            author=self.instructor_one,
            tags=',image, instructor_one_item,',
            body='instructor one item note',
            title=None,
            range1=None,
            range2=None)
Exemple #22
0
    def test_get_related_assets(self):
        asset2 = AssetFactory(course=self.sample_course,
                              author=self.student_one)
        note2 = SherdNoteFactory(asset=asset2, author=self.student_one)

        ids = [self.student_one_ga.id, self.student_one_note.id, note2.id]
        notes = SherdNote.objects.filter(id__in=ids)

        assets = notes.get_related_assets()
        self.assertEquals(assets.count(), 2)
        self.assertTrue(self.asset in assets)
        self.assertTrue(asset2 in assets)
Exemple #23
0
    def test_asset_delete(self):
        self.assertTrue(
            self.client.login(username=self.instructor_one.username,
                              password='******'))
        self.switch_course(self.client, self.sample_course)

        asset1 = AssetFactory.create(course=self.sample_course,
                                     author=self.instructor_one,
                                     primary_source='image')
        self.student_note = SherdNoteFactory(asset=asset1,
                                             author=self.student_one)
        self.instructor_note = SherdNoteFactory(asset=asset1,
                                                author=self.instructor_one)

        response = self.client.get('/asset/delete/%s/' % asset1.id, {},
                                   HTTP_X_REQUESTED_WITH='XMLHttpRequest')
        self.assertEquals(response.status_code, 200)

        notes = asset1.sherdnote_set.filter(author=self.instructor_one)
        self.assertEquals(notes.count(), 0)
        notes = asset1.sherdnote_set.filter(author=self.student_one)
        self.assertEquals(notes.count(), 1)
Exemple #24
0
    def test_user_analysis_count(self):
        SherdNoteFactory(asset=self.asset1,
                         author=self.student_two,
                         tags=',student_two_item',
                         title=None,
                         range1=None,
                         range2=None)

        # global notes y/n + global tag count + annotation count
        self.assertEqual(0,
                         self.asset1.user_analysis_count(self.instructor_two))
        self.assertEqual(1, self.asset1.user_analysis_count(self.student_two))
        self.assertEqual(4,
                         self.asset1.user_analysis_count(self.instructor_one))
Exemple #25
0
    def setUp(self):
        self.setup_sample_course()

        self.project = ProjectFactory.create(course=self.sample_course,
                                             author=self.student_one,
                                             policy='CourseProtected')
        self.collaboration = self.project.get_collaboration()

        self.asset = AssetFactory.create(course=self.sample_course,
                                         primary_source='image')
        self.asset2 = AssetFactory.create(course=self.sample_course,
                                          primary_source='image')

        self.note = SherdNoteFactory(asset=self.asset,
                                     author=self.student_one,
                                     tags=',student_one_selection',
                                     body='student one selection note',
                                     range1=0,
                                     range2=1)

        self.note2 = SherdNoteFactory(asset=self.asset2,
                                      author=self.student_one,
                                      title='note2')
    def test_create(self):
        course = CourseFactory()
        author = UserFactory()
        note = SherdNoteFactory()
        r = self.client.post(
            reverse('sequenceasset-list'),
            {
                'course': course.pk,
                'author': author.pk,
                'spine': note.pk,
                'media_elements': [],
                'text_elements': [],
            }, format='json')

        self.assertEqual(r.status_code, 403)
    def test_create_with_track_elements_with_no_start_time(self):
        course = CourseFactory()
        note = SherdNoteFactory()
        note2 = SherdNoteFactory()
        project = ProjectFactory()
        r = self.client.post(
            reverse('sequenceasset-list'),
            {
                'course': course.pk,
                'spine': note.pk,
                'project': project.pk,
                'media_elements': [
                    {
                        'media': note2.pk,
                        'start_time': None,
                        'end_time': Decimal('0.9999'),
                    }
                ],
                'text_elements': [
                    {
                        'text': 'My text',
                        'start_time': None,
                        'end_time': Decimal('0.198985'),
                    },
                    {
                        'text': 'My text 2',
                        'start_time': Decimal('11'),
                        'end_time': Decimal('14'),
                    },
                ]
            }, format='json')

        self.assertEqual(
            r.status_code, 400,
            'Attempting to create track elements with no start time should '
            'be invalid.')
Exemple #28
0
    def test_get(self):
        asset = AssetFactory(course=self.sample_course, primary_source='image')

        self.client.login(username=self.student_one.username, password='******')
        SherdNoteFactory(asset=asset,
                         author=self.student_one,
                         tags=',student_one_selection',
                         range1=0,
                         range2=1)
        SherdNoteFactory(asset=asset,
                         author=self.student_one,
                         tags=',student_one_item',
                         title=None,
                         range1=None,
                         range2=None)

        response = self.client.get(self.url, {},
                                   HTTP_X_REQUESTED_WITH='XMLHttpRequest')
        self.assertEquals(response.status_code, 200)
        the_json = loads(response.content)
        self.assertTrue('tags' in the_json)
        self.assertEquals(len(the_json['tags']), 2)
        self.assertEquals(the_json['tags'][0]['name'], 'student_one_item')
        self.assertEquals(the_json['tags'][1]['name'], 'student_one_selection')
    def test_update(self):
        author = UserFactory()
        sa = SequenceAssetFactory(author=author)
        note = SherdNoteFactory()
        r = self.client.put(
            reverse('sequenceasset-detail', args=(sa.pk,)),
            {
                'course': sa.course.pk,
                'author': sa.author.pk,
                'spine': note.pk,
                'media_elements': [],
                'text_elements': [],
            }, format='json')

        self.assertEqual(r.status_code, 403)
Exemple #30
0
    def test_edit_annotation(self):
        note = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            title='Selection', range1=116.25, range2=6.75)

        data = {'annotation-range1': -4.5,
                'annotation-tags': 'foo,bar', 'next': 'foo'}
        request = RequestFactory().post('/', data)
        request.user = self.student_two

        with self.assertRaises(Http404):
            edit_annotation(request, 123)

        response = edit_annotation(request, note.id)
        self.assertEquals(response.status_code, 403)

        # via post
        request.user = self.student_one
        response = edit_annotation(request, note.id)
        self.assertEquals(response.status_code, 302)
        note.refresh_from_db()
        self.assertEquals(note.range1, -4.5)
        self.assertEquals(note.tags, 'foo,bar')

        # via ajax
        data = {'annotation-range2': 7}
        request = RequestFactory().post('/', data,
                                        HTTP_X_REQUESTED_WITH='XMLHttpRequest')
        request.user = self.student_one
        response = edit_annotation(request, note.id)
        self.assertEquals(response.status_code, 200)
        the_json = loads(response.content)
        self.assertEquals(the_json['asset']['id'], self.asset.id)
        self.assertEquals(the_json['annotation']['id'], note.id)
        note.refresh_from_db()
        self.assertEquals(note.range2, 7)
Exemple #31
0
    def test_filter_by_today(self):
        note = SherdNoteFactory()

        # today
        notes = SherdNote.objects.filter_by_date('today')
        self.assertEquals(notes.count(), 1)
        self.assertEquals(notes[0].title, note.title)

        # yesterday
        notes = SherdNote.objects.filter_by_date('yesterday')
        self.assertEquals(notes.count(), 0)

        # in the last week
        notes = SherdNote.objects.filter_by_date('lastweek')
        self.assertEquals(notes.count(), 1)
        self.assertEquals(notes[0].title, note.title)
Exemple #32
0
    def setUp(self):
        self.setup_sample_course()
        self.factory = RequestFactory()

        taxonomy = {
            'Shapes': ['Square', 'Triangle', 'Circle'],
            'Colors': ['Red', 'Blue', 'Green']
        }
        self.create_vocabularies(self.sample_course, taxonomy)

        self.asset = AssetFactory(course=self.sample_course)
        self.note = SherdNoteFactory(asset=self.asset,
                                     author=self.student_one,
                                     title="Whole Item Selection",
                                     range1=116.25,
                                     range2=6.75)
 def test_retrieve_with_text_elements(self):
     note = SherdNoteFactory()
     asset = SequenceAssetFactory(author=self.u, spine=note)
     e1 = SequenceTextElementFactory(sequence_asset=asset)
     e2 = SequenceTextElementFactory(sequence_asset=asset)
     e3 = SequenceTextElementFactory(sequence_asset=asset)
     r = self.client.get(
         reverse('sequenceasset-detail', args=(asset.pk,)), format='json'
     )
     self.assertEqual(r.status_code, 200)
     the_json = loads(r.content)
     self.assertEqual(the_json['spine']['id'], note.pk)
     textelements = the_json['text_elements']
     self.assertEqual(textelements[0]['text'], e1.text)
     self.assertEqual(textelements[1]['text'], e2.text)
     self.assertEqual(textelements[2]['text'], e3.text)
    def test_retrieve(self):
        asset = SequenceAssetFactory()
        r = self.client.get(
            reverse('sequenceasset-detail', args=(asset.pk,)), format='json'
        )
        self.assertEqual(r.status_code, 200)
        self.assertIsNone(r.data.get('spine'))
        self.assertEqual(r.data.get('id'), asset.pk)

        note = SherdNoteFactory()
        asset = SequenceAssetFactory(spine=note)
        r = self.client.get(
            reverse('sequenceasset-detail', args=(asset.pk,)), format='json'
        )
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.data.get('spine')['id'], note.pk)
Exemple #35
0
    def test_range_as_timecode(self):
        asset = AssetFactory(course=self.sample_course)

        global_annotation, created = SherdNote.objects.global_annotation(
            asset, self.student_three, auto_create=True)
        self.assertEquals(global_annotation.range_as_timecode(), "")

        whole_item_annotation = SherdNoteFactory(asset=asset,
                                                 author=self.student_three)
        self.assertEquals(whole_item_annotation.range_as_timecode(), "")

        real_annotation = SherdNoteFactory(asset=asset,
                                           author=self.student_three,
                                           range1=28,
                                           range2=39)
        self.assertEquals(real_annotation.range_as_timecode(), "0:28 - 0:39")

        real_annotation = SherdNoteFactory(asset=asset,
                                           author=self.student_three,
                                           range1=43,
                                           range2=75)
        self.assertEquals(real_annotation.range_as_timecode(), "0:43 - 01:15")
Exemple #36
0
    def test_annotation_delete(self):
        asset = AssetFactory(course=self.sample_course, primary_source='image')
        note = SherdNoteFactory(asset=asset,
                                author=self.student_one,
                                tags=',student_one_selection',
                                range1=0,
                                range2=1)

        request = RequestFactory().post('/')
        request.user = self.student_one
        request.course = self.sample_course

        response = annotation_delete(request, asset.id, note.id)
        self.assertEquals(response.status_code, 302)

        response = annotation_delete(request, asset.id, note.id)
        self.assertEquals(response.status_code, 404)
Exemple #37
0
    def test_range_as_timecode(self):
        asset = AssetFactory(course=self.sample_course)

        global_annotation, created = SherdNote.objects.global_annotation(asset, self.student_three, auto_create=True)
        self.assertEquals(global_annotation.range_as_timecode(), "")

        whole_item_annotation = SherdNoteFactory(asset=asset, author=self.student_three)
        self.assertEquals(whole_item_annotation.range_as_timecode(), "")

        real_annotation = SherdNoteFactory(asset=asset, author=self.student_three, range1=28, range2=39)
        self.assertEquals(real_annotation.range_as_timecode(), "0:28 - 0:39")

        real_annotation = SherdNoteFactory(asset=asset, author=self.student_three, range1=43, range2=75)
        self.assertEquals(real_annotation.range_as_timecode(), "0:43 - 01:15")
Exemple #38
0
class SherdNoteFilterTest(MediathreadTestMixin, TestCase):

    def setUp(self):
        self.setup_sample_course()

        self.asset = AssetFactory(course=self.sample_course,
                                  author=self.student_one,
                                  primary_source='image',)

        self.student_one_ga = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_item', title=None, range1=None, range2=None)
        self.assertTrue(self.student_one_ga.is_global_annotation())
        self.student_one_note = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_selection', range1=0, range2=1)

        self.student_two_ga = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            tags=',student_two_item', title=None, range1=None, range2=None)
        self.student_two_note = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            tags=',student_two_selection', range1=0, range2=1)

        self.instructor_one_ga = SherdNoteFactory(
            asset=self.asset, author=self.instructor_one,
            tags=',instructor_one_item', title=None, range1=None, range2=None)
        self.instructor_one_note = SherdNoteFactory(
            asset=self.asset, author=self.instructor_one,
            tags=',image,instructor_one_selection,', range1=0, range2=1)

    def test_filter_by_record_owner(self):
        qs = Asset.objects.filter(id=self.asset.id)
        author = User.objects.get(username='******')

        names = ['instructor_one', 'instructor_two', 'student_one']
        users = User.objects.filter(username__in=names).values_list('id')
        visible_authors = users.values_list('id', flat=True)

        notes = SherdNote.objects.get_related_notes(qs,
                                                    author,
                                                    visible_authors,
                                                    True)
        self.assertEquals(notes.count(), 2)

        self.assertEquals(notes[0], self.student_one_ga)
        self.assertEquals(notes[1], self.student_one_note)

    def test_filter_no_authors(self):
        qs = Asset.objects.filter(id=self.asset.id)

        notes = SherdNote.objects.get_related_notes(qs, None, [], True)
        self.assertEquals(notes.count(), 6)

        self.assertEquals(notes[0], self.student_one_ga)
        self.assertEquals(notes[1], self.student_one_note)
        self.assertEquals(notes[2], self.student_two_ga)
        self.assertEquals(notes[3], self.student_two_note)
        self.assertEquals(notes[4], self.instructor_one_ga)
        self.assertEquals(notes[5], self.instructor_one_note)

    def test_filter_by_visible_authors(self):
        qs = Asset.objects.filter(id=self.asset.id)

        names = ['instructor_one', 'instructor_two', 'student_one']
        users = User.objects.filter(username__in=names).values_list('id')
        visible_authors = users.values_list('id', flat=True)

        notes = SherdNote.objects.get_related_notes(qs,
                                                    None,
                                                    visible_authors,
                                                    True)
        self.assertEquals(notes.count(), 5)

        self.assertEquals(notes[0], self.student_one_ga)
        self.assertEquals(notes[1], self.student_one_note)
        self.assertEquals(notes[2], self.student_two_ga)
        self.assertEquals(notes[3], self.instructor_one_ga)
        self.assertEquals(notes[4], self.instructor_one_note)

    def test_filter_by_all_items_are_visible(self):
        qs = Asset.objects.filter(id=self.asset.id)

        names = ['instructor_one', 'instructor_two', 'student_one']
        users = User.objects.filter(username__in=names).values_list('id')
        visible_authors = users.values_list('id', flat=True)

        notes = SherdNote.objects.get_related_notes(qs,
                                                    None,
                                                    visible_authors,
                                                    False)
        self.assertEquals(notes.count(), 4)

        self.assertEquals(notes[0], self.student_one_ga)
        self.assertEquals(notes[1], self.student_one_note)
        self.assertEquals(notes[2], self.instructor_one_ga)
        self.assertEquals(notes[3], self.instructor_one_note)

    def test_filter_by_tags(self):
        notes = SherdNote.objects.filter_by_tags('student_one_selection')
        self.assertEquals(notes.count(), 1)
        self.assertEquals(notes[0], self.student_one_note)

        notes = SherdNote.objects.filter(asset=self.asset)
        self.assertEquals(notes.count(), 6)

        notes = notes.filter_by_tags(
            'student_two_selection,image').order_by('id')
        self.assertEquals(notes.count(), 2)
        self.assertEquals(notes[0], self.student_two_note)
        self.assertEquals(notes[1], self.instructor_one_note)

    def test_get_related_assets(self):
        asset2 = AssetFactory(course=self.sample_course,
                              author=self.student_one)
        note2 = SherdNoteFactory(asset=asset2, author=self.student_one)

        ids = [self.student_one_ga.id, self.student_one_note.id, note2.id]
        notes = SherdNote.objects.filter(id__in=ids)

        assets = notes.get_related_assets()
        self.assertEquals(assets.count(), 2)
        self.assertTrue(self.asset in assets)
        self.assertTrue(asset2 in assets)

    def test_exclude_primary_types(self):
        asset2 = AssetFactory(course=self.sample_course,
                              author=self.student_one,
                              primary_source='youtube',)

        youtube_note = SherdNoteFactory(
            asset=asset2, author=self.student_one,
            tags=',student_one_selection', range1=0, range2=1)

        qs = SherdNote.objects.filter(author=self.student_one)
        self.assertEquals(qs.count(), 3)

        notes = qs.exclude_primary_types(['youtube'])
        self.assertEquals(notes.count(), 2)
        self.assertTrue(self.student_one_ga in notes)
        self.assertTrue(self.student_one_note in notes)

        notes = qs.exclude_primary_types(['image'])
        self.assertEquals(notes.count(), 1)
        self.assertEquals(notes[0], youtube_note)
Exemple #39
0
class SherdNoteFilterTest(MediathreadTestCase):

    def setUp(self):
        super(self.__class__, self).setUp()

        self.asset = AssetFactory(course=self.sample_course,
                                  author=self.student_one)

        self.ga1 = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_item', title=None, range1=None, range2=None)
        self.assertTrue(self.ga1.is_global_annotation())
        self.note1 = SherdNoteFactory(
            asset=self.asset, author=self.student_one,
            tags=',student_one_selection', range1=0, range2=1)

        self.ga2 = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            tags=',student_two_item', title=None, range1=None, range2=None)
        self.note2 = SherdNoteFactory(
            asset=self.asset, author=self.student_two,
            tags=',student_two_selection', range1=0, range2=1)

        self.ga3 = SherdNoteFactory(
            asset=self.asset, author=self.instructor_one,
            tags=',instructor_one_item', title=None, range1=None, range2=None)
        self.note3 = SherdNoteFactory(
            asset=self.asset, author=self.instructor_one,
            tags=',image,instructor_one_selection,', range1=0, range2=1)

    def test_filter_by_record_owner(self):
        qs = Asset.objects.filter(id=self.asset.id)
        author = User.objects.get(username='******')

        names = ['instructor_one', 'instructor_two', 'student_one']
        users = User.objects.filter(username__in=names).values_list('id')
        visible_authors = users.values_list('id', flat=True)

        notes = SherdNote.objects.get_related_notes(qs,
                                                    author,
                                                    visible_authors)
        self.assertEquals(notes.count(), 2)

        self.assertEquals(notes[0], self.ga1)
        self.assertEquals(notes[1], self.note1)

    def test_filter_no_authors(self):
        qs = Asset.objects.filter(id=self.asset.id)

        notes = SherdNote.objects.get_related_notes(qs, None, [])
        self.assertEquals(notes.count(), 6)

        self.assertEquals(notes[0], self.ga1)
        self.assertEquals(notes[1], self.note1)
        self.assertEquals(notes[2], self.ga2)
        self.assertEquals(notes[3], self.note2)
        self.assertEquals(notes[4], self.ga3)
        self.assertEquals(notes[5], self.note3)

    def test_filter_by_visible_authors(self):
        qs = Asset.objects.filter(id=self.asset.id)

        names = ['instructor_one', 'instructor_two', 'student_one']
        users = User.objects.filter(username__in=names).values_list('id')
        visible_authors = users.values_list('id', flat=True)

        notes = SherdNote.objects.get_related_notes(qs,
                                                    None,
                                                    visible_authors)
        self.assertEquals(notes.count(), 4)

        self.assertEquals(notes[0], self.ga1)
        self.assertEquals(notes[1], self.note1)
        self.assertEquals(notes[2], self.ga3)
        self.assertEquals(notes[3], self.note3)

    def test_filter_by_tags(self):
        notes = SherdNote.objects.filter_by_tags('student_one_selection')
        self.assertEquals(notes.count(), 1)
        self.assertEquals(notes[0], self.note1)

        notes = SherdNote.objects.filter(asset=self.asset)
        self.assertEquals(notes.count(), 6)

        notes = notes.filter_by_tags(
            'student_two_selection,image').order_by('id')
        self.assertEquals(notes.count(), 2)
        self.assertEquals(notes[0], self.note2)
        self.assertEquals(notes[1], self.note3)