def test_16_store_error(self): global CACHE global ARCHIVE global ERROR cache.cache = mock_cache models.Record.store = mock_store models.Error.save = mock_error_save # no canonical identifier record = {} ret = workflow.store_results(record) assert "error" in ret # pre-existing error record = {'identifier' : {"id" : "10.1", "type" : "doi", "canonical" : "doi:10.1"}, "queued" : True, "error" : "oops"} ret = workflow.store_results(record) assert "error" in ret assert CACHE.has_key("doi:10.1") assert len(ARCHIVE) == 0 assert not record.get("queued", False) assert "bibjson" in record assert "license" in record['bibjson'] assert record['bibjson']['license'][0]['type'] == "failed-to-obtain-license" assert "identifier" in record["bibjson"] assert len(ERROR) == 1 assert ERROR[0]["identifier"]["canonical"] == "doi:10.1" assert ERROR[0]["error"] == "oops" del CACHE['doi:10.1'] models.Record.store = mock_store_error # realistic looking object record["bibjson"] = { "title" : "mytitle", "license" : [{ "url" : "http://license" }] } record["queued"] = True if "error" in record: del record["error"] ret = workflow.store_results(record) assert len(CACHE) == 0, CACHE assert len(ARCHIVE) == 0, ARCHIVE assert "error" in ret
def test_14_chain(self): global CACHE global ARCHIVE record = {'identifier' : {"id" : "10.1", "type" : "doi", "canonical" : "doi:10.1"}, "queued" : True} config.provider_detection = {"doi" : ["mock_detect_provider"]} config.license_detection = ["mock_licence_plugin"] cache.cache = mock_cache models.Record.store = mock_store # run the chain synchronously record = workflow.detect_provider(record) record = workflow.provider_licence(record) record = workflow.store_results(record) assert "provider" in record assert record["provider"]["url"][0] == "http://provider" assert record.has_key("bibjson") assert record['bibjson'].has_key("license") assert CACHE.has_key("doi:10.1") assert not CACHE["doi:10.1"].has_key("queued") assert len(ARCHIVE) == 1 assert ARCHIVE[0]["title"] == "mytitle" del CACHE['doi:10.1'] del ARCHIVE[0]
def test_15_store(self): global CACHE global ARCHIVE cache.cache = mock_cache models.Record.store = mock_store # first check that we get the right behaviour if no licence is provided record = {'identifier' : {"id" : "10.1", "type" : "doi", "canonical" : "doi:10.1"}, "queued" : True} workflow.store_results(record) assert CACHE.has_key("doi:10.1") assert len(ARCHIVE) == 1 assert not record.get("queued", False) assert "bibjson" in record assert "license" in record['bibjson'] assert record['bibjson']['license'][0]['type'] == "failed-to-obtain-license" assert record["bibjson"]["license"][0]["provenance"]["handler"] == "oag" assert record["bibjson"]["license"][0]["provenance"]["handler_version"] == "0.0" assert "identifier" in record["bibjson"] del CACHE['doi:10.1'] del ARCHIVE[0] # now provide a bibjson record with a licence record["bibjson"] = { "title" : "mytitle", "license" : [{ "url" : "http://license" }] } record["queued"] = True workflow.store_results(record) assert CACHE.has_key("doi:10.1") assert not CACHE["doi:10.1"].get("queued", False) assert len(ARCHIVE) == 1 assert ARCHIVE[0]["title"] == "mytitle" assert not record.get("queued", False) assert "identifier" in record['bibjson'] del CACHE['doi:10.1'] del ARCHIVE[0]
def test_17_chain(self): global CACHE global ARCHIVE record = { 'identifier' : {"id" : "10.1", "type" : "doi", "canonical" : "doi:10.1"}, "queued" : True, "bibjson" : { "license" : [ {"title" : "l1"} ] } } record = models.MessageObject(record=record) record = record.prep_for_backend() # check that this sets up the chainable object correctly assert record.get("licensed", False) assert "bibjson" not in record pdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "plugins", "test_workflow", "test_17") plugin.PluginFactory.load_from_directory(plugin_dir=pdir) cache.cache = mock_cache models.Record.store = mock_store old_check_archive = workflow._check_archive workflow._check_archive = lambda x: {"license" : [{"title" : "l1"}]} # run the chain synchronously record = workflow.detect_provider(record) record = workflow.provider_licence(record) record = workflow.store_results(record) assert "provider" in record assert record["provider"]["url"][0] == "http://provider" assert record.has_key("bibjson") assert record['bibjson'].has_key("license") assert len(record["bibjson"]["license"]) == 2, ARCHIVE # should have picked up the archive copy assert CACHE.has_key("doi:10.1") assert not CACHE["doi:10.1"].get("queued", False) assert len(ARCHIVE) == 1, len(ARCHIVE) assert ARCHIVE[0]["license"][0]["title"] == "mytitle" assert ARCHIVE[0]["license"][1]["title"] == "l1" del CACHE['doi:10.1'] del ARCHIVE[:] workflow._check_archive = old_check_archive
def test_19_store_was_licensed(self): cache.cache = mock_cache models.Record.store = mock_store record = { 'identifier' : {"id" : "10.1", "type" : "doi", "canonical" : "doi:10.1"}, "queued" : True, "bibjson" : { "license" : [ {"title" : "l1"} ] } } record = models.MessageObject(record=record) record = record.prep_for_backend() record = workflow.store_results(record) assert "bibjson" in record # should be a basic bibjson object assert "license" not in record["bibjson"], record