def test_file_writing(self): crate = ROCrate() # dereference added files sample_file = self.test_data_dir / 'sample_file.txt' file_returned = crate.add_file(sample_file) self.assertEqual(file_returned.id, 'sample_file.txt') file_returned_subdir = crate.add_file(sample_file, 'subdir/sample_file2.csv') self.assertEqual(file_returned_subdir.id, 'subdir/sample_file2.csv') test_dir_path = self.test_data_dir / 'test_add_dir' test_dir_entity = crate.add_directory(test_dir_path, 'test_add_dir') self.assertTrue(test_dir_entity is None) # is this intended? out_path = pathlib.Path(tempfile.gettempdir()) / 'ro_crate_out' crate.name = 'Test crate' new_person = crate.add_person('001', {'name': 'Lee Ritenour'}) crate.creator = new_person out_path.mkdir(exist_ok=True) crate.write_crate(out_path) metadata_path = out_path / 'ro-crate-metadata.jsonld' self.assertTrue(metadata_path.exists()) preview_path = out_path / 'ro-crate-preview.html' self.assertTrue(preview_path.exists()) file1 = out_path / 'sample_file.txt' file2 = out_path / 'subdir' / 'sample_file2.csv' file_subdir = out_path / 'test_add_dir' / 'sample_file_subdir.txt' self.assertTrue(file1.exists()) self.assertTrue(file2.exists()) self.assertTrue(file_subdir.exists())
def test_test_suites_prop(test_data_dir): top_dir = test_data_dir / "ro-crate-galaxy-sortchangecase" wf_path = top_dir / "sort-and-change-case.ga" crate = ROCrate() wf = crate.add(ComputationalWorkflow(crate, str(wf_path), wf_path.name)) crate.mainEntity = wf suites = set() assert not crate.test_suites s1 = crate.add(TestSuite(crate, "s1")) suites.add(s1) crate.root_dataset["mentions"] = [s1] assert suites == set(crate.test_suites) s2 = crate.add(TestSuite(crate, "s2")) crate.root_dataset["about"] = [s2] suites.add(s2) assert suites == set(crate.test_suites) test_dir = crate.add_directory(dest_path="test") assert crate.test_dir is test_dir assert suites == set(crate.test_suites) # no "about" yet s3 = crate.add(TestSuite(crate, "s3")) suites.add(s3) test_dir["about"] = [s3] assert suites == set(crate.test_suites) # check for duplicates crate.root_dataset["about"] = [s1, s2] assert sum(_ is s1 for _ in crate.test_suites) == 1
def test_dereferencing_equivalent_id(test_data_dir, name): test_ids = [name, f'./{name}', f'.//{name}', f'./a/../{name}'] path = test_data_dir / name if name.endswith("/"): path.mkdir() test_ids.extend([f"{name}/", f"{name}//"]) else: path.touch() for id_ in test_ids: crate = ROCrate() if name.endswith("/"): entity = crate.add_directory(path, name) else: entity = crate.add_file(path, name) deref_entity = crate.dereference(id_) assert deref_entity is entity
def test_write_zip(self): crate = ROCrate() # dereference added files sample_file = self.test_data_dir / 'sample_file.txt' file_returned = crate.add_file(sample_file) self.assertEqual(file_returned.id, 'sample_file.txt') file_returned_subdir = crate.add_file(sample_file, 'subdir/sample_file2.csv') self.assertEqual(file_returned_subdir.id, 'subdir/sample_file2.csv') test_dir_path = self.test_data_dir / 'test_add_dir' test_dir_entity = crate.add_directory(test_dir_path, 'test_add_dir') self.assertTrue(test_dir_entity is None) # is this intended? # write to zip zip_path = tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.zip') crate.write_zip(zip_path.name) zip_path.close() read_zip = zipfile.ZipFile(zip_path.name, mode='r') self.assertEqual(read_zip.getinfo('sample_file.txt').file_size, 12) self.assertEqual( read_zip.getinfo('test_add_dir/sample_file_subdir.txt').file_size, 18)
def test_file_writing(test_data_dir, tmpdir, helpers, to_zip): crate = ROCrate() crate_name = 'Test crate' crate.name = crate_name creator_id = '001' creator_name = 'Lee Ritenour' new_person = crate.add_person(creator_id, {'name': creator_name}) crate.creator = new_person sample_file_id = 'sample_file.txt' sample_file2_id = 'subdir/sample_file2.csv' test_dir_id = 'test_add_dir/' data_entity_ids = [sample_file_id, sample_file2_id, test_dir_id] file_subdir_id = 'sample_file_subdir.txt' sample_file = test_data_dir / sample_file_id file_returned = crate.add_file(sample_file) assert file_returned.id == sample_file_id file_returned_subdir = crate.add_file(sample_file, sample_file2_id) assert file_returned_subdir.id == sample_file2_id test_dir_path = test_data_dir / test_dir_id test_dir_entity = crate.add_directory(test_dir_path, test_dir_id) assert isinstance(test_dir_entity, Dataset) out_path = tmpdir / 'ro_crate_out' if to_zip: zip_path = tmpdir / 'ro_crate_out.crate.zip' crate.write_zip(zip_path) with zipfile.ZipFile(zip_path, "r") as zf: zf.extractall(out_path) else: out_path.mkdir() crate.write_crate(out_path) metadata_path = out_path / helpers.METADATA_FILE_NAME assert metadata_path.exists() preview_path = out_path / helpers.PREVIEW_FILE_NAME assert preview_path.exists() file1 = out_path / sample_file_id file2 = out_path / sample_file2_id file_subdir = out_path / test_dir_id / file_subdir_id assert file1.exists() with open(sample_file) as f1, open(file1) as f2: sample_file_content = f1.read() assert sample_file_content == f2.read() assert file2.exists() with open(file2) as f: assert sample_file_content == f.read() assert file_subdir.exists() with open(test_dir_path / file_subdir_id) as f1, open(file_subdir) as f2: assert f1.read() == f2.read() json_entities = helpers.read_json_entities(out_path) helpers.check_crate(json_entities, data_entity_ids=data_entity_ids) root = json_entities["./"] assert root["name"] == crate_name assert "datePublished" in root formatted_creator_id = f"#{creator_id}" assert root["creator"] == {"@id": formatted_creator_id} assert formatted_creator_id in json_entities assert json_entities[formatted_creator_id]["name"] == creator_name assert helpers.PREVIEW_FILE_NAME in json_entities preview = json_entities[helpers.PREVIEW_FILE_NAME] assert preview["@type"] == "CreativeWork" assert preview["about"] == {"@id": "./"}