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