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)
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)
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)
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'})
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))
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)
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)
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)
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)