예제 #1
0
    def test_retrieve_missing_password_raises_not_found(self):
        item = ItemFactory(user=self.user)
        response = self._request(url=f'{self.url}{item.uuid}/')
        json_response = json.loads(response.content)
        item.refresh_from_db()

        self.assertEqual(item.visit_count, 0)
        self.assertEqual(response.status_code, HTTP_404_NOT_FOUND)
        self.assertEqual(json_response, {'detail': 'Not found.'})
예제 #2
0
    def test_retrieve_correct_password_redirects_to_url(self):
        password = '******'
        item = ItemFactory(
            user=self.user, url='http://kodziek.pl',
            password=make_password(password),
        )

        self.assertEqual(item.visit_count, 0)

        response = self._request(
            url=f'{self.url}{item.uuid}/?password={password}',
        )
        item.refresh_from_db()

        self.assertEqual(item.visit_count, 1)
        self.assertEqual(response.status_code, HTTP_302_FOUND)
        self.assertEqual(response.url, item.url)
예제 #3
0
 def setUp(self):
     self.url_item = ItemFactory(
         user=self.user,
         url=reverse('login'),
         password=self.password_encrypted,
     )
     self.file_item = ItemFactory(
         user=self.user,
         file=SimpleUploadedFile('file', self.file_content),
         password=self.password_encrypted,
     )
     self.url_item_url = reverse(
         'items:get',
         kwargs={'uuid': self.url_item.uuid},
     )
     self.file_item_url = reverse(
         'items:get',
         kwargs={'uuid': self.file_item.uuid},
     )
예제 #4
0
    def test_retrieve_item_older_than_one_day_returns_not_found(self):
        password = '******'
        past_date = (
            datetime.now() - settings.ITEMS_LIFETIME - relativedelta(seconds=5)
        )
        with freeze_time(past_date):
            item = ItemFactory(
                user=self.user, url='http://kodziek.pl',
                password=make_password(password),
            )
        response = self._request(
            url=f'{self.url}{item.uuid}/?password={password}',
        )
        item.refresh_from_db()
        json_response = json.loads(response.content)

        self.assertEqual(item.visit_count, 0)
        self.assertEqual(response.status_code, HTTP_404_NOT_FOUND)
        self.assertEqual(json_response, {'detail': 'Not found.'})
예제 #5
0
    def test_get_returns_proper_stats(self):
        date1 = '2017-10-25'
        date2 = '2017-10-26'
        url = 'http://kodziek.pl'
        file = SimpleUploadedFile('file', b'content')
        expected_response = {
            date1: {
                'files': 2,
                'links': 1,
            },
            date2: {
                'files': 1,
                'links': 0,
            },
        }

        with freeze_time(date1):
            ItemFactory(user=self.user, file=file, visit_count=1)
            ItemFactory(user=self.user, file=file, visit_count=5)
            ItemFactory(user=self.user, url=url, visit_count=2)
        with freeze_time(date2):
            ItemFactory(user=self.user, file=file, visit_count=2)
            ItemFactory(user=self.user, file=file)
            ItemFactory(user=self.user, url=url)

        response = self._request()
        json_response = json.loads(response.content)

        self.assertEqual(response.status_code, HTTP_200_OK)
        self.assertEqual(json_response, expected_response)
예제 #6
0
    def test_retrieve_correct_password_returns_file(self):
        password = '******'
        content = b'content'
        item = ItemFactory(
            user=self.user, file=SimpleUploadedFile('file', content),
            password=make_password(password),
        )

        self.assertEqual(item.visit_count, 0)

        response = self._request(
            url=f'{self.url}{item.uuid}/?password={password}',
        )
        item.refresh_from_db()

        self.assertEqual(item.visit_count, 1)
        self.assertEqual(response.status_code, HTTP_200_OK)

        response_content = b''
        for line in response.streaming_content:
            response_content += line

        self.assertEqual(response_content, content)
예제 #7
0
 def setUpTestData(cls):
     cls.user = UserFactory()
     cls.file_content = b'content'
     cls.password = '******'
     cls.password_encrypted = make_password(cls.password)
     with freeze_time(datetime.now() - settings.ITEMS_LIFETIME):
         cls.old_item = ItemFactory(
             user=cls.user,
             url=reverse('login'),
             password=cls.password_encrypted,
         )
         cls.old_item_url = reverse(
             'items:get',
             kwargs={'uuid': cls.old_item.uuid},
         )
예제 #8
0
 def setUpClass(cls):
     cls.password = '******'
     cls.item = ItemFactory.build(password=make_password(cls.password))
예제 #9
0
 def _create_item(cls, user, **kwargs):
     return ItemFactory(password='******', user=user, **kwargs)
예제 #10
0
class GetItemViewTestCase(TestCase):
    @classmethod
    def setUpTestData(cls):
        cls.user = UserFactory()
        cls.file_content = b'content'
        cls.password = '******'
        cls.password_encrypted = make_password(cls.password)
        with freeze_time(datetime.now() - settings.ITEMS_LIFETIME):
            cls.old_item = ItemFactory(
                user=cls.user,
                url=reverse('login'),
                password=cls.password_encrypted,
            )
            cls.old_item_url = reverse(
                'items:get',
                kwargs={'uuid': cls.old_item.uuid},
            )

    def setUp(self):
        self.url_item = ItemFactory(
            user=self.user,
            url=reverse('login'),
            password=self.password_encrypted,
        )
        self.file_item = ItemFactory(
            user=self.user,
            file=SimpleUploadedFile('file', self.file_content),
            password=self.password_encrypted,
        )
        self.url_item_url = reverse(
            'items:get',
            kwargs={'uuid': self.url_item.uuid},
        )
        self.file_item_url = reverse(
            'items:get',
            kwargs={'uuid': self.file_item.uuid},
        )

    def test_get_renders_password_form(self):
        response = self.client.get(self.url_item_url)

        self.assertEqual(response.status_code, 200)

    def test_get_old_file_raises_404_not_found(self):
        response = self.client.get(self.old_item_url)

        self.assertEqual(response.status_code, 404)

    def test_post_missing_data_raises_error(self):
        response = self.client.post(self.url_item_url, {})

        self.assertEqual(response.status_code, 200)
        self.assertFormError(
            response,
            'form',
            'password',
            ['This field is required.'],
        )

    def test_post_incorrect_password_raises_error(self):
        data = {
            'password': '******',
        }
        response = self.client.post(self.url_item_url, data)

        self.assertEqual(response.status_code, 200)
        self.assertFormError(
            response,
            'form',
            'password',
            ['Incorrect password.'],
        )

    def test_post_redirect_to_item_url(self):
        data = {
            'password': self.password,
        }
        response = self.client.post(self.url_item_url, data)
        self.url_item.refresh_from_db()

        self.assertRedirects(response, self.url_item.url)
        self.assertEqual(self.url_item.visit_count, 1)

    def test_post_returns_file(self):
        data = {
            'password': self.password,
        }
        response = self.client.post(self.file_item_url, data)
        self.file_item.refresh_from_db()

        response_content = b''
        for line in response.streaming_content:
            response_content += line

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response_content, self.file_content)
        self.assertEqual(self.file_item.visit_count, 1)

    def test_post_to_old_file_raises_404_not_found(self):
        data = {
            'password': self.password,
        }
        response = self.client.post(self.old_item_url, data)
        self.old_item.refresh_from_db()

        self.assertEqual(response.status_code, 404)
        self.assertEqual(self.url_item.visit_count, 0)