def test_archive_failure_different_name_same_sha(self): file_tree = file_tree_factory(0, 0, 0) fake_file = file_factory() fake_file2 = file_factory(sha256=fake_file['extra']['hashes']['sha256']) file_tree['children'] = [fake_file2] node = factories.NodeFactory(creator=self.user) data = { ('q_' + fake_file['name']): { 'value': fake.word(), 'extra': [{ 'sha256': fake_file['extra']['hashes']['sha256'], 'viewUrl': '/project/{0}/files/osfstorage{1}'.format( node._id, fake_file['path'] ), 'selectedFileName': fake_file['name'], 'nodeId': node._id }] } } schema = generate_schema_from_data(data) draft = factories.DraftRegistrationFactory(branched_from=node, registration_schema=schema, registered_metadata=data) with test_utils.mock_archive(node, schema=schema, data=data, autocomplete=True, autoapprove=True) as registration: with mock.patch.object(BaseStorageAddon, '_get_file_tree', mock.Mock(return_value=file_tree)): job = factories.ArchiveJobFactory(initiator=registration.creator) draft.registered_node = registration draft.save() with assert_raises(ArchivedFileNotFound): archive_success(registration._id, job._id)
def test_archive_success_same_file_in_component(self): file_tree = file_tree_factory(3, 3, 3) selected = select_files_from_tree(file_tree).values()[0] child_file_tree = file_tree_factory(0, 0, 0) child_file_tree['children'] = [selected] node = factories.NodeFactory(creator=self.user) child = factories.NodeFactory(creator=self.user, parent=node) data = { ('q_' + selected['name']): { 'value': fake.word(), 'extra': [{ 'sha256': selected['extra']['hashes']['sha256'], 'viewUrl': '/project/{0}/files/osfstorage{1}'.format( child._id, selected['path'] ), 'selectedFileName': selected['name'], 'nodeId': child._id }] } } schema = generate_schema_from_data(data) with test_utils.mock_archive(node, schema=schema, data=data, autocomplete=True, autoapprove=True) as registration: with mock.patch.object(BaseStorageAddon, '_get_file_tree', mock.Mock(return_value=file_tree)): job = factories.ArchiveJobFactory(initiator=registration.creator) archive_success(registration._id, job._id) registration.reload() child_reg = registration.nodes[0] for key, question in registration.registered_meta[schema._id].items(): assert_in(child_reg._id, question['extra'][0]['viewUrl'])
def test_archive_success_different_name_same_sha(self): file_tree = file_tree_factory(0, 0, 0) fake_file = file_factory() fake_file2 = file_factory(sha256=fake_file['extra']['hashes']['sha256']) file_tree['children'] = [fake_file, fake_file2] node = factories.NodeFactory(creator=self.user) data = { ('q_' + fake_file['name']): { 'value': fake.word(), 'extra': [{ 'sha256': fake_file['extra']['hashes']['sha256'], 'viewUrl': '/project/{0}/files/osfstorage{1}'.format( node._id, fake_file['path'] ), 'selectedFileName': fake_file['name'], 'nodeId': node._id }] } } schema = generate_schema_from_data(data) with test_utils.mock_archive(node, schema=schema, data=data, autocomplete=True, autoapprove=True) as registration: with mock.patch.object(BaseStorageAddon, '_get_file_tree', mock.Mock(return_value=file_tree)): job = factories.ArchiveJobFactory(initiator=registration.creator) archive_success(registration._id, job._id) for key, question in registration.registered_meta[schema._id].items(): assert_equal(question['extra'][0]['selectedFileName'], fake_file['name'])
def test_archive_success_with_deeply_nested_schema(self): node = factories.NodeFactory(creator=self.user) file_trees, selected_files, node_index = generate_file_tree([node]) data = { ('q_' + selected_file['name']): { 'value': fake.word(), 'extra': [{ 'selectedFileName': selected_file['name'], 'nodeId': node._id, 'sha256': sha256, 'viewUrl': '/project/{0}/files/osfstorage{1}'.format(node._id, selected_file['path']) }] } for sha256, selected_file in selected_files.items() } schema = generate_schema_from_data(data) with test_utils.mock_archive(node, schema=schema, data=data, autocomplete=True, autoapprove=True) as registration: with mock.patch.object(BaseStorageAddon, '_get_file_tree', mock.Mock(return_value=file_trees[node._id])): job = factories.ArchiveJobFactory(initiator=registration.creator) archive_success(registration._id, job._id) registration.reload() for key, question in registration.registered_meta[schema._id].items(): target = None if isinstance(question['value'], dict): target = [v for v in question['value'].values() if 'extra' in v and 'sha256' in v['extra'][0]][0] elif 'extra' in question and 'sha256' in question['extra'][0]: target = question if target: assert_in(registration._id, target['extra'][0]['viewUrl']) assert_not_in(node._id, target['extra'][0]['viewUrl']) del selected_files[target['extra'][0]['sha256']] else: # check non-file questions are unmodified assert_equal(data[key]['value'], question['value']) assert_false(selected_files)
def test_archive_success(self): node = factories.NodeFactory(creator=self.user) file_trees, selected_files, node_index = generate_file_tree([node]) data = generate_metadata( file_trees, selected_files, node_index ) schema = generate_schema_from_data(data) with test_utils.mock_archive(node, schema=schema, data=data, autocomplete=True, autoapprove=True) as registration: with mock.patch.object(BaseStorageAddon, '_get_file_tree', mock.Mock(return_value=file_trees[node._id])): job = factories.ArchiveJobFactory(initiator=registration.creator) archive_success(registration._id, job._id) registration.reload() for key, question in registration.registered_meta[schema._id].items(): target = None if isinstance(question.get('value'), dict): target = [v for v in question['value'].values() if 'extra' in v and 'sha256' in v['extra'][0]][0] elif 'extra' in question and 'hashes' in question['extra'][0]: target = question if target: assert_in(registration._id, target['extra'][0]['viewUrl']) assert_not_in(node._id, target['extra'][0]['viewUrl']) del selected_files[target['extra'][0]['sha256']] else: # check non-file questions are unmodified assert_equal(data[key]['value'], question['value']) assert_false(selected_files)
def test_archive_success_with_components(self): node = factories.NodeFactory(creator=self.user) comp1 = factories.NodeFactory(parent=node, creator=self.user) factories.NodeFactory(parent=comp1, creator=self.user) factories.NodeFactory(parent=node, creator=self.user) nodes = [n for n in node.node_and_primary_descendants()] file_trees, selected_files, node_index = generate_file_tree(nodes) data = generate_metadata(file_trees, selected_files, node_index) schema = generate_schema_from_data(data) with test_utils.mock_archive(node, schema=schema, data=copy.deepcopy(data), autocomplete=True, autoapprove=True) as registration: def mock_get_file_tree(self, *args, **kwargs): return file_trees[self.owner.registered_from._id] with mock.patch.object(BaseStorageAddon, '_get_file_tree', mock_get_file_tree): job = factories.ArchiveJobFactory( initiator=registration.creator) archive_success(registration._id, job._id) registration.reload() for key, question in registration.registered_meta[ schema._id].items(): target = None if isinstance(question['value'], dict): target = [ v for v in question['value'].values() if 'extra' in v and 'sha256' in v['extra'][0] ] elif 'extra' in question and 'sha256' in question['extra']: target = question if target: node_id = re.search(r'^/project/(?P<node_id>\w{5}).+$', target[0]['extra'][0] ['viewUrl']).groupdict()['node_id'] assert_in(node_id, [ r._id for r in registration.node_and_primary_descendants() ]) if target[0]['extra'][0]['sha256'] in selected_files: del selected_files[target[0]['extra'][0]['sha256']] else: # check non-file questions are unmodified assert_equal(data[key]['value'], question['value']) # ensure each selected file was checked assert_false(selected_files)
def test_target_info(self): target = ArchiveTarget(name='neon-archive') target.save() job = factories.ArchiveJobFactory() job.target_addons.add(target) result = job.target_info() assert_equal(len(result), 1) item = result[0] assert_equal(item['name'], target.name) assert_equal(item['status'], target.status) assert_equal(item['stat_result'], target.stat_result) assert_equal(item['errors'], target.errors)