Esempio n. 1
0
    def test_saving_and_retrieving_clips(self):
        clip1 = Clip.objects.create_clip("clip_test_1", self.person)
        setFileAttributefromLocal(clip1.audio_file, audio_path, "song1.mp3")
        clip1.categories.add(Category.objects.get(title="MUSIC"))
        clip1.tags.add("red", "green")

        clip2 = Clip.objects.create_clip("clip_test_2", self.person)
        setFileAttributefromLocal(clip2.audio_file, audio_path, "song2.mp3")
        clip2.categories.add(Category.objects.get(title="TECHNOLOGY"))
        clip2.tags.add("blue", "purple")

        saved_clips = Clip.objects.all()
        self.assertEqual(saved_clips.count(), self.numClips + 2)

        saved_clip_1 = Clip.objects.filter(author=self.person, title="clip_test_1")[0]
        self.assertEqual(saved_clip_1.title, 'clip_test_1')
        self.assertEqual(saved_clip_1.author.username, 'aray')
        self.assertEqual(saved_clip_1.description, '')
        self.assertEqual(saved_clip_1.plays, 0)
        self.assertEqual(saved_clip_1.rating, 0)
        self.assertEqual(saved_clip_1.status, Clip.PENDING_STATUS)
        self.assertEqual(saved_clip_1.slug, 'clip_test_1')
        #query on categories
        self.assertEqual(saved_clip_1.categories.all().count(), 1)
        self.assertEqual(saved_clip_1.categories.all()[0].slug, 'music')
        #query on tags returns a ValuesListQuery.list() will convert
        self.assertTrue('red' in list(saved_clip_1.tags.names()))
        self.assertTrue('green' in list(saved_clip_1.tags.names()))

        cleanClips()
Esempio n. 2
0
    def test_ClipListViewSet_GET_authenticated_returns_correct_response(self):
        ##authenticate REST style
        user1 = User.objects.create_user('andrea', email='*****@*****.**', password='******')
        user2 = User.objects.create_user('jvwong', email='*****@*****.**', password='******')

        #create the clips
        clip1 = Clip.objects.create(status=1, title='clip1 title', author=user1.person)
        clip1.description = "clip1 description"
        setFileAttributefromLocal(clip1.audio_file, audio_path, "song1.mp3")
        clip1.save()

        clip2 = Clip.objects.create(status=1,title='clip2 title', author=user2.person)
        clip2.description = "clip2 description"
        setFileAttributefromLocal(clip2.audio_file, audio_path, "song2.mp3")
        clip2.save()

        # print(Clip.objects.all().count())

        self.client.login(username='******', password='******')
        response = self.client.get('/api/clips/.json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        resp = json.loads(response.content.decode())
        # print(resp['results'][0])
        self.assertEqual(resp['results'][0].get('title'), clip1.title)
        self.assertIn(clip1.author.user.username, resp['results'][0].get('author'))
        self.assertEqual(resp['results'][0].get('description'), clip1.description)
        self.assertEqual(resp['results'][0].get('plays'), clip1.plays)
        self.assertEqual(resp['results'][0].get('status'), clip1.status)
        self.assertEqual(resp['results'][0].get('rating'), clip1.rating)
        self.assertEqual(resp['results'][0].get('audio_file'), clip1.audio_file)

        cleanClips()
Esempio n. 3
0
    def test_ClipListViewSet_GET_unauthenticated_returns_correct_response(self):
        ##authenticate REST style
        user1 = User.objects.create_user('andrea', email='*****@*****.**', password='******')
        user2 = User.objects.create_user('jvwong', email='*****@*****.**', password='******')

        #create the clips
        clip1 = Clip.objects.create(status=1,title='clip1 title', author=user1.person)
        clip1.description = "clip1 description"
        setFileAttributefromLocal(clip1.audio_file, audio_path, "song1.mp3")
        clip2 = Clip.objects.create(status=1,title='clip2 title', author=user2.person)
        clip2.description = "clip2 description"
        setFileAttributefromLocal(clip2.audio_file, audio_path, "song2.mp3")

        # print(Clip.objects.all().count())
        response = self.client.get('/api/clips/.json')
        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)

        cleanClips()
Esempio n. 4
0
    def test_ClipDetail_DELETE_by_nonowner_is_rejected(self):
        #add users and clips
        user1 = User.objects.create_user('andrea', email='*****@*****.**', password='******')
        user2 = User.objects.create_user('jvwong', email='*****@*****.**', password='******')
        clip1 = Clip.objects.create(status=1, title='clip1 title', author=user1.person)
        clip1.description = "clip1 description"
        setFileAttributefromLocal(clip1.audio_file, audio_path, "song1.mp3")

        clip2 = Clip.objects.create(status=1, title='clip2 title', author=user2.person)
        clip2.description = "clip2 description"
        setFileAttributefromLocal(clip2.audio_file, audio_path, "song2.mp3")

        self.assertEqual(User.objects.all().count(), 2)
        self.assertEqual(Clip.objects.all().count(), 2)

        #A 403 Forbidden indicates non-owner attempts to alter resource
        self.client.login(username='******', password='******')
        response = self.client.delete('/api/clips/' + str(clip1.pk) + '/')
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

        cleanClips()
Esempio n. 5
0
    def test_ClipDetailViewSet_PATCH_own_updates_existing_object(self):
        #add users and clips
        user1 = User.objects.create_user('andrea', email='*****@*****.**', password='******')
        clip1 = Clip.objects.create(status=1, title='clip1 title', author=user1.person)
        clip1.description = "clip1 description"
        setFileAttributefromLocal(clip1.audio_file, audio_path, "song.mp3")
        self.assertEqual(User.objects.all().count(), 1)
        self.assertEqual(Clip.objects.all().count(), 1)

        # open a file and attach it to the request payload
        f = open(audio_path, "rb")

        self.client.login(username='******', password='******')
        response = self.client.patch('/api/clips/' + str(clip1.pk) + '/',
                                     data={'title': 'updated clip1 title', 'plays': 100})

        resp = response.data
        #print(resp)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(resp['title'], 'updated clip1 title')
        self.assertEqual(resp['plays'], 100)

        cleanClips()
Esempio n. 6
0
    def test_ClipDetail_DELETE_removes_existing_object(self):
        #add users and clips
        user1 = User.objects.create_user('andrea', email='*****@*****.**', password='******')
        user2 = User.objects.create_user('jvwong', email='*****@*****.**', password='******')
        clip1 = Clip.objects.create(status=1, title='clip1 title', author=user1.person)
        clip1.description = "clip1 description"
        setFileAttributefromLocal(clip1.audio_file, audio_path, "song1.mp3")
        clip2 = Clip.objects.create(status=1, title='clip2 title', author=user2.person)
        clip2.description = "clip2 description"
        setFileAttributefromLocal(clip2.audio_file, audio_path, "song2.mp3")
        self.assertEqual(User.objects.all().count(), 2)
        self.assertEqual(Clip.objects.all().count(), 2)

        #A 204 indicated modified resource
        self.client.login(username='******', password='******')
        response = self.client.delete('/api/clips/' + str(clip1.pk) + '/')
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

        # A get response to NOT match
        self.assertEqual(Clip.objects.all().count(), 1)
        r = self.client.get('/api/categories/' + str(clip1.pk) + '/')
        self.assertEqual(r.status_code, 404)

        cleanClips()
Esempio n. 7
0
    def test_api_ClipDetailViewSet_GET_others_returns_correct_response(self):
        #add users and clips
        user1 = User.objects.create_user('andrea', email='*****@*****.**', password='******')
        user2 = User.objects.create_user('jvwong', email='*****@*****.**', password='******')
        clip1 = Clip.objects.create(status=1, title='clip1 title', author=user1.person)
        clip1.description = "clip1 description"
        setFileAttributefromLocal(clip1.audio_file, audio_path, "song1.mp3")
        clip2 = Clip.objects.create(status=1, title='clip2 title', author=user2.person)
        clip2.description = "clip2 description"
        setFileAttributefromLocal(clip2.audio_file, audio_path, "song2.mp3")
        self.assertEqual(User.objects.all().count(), 2)
        self.assertEqual(Clip.objects.all().count(), 2)

        qsaved = Clip.objects.all()
        qclip = qsaved.get(author=user1.person)

        self.client.login(username='******', password='******')
        response = self.client.get('/api/clips/' + str(qclip.pk) + '/')
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        resp = response.data
        # print(resp)
        self.assertEqual('clip1 title', resp['title'])
        self.assertEqual('clip1-title', resp['slug'])
        self.assertEqual('clip1 description', resp['description'])
        self.assertIn('sounds/', resp['audio_file'])
        self.assertEqual(resp['plays'], 0)
        self.assertEqual(resp['rating'], 0)
        self.assertEqual(resp['status'], 1)
        self.assertEqual(resp['brand'], '')
        self.assertEqual(resp['categories'], [])
        self.assertEqual(resp['owner'], 'title')
        self.assertEqual([], resp['categories'])
        self.assertEqual(response.__getitem__('Content-Type'), 'application/json')

        cleanClips()
Esempio n. 8
0
    def test_ClipListViewSet_GET_paginate_returns_correct_number_of_records(self):
        ##authenticate REST style
        user1 = User.objects.create_user('andrea', email='*****@*****.**', password='******')
        user2 = User.objects.create_user('jvwong', email='*****@*****.**', password='******')

        #create the clips
        clip1 = Clip.objects.create(status=1,title='clip1 title', author=user1.person)
        clip1.description = "clip1 description"
        setFileAttributefromLocal(clip1.audio_file, audio_path, "song1.mp3")
        clip2 = Clip.objects.create(status=1,title='clip2 title', author=user2.person)
        clip2.description = "clip2 description"
        setFileAttributefromLocal(clip2.audio_file, audio_path, "song2.mp3")

        n = 1

        self.client.login(username='******', password='******')
        response = self.client.get('/api/people/.json?page_size=' + str(n))
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertContains(response, 'results')

        results = response.data['results']
        #print(results)
        self.assertEqual(len(results), n)
        cleanClips()