def test_properties(): crate = ROCrate() crate_name = "new crate" crate.name = crate_name assert crate.name == crate_name crate_description = "this is a new crate" crate.description = crate_description assert crate.description == crate_description assert crate.datePublished == crate.root_dataset.datePublished assert isinstance(crate.root_dataset.datePublished, datetime.datetime) assert isinstance(crate.root_dataset["datePublished"], str) crate_datePublished = datetime.datetime.now() crate.datePublished = crate_datePublished assert crate.datePublished == crate_datePublished new_person = crate.add_person('#001', {'name': 'Lee Ritenour'}) crate.creator = new_person assert crate.creator is new_person assert isinstance(crate.creator, Person) assert crate.creator['name'] == 'Lee Ritenour' assert crate.creator.type == 'Person' new_person2 = crate.add_person('#002', {'name': 'Lee Ritenour'}) crate.creator = [new_person, new_person2] assert isinstance(crate.creator, list) assert crate.creator[0] is new_person assert crate.creator[1] is new_person2
def test_properties(self): crate = ROCrate() new_person = crate.add_person('001', {'name': 'Lee Ritenour'}) crate.creator = new_person self.assertIsInstance(crate.creator, Person) self.assertEqual(crate.creator['name'], 'Lee Ritenour') new_person2 = crate.add_person('002', {'name': 'Lee Ritenour'}) crate.creator = [new_person, new_person2] self.assertIsInstance(crate.creator, list)
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_contextual_entities(self): crate = ROCrate() new_person = crate.add_person('joe', {'name': 'Joe Pesci'}) person_dereference = crate.dereference('#joe') person_prop = person_dereference.properties() self.assertEqual(person_prop['@type'], 'Person') self.assertEqual(person_prop['name'], 'Joe Pesci') self.assertEqual(new_person.properties(), person_prop)
def test_uuid(): crate = ROCrate() new_person = crate.add_person(name="No Identifier") jsonld = new_person.as_jsonld() assert "Person" == jsonld["@type"] assert jsonld["@id"].startswith("#") # Check it made a valid UUIDv4 u = uuid.UUID(jsonld["@id"][1:]) assert 4 == u.version
def test_contextual_entities(): crate = ROCrate() new_person = crate.add_person('#joe', {'name': 'Joe Pesci'}) person_dereference = crate.dereference('#joe') assert person_dereference is new_person assert person_dereference.type == 'Person' person_prop = person_dereference.properties() assert person_prop['@type'] == 'Person' assert person_prop['name'] == 'Joe Pesci' assert not new_person.datePublished
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": "./"}