def test_expand_twice(): a1 = Asset(asset_type='survey', content={'survey': [{'type': 'note', 'label::English': 'english', 'hint::English': 'hint', }]}) a1.adjust_content_on_save() assert 'translations' in a1.content assert len(a1.content['translations']) > 0 assert 'translated' in a1.content assert len(a1.content['translated']) > 0 assert sorted(a1.content['translated']) == ['hint', 'label']
def test_expand_twice(): a1 = Asset(asset_type='survey', content={'survey': [{'type': 'note', 'label::English': 'english', 'hint::English': 'hint', }]}) a1.adjust_content_on_save() assert 'translations' in a1.content assert len(a1.content['translations']) > 0 assert 'translated' in a1.content assert len(a1.content['translated']) > 0 assert sorted(a1.content['translated']) == ['hint', 'label']
def test_import_library_bulk_xls(self): library_sheet_content = [ ['block', 'name', 'type', 'label', 'tag:subject:fungus', 'tag:subject:useless'], ['mushroom', 'cap', 'text', 'Describe the cap', '1', None], ['mushroom', 'gills', 'text', 'Describe the gills', '1', None], ['mushroom', 'spores', 'text', 'Describe the spores', '1', None], [None, 'non_block', 'acknowledge', 'I am not inside a block!', None, '1'], ['mushroom', 'size', 'text', 'Describe the size', '1', None], ['mushroom', 'season', 'select_multiple seasons', 'Found during which seasons?', None, None], [None, 'also_non_block', 'integer', 'I, too, refuse to join a block!', None, '1'], ] choices_sheet_content = [ ['list name', 'name', 'label'], ['seasons', 'spring', 'Spring'], ['seasons', 'summer', 'Summer'], ['seasons', 'fall', 'Fall'], ['seasons', 'winter', 'Winter'], ] content = ( ('library', library_sheet_content), ('choices', choices_sheet_content), ) task_data = self._construct_xls_for_import( content, name='Collection created from bulk library import' ) post_url = reverse('api_v2:importtask-list') response = self.client.post(post_url, task_data) assert response.status_code == status.HTTP_201_CREATED detail_response = self.client.get(response.data['url']) assert detail_response.status_code == status.HTTP_200_OK assert detail_response.data['status'] == 'complete' # Transform the XLS sheets and rows into asset content for comparison # with the results of the import # Discarding the first (`block`) column and any tag columns, combine # the first row (headers) with subsequent 'mushroom' rows headers = [ col for col in library_sheet_content[0][1:] if not col.startswith('tag:') ] mushroom_block_survey = [ # We don't have to remove the tag columns from each row, because # `zip()` stops once it reaches the end of `headers` dict(zip(headers, row[1:])) for row in library_sheet_content[1:] if row[0] == 'mushroom' ] # Transform the choices for the 'mushroom' block into a list of dicts mushroom_block_choices = [ dict(zip(choices_sheet_content[0], row)) for row in choices_sheet_content[1:] ] # Create the in-memory only asset, but adjust its contents as if we # were saving it to the database mushroom_block_asset = Asset( content={ 'survey': mushroom_block_survey, 'choices': mushroom_block_choices, } ) mushroom_block_asset.adjust_content_on_save() # Similarly create the in-memory assets for the simpler, non-block # questions non_block_assets = [] for row in library_sheet_content: if row[0] is not None: continue question_asset = Asset( content={'survey': [dict(zip(headers, row[1:]))]} ) question_asset.adjust_content_on_save() non_block_assets.append(question_asset) # Find the new collection created by the import created_details = detail_response.data['messages']['created'][0] assert created_details['kind'] == 'collection' created_collection = Asset.objects.get(uid=created_details['uid']) assert created_collection.name == task_data['name'] created_children = created_collection.children.order_by('date_created') assert len(created_children) == 3 # Verify the imported block created_block = created_children[0] assert created_block.asset_type == ASSET_TYPE_BLOCK self._assert_assets_contents_equal(created_block, mushroom_block_asset) self._assert_assets_contents_equal( created_block, mushroom_block_asset, sheet='choices' ) # Verify the imported non-block questions created_questions = created_children[1:] for q in created_questions: assert q.asset_type == ASSET_TYPE_QUESTION self._assert_assets_contents_equal( created_questions[0], non_block_assets[0] ) self._assert_assets_contents_equal( created_questions[1], non_block_assets[1] ) # Check that tags were assigned correctly tagged_as_fungus = Asset.objects.filter_by_tag_name( 'subject:fungus' ).filter(parent=created_collection).order_by('date_created') assert tagged_as_fungus.count() == 1 self._assert_assets_contents_equal( tagged_as_fungus[0], mushroom_block_asset ) tagged_as_useless = Asset.objects.filter_by_tag_name( 'subject:useless' ).filter(parent=created_collection).order_by('date_created') assert tagged_as_useless.count() == 2 self._assert_assets_contents_equal( tagged_as_useless[0], non_block_assets[0] ) self._assert_assets_contents_equal( tagged_as_useless[1], non_block_assets[1] )