예제 #1
0
 def test_versions_same_order(self):
     v1, v2 = self.add_versions()
     set_order = [v1.pk, v2.pk]
     data = {'versions': set_order}
     serializer = BrowserSerializer(self.browser, data=data, partial=True)
     self.assertTrue(serializer.is_valid())
     new_browser = serializer.save()
     new_order = list(new_browser.versions.values_list('pk', flat=True))
     self.assertEqual(new_order, set_order)
예제 #2
0
    def test_set_current_history_to_null_fails(self):
        self.browser.name = {'en': 'Browser'}
        self.browser.save()

        data = {'history_current': None}
        serializer = BrowserSerializer(self.browser, data=data, partial=True)
        self.assertFalse(serializer.is_valid())
        expected = {'history_current': ['Invalid history ID for this object']}
        self.assertEqual(serializer.errors, expected)
예제 #3
0
    def test_set_history_current_to_wrong_browser_fails(self):
        other_browser = self.create(
            Browser, slug='other-browser', name={'en': 'Other Browser'})
        bad_history_id = other_browser.history.all()[0].history_id

        data = {'history_current': bad_history_id}
        serializer = BrowserSerializer(self.browser, data=data, partial=True)
        self.assertFalse(serializer.is_valid())
        expected = {'history_current': ['Invalid history ID for this object']}
        self.assertEqual(serializer.errors, expected)
예제 #4
0
    def test_set_history_current_to_old(self):
        old_history_id = self.browser.history.latest('history_date').history_id
        self.browser.name = {'en': 'Browser'}
        self.browser.save()

        data = {'history_current': old_history_id}
        serializer = BrowserSerializer(self.browser, data=data, partial=True)
        self.assertTrue(serializer.is_valid())
        new_browser = serializer.save()
        histories = new_browser.history.all()
        self.assertEqual(3, len(histories))
        self.assertEqual(new_browser.name, {'en': 'Old Name'})
예제 #5
0
    def test_set_history_current_to_same(self):
        self.browser.name = {'en': 'Browser'}
        self.browser.save()
        current_history_id = self.browser.history.all()[0].history_id

        data = {'history_current': current_history_id}
        serializer = BrowserSerializer(self.browser, data=data, partial=True)
        self.assertTrue(serializer.is_valid())
        new_browser = serializer.save()
        new_history_id = new_browser.history.all()[0].history_id
        self.assertNotEqual(new_history_id, current_history_id)
        histories = new_browser.history.all()
        self.assertEqual(3, len(histories))
예제 #6
0
 def test_paginated_empty(self):
     data = {
         'count': 0,
         'next': None,
         'previous': None,
         'results': self.make_list([], BrowserSerializer())
     }
     output = self.renderer.render(
         data, self.media_type, self.make_context())
     expected = {
         'browsers': [],
         'meta': {
             'pagination': {
                 'browsers': {
                     'count': 0,
                     'next': None,
                     'previous': None,
                 }
             }
         }
     }
     self.assertJSONEqual(output.decode('utf8'), expected)
예제 #7
0
 def test_paginated_empty(self):
     data = {
         'count': 0,
         'next': None,
         'previous': None,
         'results': self.make_list([], BrowserSerializer())
     }
     url = self.full_api_reverse('browser-list')
     context = self.make_context(url=url, serializer=BrowserSerializer)
     output = self.renderer.render(data, self.media_type, context)
     expected = {
         'data': [],
         'links': {
             'self': url,
             'next': None,
             'prev': None,
         },
         'meta': {
             'count': 0,
         }
     }
     self.assertJSONEqual(output.decode('utf8'), expected)
예제 #8
0
    def test_paginated_populated(self):
        browser1 = {
            'id': 1,
            'slug': 'firefox_desktop',
            'name': {'en': 'Firefox for Desktop'},
            'note': None,
            'versions': [100, 101],
            'history_current': 200,
            'history': [200]
        }
        browser2 = {
            'id': 2,
            'slug': 'edge',
            'name': {'en': 'Edge'},
            'note': None,
            'versions': [300, 301],
            'history_current': 400,
            'history': [400]
        }
        results = self.make_list([browser1, browser2], BrowserSerializer())
        data = {
            'count': 2,
            'next': None,
            'previous': None,
            'results': results
        }
        url = self.api_reverse('browser-list')
        output = self.renderer.render(
            data, self.media_type, self.make_context(url=url))
        expected = {
            'browsers': [
                {
                    'id': '1',
                    'slug': 'firefox_desktop',
                    'name': {'en': 'Firefox for Desktop'},
                    'note': None,
                    'links': {
                        'versions': ['100', '101'],
                        'history_current': '200',
                        'history': ['200'],
                    }
                },
                {
                    'id': '2',
                    'slug': 'edge',
                    'name': {'en': 'Edge'},
                    'note': None,
                    'links': {
                        'versions': ['300', '301'],
                        'history_current': '400',
                        'history': ['400'],
                    }
                },

            ],
            'links': {
                'browsers.versions': {
                    'type': 'versions',
                    'href': self.base_url + 'versions/{browsers.versions}',
                },
                'browsers.history_current': {
                    'type': 'historical_browsers',
                    'href': (
                        self.base_url +
                        'historical_browsers/{browsers.history_current}'),
                },
                'browsers.history': {
                    'type': 'historical_browsers',
                    'href': (
                        self.base_url +
                        'historical_browsers/{browsers.history}'),
                },
            },
            'meta': {
                'pagination': {
                    'browsers': {
                        'count': 2,
                        'next': None,
                        'previous': None,
                    }
                }
            }
        }
        self.assertJSONEqual(output.decode('utf8'), expected)
예제 #9
0
 def test_paginated_populated(self):
     browser1 = {
         'id': 1,
         'slug': 'firefox_desktop',
         'name': {
             'en': 'Firefox for Desktop'
         },
         'note': None,
         'versions': [100, 101],
         'history_current': 200,
         'history': [200]
     }
     browser2 = {
         'id': 2,
         'slug': 'edge',
         'name': {
             'en': 'Edge'
         },
         'note': None,
         'versions': [300, 301],
         'history_current': 400,
         'history': [400]
     }
     results = self.make_list([browser1, browser2], BrowserSerializer())
     data = {'count': 2, 'next': None, 'previous': None, 'results': results}
     url = self.full_api_reverse('browser-list')
     context = self.make_context(url=url, serializer=BrowserSerializer)
     output = self.renderer.render(data, self.media_type, context)
     expected = {
         'data': [
             {
                 'id': '1',
                 'type': 'browsers',
                 'attributes': {
                     'slug': 'firefox_desktop',
                     'name': {
                         'en': 'Firefox for Desktop'
                     },
                     'note': None,
                 },
                 'relationships': {
                     'versions': {
                         'data': [
                             {
                                 'type': 'versions',
                                 'id': '100'
                             },
                             {
                                 'type': 'versions',
                                 'id': '101'
                             },
                         ],
                     },
                     'history_current': {
                         'data': {
                             'type': 'historical_browsers',
                             'id': '200'
                         },
                     },
                     'history': {
                         'data': [
                             {
                                 'type': 'historical_browsers',
                                 'id': '200'
                             },
                         ],
                     },
                 },
                 'links': {
                     'self': url + '/1'
                 },
             },
             {
                 'id': '2',
                 'type': 'browsers',
                 'attributes': {
                     'slug': 'edge',
                     'name': {
                         'en': 'Edge'
                     },
                     'note': None,
                 },
                 'relationships': {
                     'versions': {
                         'data': [
                             {
                                 'type': 'versions',
                                 'id': '300'
                             },
                             {
                                 'type': 'versions',
                                 'id': '301'
                             },
                         ],
                     },
                     'history_current': {
                         'data': {
                             'type': 'historical_browsers',
                             'id': '400'
                         },
                     },
                     'history': {
                         'data': [
                             {
                                 'type': 'historical_browsers',
                                 'id': '400'
                             },
                         ],
                     },
                 },
                 'links': {
                     'self': url + '/2'
                 },
             },
         ],
         'links': {
             'self': url,
             'next': None,
             'prev': None,
         },
         'meta': {
             'count': 2,
         }
     }
     self.assertJSONEqual(output.decode('utf8'), expected)