def get(self, request_body): request_json = json.dumps(request_body) digest = digest_for_source('local', request_json) return self.client.post('/wagtail-transfer/api/objects/?digest=%s' % digest, request_json, content_type='application/json')
def test_streamfield_with_null_page(self): # We should gracefully handle null values in non-required chooser blocks page = PageWithStreamField( title="I have a streamfield", body=json.dumps([ { 'type': 'link_block', 'value': { 'page': None, 'text': 'Empty test' }, 'id': 'fc3b0d3d-d316-4271-9e31-84919558188a' }, ])) parent_page = Page.objects.get(url_path='/home/existing-child-page/') parent_page.add_child(instance=page) digest = digest_for_source('local', str(page.id)) response = self.client.get( '/wagtail-transfer/api/pages/%d/?digest=%s' % (page.id, digest)) data = json.loads(response.content) # result should have a mapping for the page we just created, and its parent page_mappings = filter( lambda mapping: mapping[0] == 'wagtailcore.page', data['mappings']) self.assertEqual(len(list(page_mappings)), 2)
def test_correct_digest(self): digest = digest_for_source( 'local', 'child_of=root&fields=parent%2Cchildren&limit=20&offset=0') response = self.client.get( f'/wagtail-transfer/api/chooser/pages/?child_of=root&fields=parent%2Cchildren&limit=20&offset=0&digest={digest}' ) self.assertEqual(response.status_code, 200)
def test_streamfield_with_page_links(self): # Check that page links in a complex nested StreamField - with StreamBlock, StructBlock, and ListBlock - # are all picked up in mappings page = PageWithStreamField( title="I have a streamfield", body=json.dumps([{ 'type': 'link_block', 'value': { 'page': 1, 'text': 'Test' }, 'id': 'fc3b0d3d-d316-4271-9e31-84919558188a' }, { 'type': 'page', 'value': 2, 'id': 'c6d07d3a-72d4-445e-8fa5-b34107291176' }, { 'type': 'stream', 'value': [{ 'type': 'page', 'value': 3, 'id': '8c0d7de7-4f77-4477-be67-7d990d0bfb82' }], 'id': '21ffe52a-c0fc-4ecc-92f1-17b356c9cc94' }, { 'type': 'list_of_pages', 'value': [5], 'id': '17b972cb-a952-4940-87e2-e4eb00703997' }])) parent_page = Page.objects.get(url_path='/home/existing-child-page/') parent_page.add_child(instance=page) digest = digest_for_source('local', str(page.id)) response = self.client.get( '/wagtail-transfer/api/pages/%d/?digest=%s' % (page.id, digest)) data = json.loads(response.content) # test PageChooserBlock in StructBlock self.assertIn( ['wagtailcore.page', 1, '11111111-1111-1111-1111-111111111111'], data['mappings']) # test un-nested PageChooserBlock self.assertIn( ['wagtailcore.page', 2, "22222222-2222-2222-2222-222222222222"], data['mappings']) # test PageChooserBlock in StreamBlock self.assertIn( ['wagtailcore.page', 3, "33333333-3333-3333-3333-333333333333"], data['mappings']) # test PageChooserBlock in ListBlock self.assertIn( ['wagtailcore.page', 5, "00017017-5555-5555-5555-555555555555"], data['mappings'])
def test_list_snippet_models(self, get, post): # Test the model chooser view. get_params = "models=True" digest = digest_for_source('local', get_params) response = self.client.get( f"https://www.example.com/wagtail-transfer/api/chooser/models/?{get_params}&digest={digest}" ) self.assertEqual(response.status_code, 200) content = json.loads(response.content.decode("utf-8")) self.assertEqual(content['meta']['total_count'], 1) snippet = content['items'][0] self.assertEqual(snippet['model_label'], 'tests.category') self.assertEqual(snippet['name'], 'Category')
def test_parental_many_to_many(self): page = PageWithParentalManyToMany(title="This page has lots of ads!") advert_2 = Advert.objects.get(id=2) advert_3 = Advert.objects.get(id=3) page.ads = [advert_2, advert_3] parent_page = Page.objects.get(url_path='/home/existing-child-page/') parent_page.add_child(instance=page) digest = digest_for_source('local', str(page.id)) response = self.client.get('/wagtail-transfer/api/pages/%d/?digest=%s' % (page.id, digest)) data = json.loads(response.content) self.assertIn(['tests.advert', 2, "adadadad-2222-2222-2222-222222222222"], data['mappings']) self.assertIn(['tests.advert', 3, "adadadad-3333-3333-3333-333333333333"], data['mappings']) self.assertEqual({2, 3}, set(data['objects'][0]['fields']['ads']))
def test_streamfield_with_rich_text(self): # Check that page references within a RichTextBlock in StreamField are found correctly page = PageWithStreamField(title="My streamfield rich text block has a link", body=json.dumps([{'type': 'rich_text', 'value': '<p>I link to a <a id="1" linktype="page">page</a>.</p>', 'id': '7d4ee3d4-9213-4319-b984-45be4ded8853'}])) parent_page = Page.objects.get(url_path='/home/existing-child-page/') parent_page.add_child(instance=page) digest = digest_for_source('local', str(page.id)) response = self.client.get('/wagtail-transfer/api/pages/%d/?digest=%s' % (page.id, digest)) data = json.loads(response.content) self.assertIn(['wagtailcore.page', 1, '11111111-1111-1111-1111-111111111111'], data['mappings'])
def test(self, get): get.return_value.status_code = 200 get.return_value.content = b'test content' response = self.client.get( '/admin/wagtail-transfer/api/chooser-proxy/staging/foo?bar=baz', HTTP_ACCEPT='application/json') digest = digest_for_source('staging', 'bar=baz') get.assert_called_once_with( f'https://www.example.com/wagtail-transfer/api/chooser/pages/foo?bar=baz&digest={digest}', headers={'Accept': 'application/json'}, timeout=5) self.assertEqual(response.status_code, 200) self.assertEqual(response.content, b'test content')
def test_streamfield_with_dead_page_link(self): page = PageWithStreamField( title="I have a streamfield", body=json.dumps([ {'type': 'link_block', 'value': {'page': 999, 'text': 'Test'}, 'id': 'fc3b0d3d-d316-4271-9e31-84919558188a'}, ]) ) parent_page = Page.objects.get(url_path='/home/existing-child-page/') parent_page.add_child(instance=page) digest = digest_for_source('local', str(page.id)) response = self.client.get('/wagtail-transfer/api/pages/%d/?digest=%s' % (page.id, digest)) data = json.loads(response.content) self.assertTrue(any( model == 'wagtailcore.page' and id == 999 for model, id, uid in data['mappings'] ))
def test_streamfield_with_page_links_in_new_listblock_format(self): if not has_new_listblock_format(): self.skipTest( "This version of Wagtail does not use the UUID ListBlock format" ) page = PageWithStreamField( title="I have a streamfield", body=json.dumps([ { 'type': 'list_of_captioned_pages', 'value': [{ 'type': 'item', 'value': { 'page': 5, 'text': 'a caption' }, 'id': '8c0d7de7-4f77-4477-be67-7d990d0bfb82' }], 'id': '21ffe52a-c0fc-4ecc-92f1-17b356c9cc94' }, ])) parent_page = Page.objects.get(url_path='/home/existing-child-page/') parent_page.add_child(instance=page) digest = digest_for_source('local', str(page.id)) response = self.client.get( '/wagtail-transfer/api/pages/%d/?digest=%s' % (page.id, digest)) data = json.loads(response.content) # test PageChooserBlock in ListBlock self.assertIn( ['wagtailcore.page', 5, "00017017-5555-5555-5555-555555555555"], data['mappings'])
def get(self, page_id, recursive=True): digest = digest_for_source('local', str(page_id)) return self.client.get('/wagtail-transfer/api/pages/%d/?digest=%s&recursive=%s' % (page_id, digest, str(recursive).lower()))
def get_parameters(self, initial_get='models=true'): digest = digest_for_source('local', initial_get) return f'?{initial_get}&digest={digest}'
def get(self, page_id): digest = digest_for_source('local', str(page_id)) return self.client.get('/wagtail-transfer/api/pages/%d/?digest=%s' % (page_id, digest))