def test_09_detect_provider(self):
     record = {"identifier" : {"id" : "12345"}}
     workflow.detect_provider(record)
     
     # the record should not have changed
     assert not record.has_key('provider')
     
     record['identifier']['type'] = "unknown"
     workflow.detect_provider(record)
     
     # the record should not have changed
     assert not "provider" in record
     
     # check that a plugin is applied
     pdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "plugins", "test_workflow", "test_09_1")
     plugin.PluginFactory.load_from_directory(plugin_dir=pdir)
     
     record['identifier']['type'] = "doi"
     workflow.detect_provider(record)
     assert "provider" in record, record
     assert "url" in record['provider']
     assert record["provider"]["url"][0] == "http://provider"
     
     # now check that the chain continues all the way to the end
     pdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "plugins", "test_workflow", "test_09_2")
     plugin.PluginFactory.load_from_directory(plugin_dir=pdir)
     
     del record['provider']
     workflow.detect_provider(record)
     assert "provider" in record
     assert "url" in record['provider']
     assert "http://provider" in record["provider"]["url"]
 def test_08_detect_provider(self):
     record = {"identifier" : {"id" : "12345"}}
     workflow.detect_provider(record)
     
     # the record should not have changed
     assert not record.has_key('provider')
     
     record['identifier']['type'] = "unknown"
     workflow.detect_provider(record)
     
     # the record should not have changed
     assert not "provider" in record
     
     # check that a plugin is applied
     config.provider_detection = {"doi" : ["mock_detect_provider"]}
     record['identifier']['type'] = "doi"
     workflow.detect_provider(record)
     assert "provider" in record, record
     assert "url" in record['provider']
     assert record["provider"]["url"][0] == "http://provider"
     
     # now check that the chain continues all the way to the end
     config.provider_detection = {"doi" : ["mock_no_provider", "mock_other_detect", "mock_detect_provider"]}
     del record['provider']
     workflow.detect_provider(record)
     assert "provider" in record
     assert "url" in record['provider']
     assert record["provider"]["url"][0] == "http://provider"
 def test_13_provider_licence_error(self):
     pdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "plugins", "test_workflow", "test_13_1")
     plugin.PluginFactory.load_from_directory(plugin_dir=pdir)
     
     # no provider
     record = {}
     ret = workflow.provider_licence(record)
     print ret
     assert "error" in ret
     
     # no plugin to handle provider
     pdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "plugins", "test_workflow", "test_13_2")
     plugin.PluginFactory.load_from_directory(plugin_dir=pdir)
     
     if "error" in record: del record["error"]
     record['provider'] = {"url" : ["testprovider"]}
     ret = workflow.provider_licence(record)
     assert "error" in ret
     
     # some error in license detect
     pdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "plugins", "test_workflow", "test_13_3")
     plugin.PluginFactory.load_from_directory(plugin_dir=pdir)
     
     if "error" in record: del record["error"]
     ret = workflow.provider_licence(record)
     assert "error" in ret
     
     # some error in licence detect and record corrupt
     ret = workflow.detect_provider("whatever")
     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_10_detect_provider_errors(self):
     # Identifier type is none
     record = {"identifier" : {"id" : "12345"}}
     workflow.detect_provider(record)
     assert "error" in record
     
     # detect provider fails
     pdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "plugins", "test_workflow", "test_10")
     plugin.PluginFactory.load_from_directory(plugin_dir=pdir)
     
     del record["error"]
     record['identifier']['type'] = "doi"
     workflow.detect_provider(record)
     assert "error" in record
     
     # detect provider fails and message object corrupt
     ret = workflow.detect_provider("whatever")
     assert "error" in ret
 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