class CachingTest(unittest.TestCase): def setUp(self): from Products.ZSPARQLMethod.Method import ZSPARQLMethod self.method = ZSPARQLMethod('sq', "Test Method", SPARQL_URL) from Products.StandardCacheManagers.RAMCacheManager import RAMCache self.cache = RAMCache() self.cache.__dict__.update({ 'threshold': 100, 'cleanup_interval': 300, 'request_vars': () }) self.method.ZCacheable_getCache = Mock(return_value=self.cache) self.method.ZCacheable_setManagerId('_cache_for_test') def test_invalidate(self): self.cache.ZCache_invalidate = Mock() self.method.manage_edit(_mock_request()) self.cache.ZCache_invalidate.assert_called_once_with(self.method) @patch('Products.ZSPARQLMethod.Method.query_and_get_result') def test_cached_queries(self, mock_query): onto_name = EIONET_RDF + '/ontology/name' self.method.query = "SELECT * WHERE {$subject <%s> ?value}" % onto_name self.method.arg_spec = u"subject:iri" mock_query.return_value = { 'rows': [], 'var_names': [], 'has_result': True } self.method(subject=EIONET_RDF + '/languages/en') self.method(subject=EIONET_RDF + '/languages/da') self.method(subject=EIONET_RDF + '/languages/da') self.method(subject=EIONET_RDF + '/languages/en') self.method(subject=EIONET_RDF + '/languages/fr') self.method(subject=EIONET_RDF + '/languages/fr') self.method(subject=EIONET_RDF + '/languages/fr') self.method(subject=EIONET_RDF + '/languages/fr') self.method(subject=EIONET_RDF + '/languages/da') self.assertEqual(len(mock_query.call_args_list), 3)