Example #1
0
 def test_recordtype1_data(self):
     t = RecordType(self.testcoll, "type1", self.testsite)
     self.assertEqual(t.get_id(), "type1")
     self.assertEqual(t.get_type_id(), "_type")
     self.assertIn("/c/testcoll/_annalist_collection/types/type1/",
                   t.get_url())
     self.assertEqual(TestBaseUri + "/c/testcoll/d/_type/type1/",
                      t.get_view_url())
     t.set_values(recordtype_create_values(type_id="type1"))
     td = t.get_values()
     self.assertEqual(set(td.keys()), set(recordtype_value_keys()))
     v = recordtype_values(type_id="type1")
     self.assertDictionaryMatch(td, v)
     return
 def test_recordtype2_data(self):
     t = RecordType(self.testcoll, "type2")
     self.assertEqual(t.get_id(), "type2")
     self.assertEqual(t.get_type_id(), layout.TYPE_TYPEID)
     self.assertIn(
         "/c/testcoll/_annalist_collection/%(type_dir)s/type2/" %
         self.layout, t.get_url())
     self.assertEqual(
         TestBaseUri + "/c/testcoll/d/%(type_typeid)s/type2/" % self.layout,
         t.get_view_url())
     t.set_values(recordtype_create_values(type_id="type2"))
     td = t.get_values()
     self.assertEqual(set(td.keys()), set(recordtype_value_keys()))
     v = recordtype_values(type_id="type2")
     self.assertDictionaryMatch(td, v)
     return
Example #3
0
 def test_recordtype2_data(self):
     t = RecordType(self.testcoll, "type2")
     self.assertEqual(t.get_id(), "type2")
     self.assertEqual(t.get_type_id(), layout.TYPE_TYPEID)
     self.assertIn(
         "/c/testcoll/_annalist_collection/%(type_dir)s/type2/"%self.layout, 
         t.get_url()
         )
     self.assertEqual(
         TestBaseUri + "/c/testcoll/d/%(type_typeid)s/type2/"%self.layout, 
         t.get_view_url()
         )
     t.set_values(recordtype_create_values(type_id="type2"))
     td = t.get_values()
     self.assertEqual(set(td.keys()), set(recordtype_value_keys()))
     v = recordtype_values(type_id="type2")
     self.assertDictionaryMatch(td, v)
     return
class CollectionTypeCacheTest(AnnalistTestCase):
    """
    Tests for collection type and supertype cache classes.
    """
    def setUp(self):
        init_annalist_test_site()
        self.testsite = Site(TestBaseUri, TestBaseDir)
        self.testcoll = Collection(self.testsite, "testcoll")
        self.testcoll1_a = Collection(self.testsite, "testcoll1")
        self.testcoll1_b = Collection(self.testsite, "testcoll1")
        self.testcoll2_a = Collection(self.testsite, "testcoll2")
        self.testcoll2_b = Collection(self.testsite, "testcoll2")
        self.typecache = CollectionTypeCache()
        self.type1 = RecordType(self.testcoll1_a, "type1")
        self.type1.set_values(
            recordtype_create_values(type_id="type1",
                                     type_uri="test:type1",
                                     supertype_uris=[]))
        self.type11 = RecordType(self.testcoll1_a, "type11")
        self.type11.set_values(
            recordtype_create_values(type_id="type11",
                                     type_uri="test:type11",
                                     supertype_uris=["test:type1"]))
        self.type111 = RecordType(self.testcoll1_a, "type111")
        self.type111.set_values(
            recordtype_create_values(type_id="type111",
                                     type_uri="test:type111",
                                     supertype_uris=["test:type11"]))
        self.type12 = RecordType(self.testcoll1_a, "type12")
        self.type12.set_values(
            recordtype_create_values(type_id="type12",
                                     type_uri="test:type12",
                                     supertype_uris=["test:type1"]))
        self.type2 = RecordType(self.testcoll1_a, "type2")
        self.type2.set_values(
            recordtype_create_values(type_id="type2",
                                     type_uri="test:type2",
                                     supertype_uris=[]))
        self.type21 = RecordType(self.testcoll1_a, "type21")
        self.type21.set_values(
            recordtype_create_values(type_id="type21",
                                     type_uri="test:type21",
                                     supertype_uris=["test:type2"]))
        self.type22 = RecordType(self.testcoll1_a, "type22")
        self.type22.set_values(
            recordtype_create_values(type_id="type22",
                                     type_uri="test:type22",
                                     supertype_uris=["test:type2"]))
        return

    def create_type_record(self, coll, type_entity):
        return RecordType.create(coll, type_entity.get_id(),
                                 type_entity.get_values())

    def create_test_type_entities(self):
        # Create type records in collection data
        self.create_type_record(self.testcoll1_a, self.type1)
        self.create_type_record(self.testcoll1_a, self.type11)
        self.create_type_record(self.testcoll1_a, self.type111)
        self.create_type_record(self.testcoll1_a, self.type12)
        self.create_type_record(self.testcoll1_a, self.type2)
        self.create_type_record(self.testcoll1_a, self.type21)
        self.create_type_record(self.testcoll1_a, self.type22)
        # Add all types to cache
        self.typecache.set_type(self.testcoll1_a, self.type1)
        self.typecache.set_type(self.testcoll1_a, self.type11)
        self.typecache.set_type(self.testcoll1_a, self.type111)
        self.typecache.set_type(self.testcoll1_a, self.type12)
        self.typecache.set_type(self.testcoll1_a, self.type2)
        self.typecache.set_type(self.testcoll1_a, self.type21)
        self.typecache.set_type(self.testcoll1_a, self.type22)
        # Check cache content
        self.expect_site_type_ids = ({
            "_coll", "_enum_list_type", "_enum_render_type",
            "_enum_value_mode", "_enum_value_type", "_field", "_group",
            "_list", "_type", "_user", "_view", "_vocab", "Default_type"
        })
        self.expect_coll_type_ids = ({
            "type1", "type11", "type111", "type12", "type2", "type21", "type22"
        })
        self.expect_all_type_ids = set.union(self.expect_site_type_ids,
                                             self.expect_coll_type_ids)
        retrieve_type_ids = set(
            t.get_id() for t in self.typecache.get_all_types(self.testcoll1_a))
        self.assertEqual(retrieve_type_ids, self.expect_coll_type_ids)
        return

    def tearDown(self):
        resetSitedata(scope="collections")
        return

    def test_empty_cache(self):
        self.assertEqual(set(self.typecache.get_all_types(self.testcoll1_a)),
                         set())
        self.assertEqual(set(self.typecache.get_all_types(self.testcoll1_b)),
                         set())
        self.assertEqual(set(self.typecache.get_all_types(self.testcoll2_a)),
                         set())
        self.assertEqual(set(self.typecache.get_all_types(self.testcoll2_b)),
                         set())
        return

    def test_singleton_cache(self):
        self.assertEqual([
            t.get_uri() for t in self.typecache.get_all_types(self.testcoll1_a)
        ], [])
        # NOTE: if the 'set_type' call also causes cache initialization of all types,
        # including the created type record which is discovered on disk, and the subsequent
        # set_type call returns 'False'.
        self.create_type_record(self.testcoll1_a, self.type1)
        self.assertFalse(self.typecache.set_type(self.testcoll1_a, self.type1))
        # self.assertIsNone(self.testcoll1_a.remove_type("type1"))
        self.assertFalse(self.typecache.set_type(self.testcoll1_a, self.type1))
        self.assertFalse(self.typecache.set_type(self.testcoll1_b, self.type1))
        self.assertEqual(
            self.typecache.get_type(self.testcoll1_a, "type1").get_uri(),
            "test:type1")
        self.assertEqual(
            self.typecache.get_type(self.testcoll1_b, "type1").get_uri(),
            "test:type1")
        self.assertEqual(self.typecache.get_type(self.testcoll1_a, "type2"),
                         None)
        self.assertEqual(self.typecache.get_type(self.testcoll1_b, "type2"),
                         None)
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_a,
                                             "test:type1").get_id(), "type1")
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b,
                                             "test:type1").get_id(), "type1")
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_a, "test:type2"),
            None)
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b, "test:type3"),
            None)
        self.assertEqual([
            t.get_uri() for t in self.typecache.get_all_types(self.testcoll1_a)
        ], ["test:type1"])
        self.assertEqual([
            t.get_uri() for t in self.typecache.get_all_types(self.testcoll1_b)
        ], ["test:type1"])
        self.assertEqual([
            t.get_uri() for t in self.typecache.get_all_types(self.testcoll2_a)
        ], [])
        self.assertEqual([
            t.get_uri() for t in self.typecache.get_all_types(self.testcoll2_b)
        ], [])
        return

    def test_empty_cache_2(self):
        self.typecache.set_type(self.testcoll1_a, self.type1)
        self.assertIsNotNone(
            self.typecache.remove_type(self.testcoll1_a, "type1"))
        self.assertIsNone(self.typecache.remove_type(self.testcoll1_b,
                                                     "type1"))
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll1_a)),
                         [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll1_b)),
                         [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll2_a)),
                         [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll2_b)),
                         [])
        return

    def test_flush_cache(self):
        self.typecache.set_type(self.testcoll1_a, self.type1)
        self.assertTrue(self.typecache.flush_cache(self.testcoll1_a))
        self.assertIsNone(self.typecache.remove_type(self.testcoll1_b,
                                                     "type1"))
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll1_a)),
                         [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll1_b)),
                         [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll2_a)),
                         [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll2_b)),
                         [])
        self.assertTrue(self.typecache.flush_cache(self.testcoll1_b))
        self.assertFalse(self.typecache.flush_cache(self.testcoll1_b))
        return

    # def test_collection_has_cache(self):
    #     # Initial state - no cache
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     # Add type: non-empty cache exists for collection
    #     self.typecache.set_type(self.testcoll1_a, self.type1)
    #     self.assertTrue(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertTrue(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     # Remove type: collection cache is empty
    #     self.assertIsNotNone(self.typecache.remove_type(self.testcoll1_a, "type1"))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     self.assertIsNone(self.typecache.remove_type(self.testcoll1_b, "type1"))
    #     # Flush cache: cache is empty, so effectively no longer exists
    #     self.assertFalse(self.typecache.flush_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     # Add type again: non-empty cache exists for collection
    #     self.typecache.set_type(self.testcoll1_a, self.type1)
    #     self.assertTrue(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertTrue(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     # Flush cache: this time returns True as non-empty cache existed
    #     self.assertTrue(self.typecache.flush_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     self.assertIsNone(self.typecache.remove_type(self.testcoll1_b, "type1"))
    #     return

    def test_get_types_by_uri(self):
        self.create_test_type_entities()
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b,
                                             "test:type1").get_id(), "type1")
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b,
                                             "test:type11").get_id(), "type11")
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b,
                                             "test:type111").get_id(),
            "type111")
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b,
                                             "test:type12").get_id(), "type12")
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b,
                                             "test:type2").get_id(), "type2")
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b,
                                             "test:type21").get_id(), "type21")
        self.assertEqual(
            self.typecache.get_type_from_uri(self.testcoll1_b,
                                             "test:type22").get_id(), "type22")
        return

    def test_get_all_types_scope_coll(self):
        self.create_test_type_entities()
        type_ids = set(t.get_id()
                       for t in self.typecache.get_all_types(self.testcoll1_a))
        self.assertEqual(type_ids, self.expect_coll_type_ids)
        type_ids = set(t.get_id()
                       for t in self.typecache.get_all_types(self.testcoll1_b))
        self.assertEqual(type_ids, self.expect_coll_type_ids)
        return

    def test_get_all_types_scope_all(self):
        self.create_test_type_entities()
        type_ids = set(t.get_id()
                       for t in self.typecache.get_all_types(self.testcoll1_a,
                                                             altscope="all"))
        self.assertEqual(type_ids, self.expect_all_type_ids)
        # type_ids = set(t.get_id() for t in self.typecache.get_all_types(self.testcoll1_b, altscope="all"))
        # self.assertEqual(type_ids, self.expect_all_type_ids)
        return

    def test_get_supertypes(self):
        self.create_test_type_entities()

        def get_supertype_uris(type_uri):
            st_entities = self.typecache.get_type_uri_supertypes(
                self.testcoll1_b, type_uri)
            st_uris = [st.get_uri() for st in st_entities]
            return set(st_uris)

        self.assertEqual(get_supertype_uris("test:type1"), set({}))
        self.assertEqual(get_supertype_uris("test:type11"), {"test:type1"})
        self.assertEqual(get_supertype_uris("test:type111"),
                         {"test:type1", "test:type11"})
        self.assertEqual(get_supertype_uris("test:type12"), {"test:type1"})
        self.assertEqual(get_supertype_uris("test:type2"), set({}))
        self.assertEqual(get_supertype_uris("test:type21"), {"test:type2"})
        self.assertEqual(get_supertype_uris("test:type22"), {"test:type2"})
        return

    def test_get_subtypes(self):
        self.create_test_type_entities()

        def get_subtype_uris(type_uri):
            st_entities = self.typecache.get_type_uri_subtypes(
                self.testcoll1_b, type_uri)
            st_uris = [st.get_uri() for st in st_entities]
            return set(st_uris)

        self.assertEqual(get_subtype_uris("test:type1"),
                         {"test:type11", "test:type111", "test:type12"})
        self.assertEqual(get_subtype_uris("test:type11"), {"test:type111"})
        self.assertEqual(get_subtype_uris("test:type111"), set({}))
        self.assertEqual(get_subtype_uris("test:type12"), set({}))
        self.assertEqual(get_subtype_uris("test:type2"),
                         {"test:type21", "test:type22"})
        self.assertEqual(get_subtype_uris("test:type21"), set({}))
        self.assertEqual(get_subtype_uris("test:type22"), set({}))
        return

    def test_update_supertype(self):
        self.create_test_type_entities()

        def get_supertype_uris(type_uri):
            st_entities = self.typecache.get_type_uri_supertypes(
                self.testcoll1_b, type_uri)
            st_uris = [st.get_uri() for st in st_entities]
            return set(st_uris)

        self.assertEqual(get_supertype_uris("test:type1"), set({}))
        self.assertEqual(get_supertype_uris("test:type11"), {"test:type1"})
        self.assertEqual(get_supertype_uris("test:type111"),
                         {"test:type1", "test:type11"})
        self.assertEqual(get_supertype_uris("test:type12"), {"test:type1"})
        # Update super/sub-type
        self.typecache.remove_type(self.testcoll1_a, "type11")
        self.typecache.set_type(self.testcoll1_a, self.type11)
        # Re-check supertypes
        self.assertEqual(get_supertype_uris("test:type1"), set({}))
        self.assertEqual(get_supertype_uris("test:type11"), {"test:type1"})
        self.assertEqual(get_supertype_uris("test:type111"),
                         {"test:type1", "test:type11"})
        self.assertEqual(get_supertype_uris("test:type12"), {"test:type1"})
        return

    def test_update_subtype(self):
        self.create_test_type_entities()

        def get_subtype_uris(type_uri):
            st_entities = self.typecache.get_type_uri_subtypes(
                self.testcoll1_b, type_uri)
            st_uris = [st.get_uri() for st in st_entities]
            return set(st_uris)

        self.assertEqual(get_subtype_uris("test:type1"),
                         {"test:type11", "test:type111", "test:type12"})
        self.assertEqual(get_subtype_uris("test:type11"), {"test:type111"})
        self.assertEqual(get_subtype_uris("test:type111"), set({}))
        self.assertEqual(get_subtype_uris("test:type12"), set({}))
        # Update super/sub-type
        self.typecache.remove_type(self.testcoll1_a, "type11")
        self.typecache.set_type(self.testcoll1_a, self.type11)
        # Re-check subtypes
        self.assertEqual(get_subtype_uris("test:type1"),
                         {"test:type11", "test:type111", "test:type12"})
        self.assertEqual(get_subtype_uris("test:type11"), {"test:type111"})
        self.assertEqual(get_subtype_uris("test:type111"), set({}))
        self.assertEqual(get_subtype_uris("test:type12"), set({}))
        return
class CollectionTypeCacheTest(AnnalistTestCase):
    """
    Tests for collection type and supertype cache classes.
    """

    def setUp(self):
        init_annalist_test_site()
        self.testsite    = Site(TestBaseUri, TestBaseDir)
        self.testcoll    = Collection(self.testsite, "testcoll")
        self.testcoll1_a = Collection(self.testsite, "testcoll1")
        self.testcoll1_b = Collection(self.testsite, "testcoll1")
        self.testcoll2_a = Collection(self.testsite, "testcoll2")
        self.testcoll2_b = Collection(self.testsite, "testcoll2")
        self.typecache   = CollectionTypeCache()
        self.type1       = RecordType(self.testcoll1_a, "type1")
        self.type1.set_values(
            recordtype_create_values(type_id="type1", type_uri="test:type1", 
                supertype_uris=[]
                )
            )
        self.type11      = RecordType(self.testcoll1_a, "type11")
        self.type11.set_values(
            recordtype_create_values(type_id="type11", type_uri="test:type11", 
                supertype_uris=["test:type1"]
                )
            )
        self.type111     = RecordType(self.testcoll1_a, "type111")
        self.type111.set_values(
            recordtype_create_values(type_id="type111", type_uri="test:type111", 
                supertype_uris=["test:type11"]
                )
            )
        self.type12      = RecordType(self.testcoll1_a, "type12")
        self.type12.set_values(
            recordtype_create_values(type_id="type12", type_uri="test:type12", 
                supertype_uris=["test:type1"]
                )
            )
        self.type2       = RecordType(self.testcoll1_a, "type2")
        self.type2.set_values(
            recordtype_create_values(type_id="type2", type_uri="test:type2", 
                supertype_uris=[]
                )
            )
        self.type21      = RecordType(self.testcoll1_a, "type21")
        self.type21.set_values(
            recordtype_create_values(type_id="type21", type_uri="test:type21", 
                supertype_uris=["test:type2"]
                )
            )
        self.type22      = RecordType(self.testcoll1_a, "type22")
        self.type22.set_values(
            recordtype_create_values(type_id="type22", type_uri="test:type22", 
                supertype_uris=["test:type2"]
                )
            )
        return

    def create_type_record(self, coll, type_entity):
        return RecordType.create(coll, type_entity.get_id(), type_entity.get_values())

    def create_test_type_entities(self):
        # Create type records in collection data
        self.create_type_record(self.testcoll1_a, self.type1)
        self.create_type_record(self.testcoll1_a, self.type11)
        self.create_type_record(self.testcoll1_a, self.type111)
        self.create_type_record(self.testcoll1_a, self.type12)
        self.create_type_record(self.testcoll1_a, self.type2)
        self.create_type_record(self.testcoll1_a, self.type21)
        self.create_type_record(self.testcoll1_a, self.type22)
        # Add all types to cache
        self.typecache.set_type(self.testcoll1_a, self.type1)
        self.typecache.set_type(self.testcoll1_a, self.type11)
        self.typecache.set_type(self.testcoll1_a, self.type111)
        self.typecache.set_type(self.testcoll1_a, self.type12)
        self.typecache.set_type(self.testcoll1_a, self.type2)
        self.typecache.set_type(self.testcoll1_a, self.type21)
        self.typecache.set_type(self.testcoll1_a, self.type22)
        # Check cache content
        self.expect_site_type_ids = (
            { "_coll"
            , "_enum_list_type", "_enum_render_type", "_enum_value_mode", "_enum_value_type"
            , "_field", "_group", "_info", "_list", "_type", "_user", "_view", "_vocab"
            , "Default_type"
            })
        self.expect_coll_type_ids = (
            {"type1", "type11", "type111", "type12", "type2", "type21", "type22"}
            )
        self.expect_all_type_ids = set.union(self.expect_site_type_ids, self.expect_coll_type_ids)
        retrieve_type_ids = set(t.get_id() for t in self.typecache.get_all_types(self.testcoll1_a))
        self.assertEqual(retrieve_type_ids, self.expect_coll_type_ids)
        return

    def tearDown(self):
        resetSitedata(scope="collections")
        return

    def test_empty_cache(self):
        self.assertEqual(set(self.typecache.get_all_types(self.testcoll1_a)), set())
        self.assertEqual(set(self.typecache.get_all_types(self.testcoll1_b)), set())
        self.assertEqual(set(self.typecache.get_all_types(self.testcoll2_a)), set())
        self.assertEqual(set(self.typecache.get_all_types(self.testcoll2_b)), set())
        return

    def test_singleton_cache(self):
        self.assertEqual([t.get_uri() for t in self.typecache.get_all_types(self.testcoll1_a)], [])
        # NOTE: if the 'set_type' call also causes cache initialization of all types, 
        # including the created type record which is discovered on disk, and the subsequent 
        # set_type call returns 'False'.
        self.create_type_record(self.testcoll1_a, self.type1)
        self.assertFalse(self.typecache.set_type(self.testcoll1_a, self.type1))
        # self.assertIsNone(self.testcoll1_a.remove_type("type1"))
        self.assertFalse(self.typecache.set_type(self.testcoll1_a, self.type1))
        self.assertFalse(self.typecache.set_type(self.testcoll1_b, self.type1))
        self.assertEqual(self.typecache.get_type(self.testcoll1_a, "type1").get_uri(), "test:type1")
        self.assertEqual(self.typecache.get_type(self.testcoll1_b, "type1").get_uri(), "test:type1")
        self.assertEqual(self.typecache.get_type(self.testcoll1_a, "type2"), None)
        self.assertEqual(self.typecache.get_type(self.testcoll1_b, "type2"), None)
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_a, "test:type1").get_id(), "type1")
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type1").get_id(), "type1")
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_a, "test:type2"), None)
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type3"), None)
        self.assertEqual([t.get_uri() for t in self.typecache.get_all_types(self.testcoll1_a)], ["test:type1"])
        self.assertEqual([t.get_uri() for t in self.typecache.get_all_types(self.testcoll1_b)], ["test:type1"])
        self.assertEqual([t.get_uri() for t in self.typecache.get_all_types(self.testcoll2_a)], [])
        self.assertEqual([t.get_uri() for t in self.typecache.get_all_types(self.testcoll2_b)], [])
        return

    def test_empty_cache_2(self):
        self.typecache.set_type(self.testcoll1_a, self.type1)
        self.assertIsNotNone(self.typecache.remove_type(self.testcoll1_a, "type1"))
        self.assertIsNone(self.typecache.remove_type(self.testcoll1_b, "type1"))
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll1_a)), [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll1_b)), [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll2_a)), [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll2_b)), [])
        return

    def test_flush_cache(self):
        self.typecache.set_type(self.testcoll1_a, self.type1)
        self.assertTrue(self.typecache.flush_cache(self.testcoll1_a))
        self.assertIsNone(self.typecache.remove_type(self.testcoll1_b, "type1"))
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll1_a)), [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll1_b)), [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll2_a)), [])
        self.assertEqual(list(self.typecache.get_all_types(self.testcoll2_b)), [])
        self.assertTrue(self.typecache.flush_cache(self.testcoll1_b))
        self.assertFalse(self.typecache.flush_cache(self.testcoll1_b))
        return

    # def test_collection_has_cache(self):
    #     # Initial state - no cache
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     # Add type: non-empty cache exists for collection
    #     self.typecache.set_type(self.testcoll1_a, self.type1)
    #     self.assertTrue(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertTrue(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     # Remove type: collection cache is empty
    #     self.assertIsNotNone(self.typecache.remove_type(self.testcoll1_a, "type1"))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     self.assertIsNone(self.typecache.remove_type(self.testcoll1_b, "type1"))
    #     # Flush cache: cache is empty, so effectively no longer exists
    #     self.assertFalse(self.typecache.flush_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     # Add type again: non-empty cache exists for collection
    #     self.typecache.set_type(self.testcoll1_a, self.type1)
    #     self.assertTrue(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertTrue(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     # Flush cache: this time returns True as non-empty cache existed
    #     self.assertTrue(self.typecache.flush_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll1_b))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_a))
    #     self.assertFalse(self.typecache.collection_has_cache(self.testcoll2_b))
    #     self.assertIsNone(self.typecache.remove_type(self.testcoll1_b, "type1"))
    #     return

    def test_get_types_by_uri(self):
        self.create_test_type_entities()
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type1").get_id(),   "type1")
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type11").get_id(),  "type11")
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type111").get_id(), "type111")
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type12").get_id(),  "type12")
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type2").get_id(),   "type2")
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type21").get_id(),  "type21")
        self.assertEqual(self.typecache.get_type_from_uri(self.testcoll1_b, "test:type22").get_id(),  "type22")
        return

    def test_get_all_types_scope_coll(self):
        self.create_test_type_entities()
        type_ids = set(t.get_id() for t in self.typecache.get_all_types(self.testcoll1_a))
        self.assertEqual(type_ids, self.expect_coll_type_ids)
        type_ids = set(t.get_id() for t in self.typecache.get_all_types(self.testcoll1_b))
        self.assertEqual(type_ids, self.expect_coll_type_ids)
        return

    def test_get_all_types_scope_all(self):
        self.create_test_type_entities()
        type_ids = set(
            t.get_id() 
            for t in self.typecache.get_all_types(self.testcoll1_a, altscope="all")
            )
        self.assertEqual(type_ids, self.expect_all_type_ids)
        # type_ids = set(t.get_id() for t in self.typecache.get_all_types(self.testcoll1_b, altscope="all"))
        # self.assertEqual(type_ids, self.expect_all_type_ids)
        return

    def test_get_supertypes(self):
        self.create_test_type_entities()
        def get_supertype_uris(type_uri):
            st_entities = self.typecache.get_type_uri_supertypes(self.testcoll1_b, type_uri)
            st_uris     = [ st.get_uri() for st in st_entities ]
            return set(st_uris)
        self.assertEqual(get_supertype_uris("test:type1"),   set({}))
        self.assertEqual(get_supertype_uris("test:type11"),  {"test:type1"})
        self.assertEqual(get_supertype_uris("test:type111"), {"test:type1", "test:type11"})
        self.assertEqual(get_supertype_uris("test:type12"),  {"test:type1"})
        self.assertEqual(get_supertype_uris("test:type2"),   set({}))
        self.assertEqual(get_supertype_uris("test:type21"),  {"test:type2"})
        self.assertEqual(get_supertype_uris("test:type22"),  {"test:type2"})
        return

    def test_get_subtypes(self):
        self.create_test_type_entities()
        def get_subtype_uris(type_uri):
            st_entities = self.typecache.get_type_uri_subtypes(self.testcoll1_b, type_uri)
            st_uris     = [ st.get_uri() for st in st_entities ]
            return set(st_uris)
        self.assertEqual(get_subtype_uris("test:type1"),   {"test:type11", "test:type111", "test:type12"})
        self.assertEqual(get_subtype_uris("test:type11"),  {"test:type111"})
        self.assertEqual(get_subtype_uris("test:type111"), set({}))
        self.assertEqual(get_subtype_uris("test:type12"),  set({}))
        self.assertEqual(get_subtype_uris("test:type2"),   {"test:type21", "test:type22"})
        self.assertEqual(get_subtype_uris("test:type21"),  set({}))
        self.assertEqual(get_subtype_uris("test:type22"),  set({}))
        return

    def test_update_supertype(self):
        self.create_test_type_entities()
        def get_supertype_uris(type_uri):
            st_entities = self.typecache.get_type_uri_supertypes(self.testcoll1_b, type_uri)
            st_uris     = [ st.get_uri() for st in st_entities ]
            return set(st_uris)
        self.assertEqual(get_supertype_uris("test:type1"),   set({}))
        self.assertEqual(get_supertype_uris("test:type11"),  {"test:type1"})
        self.assertEqual(get_supertype_uris("test:type111"), {"test:type1", "test:type11"})
        self.assertEqual(get_supertype_uris("test:type12"),  {"test:type1"})
        # Update super/sub-type
        self.typecache.remove_type(self.testcoll1_a, "type11")
        self.typecache.set_type(self.testcoll1_a, self.type11)
        # Re-check supertypes
        self.assertEqual(get_supertype_uris("test:type1"),   set({}))
        self.assertEqual(get_supertype_uris("test:type11"),  {"test:type1"})
        self.assertEqual(get_supertype_uris("test:type111"), {"test:type1", "test:type11"})
        self.assertEqual(get_supertype_uris("test:type12"),  {"test:type1"})
        return

    def test_update_subtype(self):
        self.create_test_type_entities()
        def get_subtype_uris(type_uri):
            st_entities = self.typecache.get_type_uri_subtypes(self.testcoll1_b, type_uri)
            st_uris     = [ st.get_uri() for st in st_entities ]
            return set(st_uris)
        self.assertEqual(get_subtype_uris("test:type1"),   {"test:type11", "test:type111", "test:type12"})
        self.assertEqual(get_subtype_uris("test:type11"),  {"test:type111"})
        self.assertEqual(get_subtype_uris("test:type111"), set({}))
        self.assertEqual(get_subtype_uris("test:type12"),  set({}))
        # Update super/sub-type
        self.typecache.remove_type(self.testcoll1_a, "type11")
        self.typecache.set_type(self.testcoll1_a, self.type11)
        # Re-check subtypes
        self.assertEqual(get_subtype_uris("test:type1"),   {"test:type11", "test:type111", "test:type12"})
        self.assertEqual(get_subtype_uris("test:type11"),  {"test:type111"})
        self.assertEqual(get_subtype_uris("test:type111"), set({}))
        self.assertEqual(get_subtype_uris("test:type12"),  set({}))
        return