--- /dev/null
+def exercise_projects(backend):
+ PROJECT_1_NAME = "1"
+ PROJECT_1_NEW_NAME = "1_1"
+ PROJECT_2_NAME = "2"
+
+ projects = list(backend.get_projects())
+ assert len(projects) == 0
+
+ # Verify add/getters
+ proj1Id = backend.add_project(PROJECT_1_NAME)
+
+ proj = backend.get_project(proj1Id)
+ assert proj["name"] == PROJECT_1_NAME
+ assert proj["id"] == proj1Id
+ assert proj["isVisible"]
+ assert not proj["isMeta"]
+
+ projects = list(backend.get_projects())
+ assert len(projects) == 1
+ assert proj == projects[0]
+
+ lookupProj = backend.lookup_project(PROJECT_1_NAME)
+ assert proj == lookupProj
+
+ # verify name/getters
+ backend.set_project_name(proj1Id, PROJECT_1_NEW_NAME)
+
+ proj = backend.get_project(proj1Id)
+ assert proj["name"] == PROJECT_1_NEW_NAME
+ assert proj["id"] == proj1Id
+ assert proj["isVisible"]
+ assert not proj["isMeta"]
+
+ projects = list(backend.get_projects())
+ assert len(projects) == 1
+ assert proj == projects[0]
+
+ lookupProj = backend.lookup_project(PROJECT_1_NEW_NAME)
+ assert proj == lookupProj
+
+ # verify visibility/getters
+ backend.set_project_visibility(proj1Id, False)
+
+ proj = backend.get_project(proj1Id)
+ assert proj["name"] == PROJECT_1_NEW_NAME
+ assert proj["id"] == proj1Id
+ assert not proj["isVisible"]
+ assert not proj["isMeta"]
+
+ projects = list(backend.get_projects())
+ assert len(projects) == 1
+ assert proj == projects[0]
+
+ lookupProj = backend.lookup_project(PROJECT_1_NEW_NAME)
+ assert proj == lookupProj
+
+ # verify second project while modifying first
+ proj2Id = backend.add_project(PROJECT_2_NAME)
+
+ proj = backend.get_project(proj1Id)
+ assert proj["name"] == PROJECT_1_NEW_NAME
+ assert proj["id"] == proj1Id
+ assert not proj["isVisible"]
+ assert not proj["isMeta"]
+
+ lookupProj = backend.lookup_project(PROJECT_1_NEW_NAME)
+ assert proj == lookupProj
+
+ proj = backend.get_project(proj2Id)
+ assert proj["name"] == PROJECT_2_NAME
+ assert proj["id"] == proj2Id
+ assert proj["isVisible"]
+ assert not proj["isMeta"]
+
+ lookupProj = backend.lookup_project(PROJECT_2_NAME)
+ assert proj == lookupProj
+
+ backend.set_project_name(proj1Id, PROJECT_1_NAME)
+
+ proj = backend.get_project(proj1Id)
+ assert proj["name"] == PROJECT_1_NAME
+ assert proj["id"] == proj1Id
+ assert not proj["isVisible"]
+ assert not proj["isMeta"]
+
+ lookupProj = backend.lookup_project(PROJECT_1_NAME)
+ assert proj == lookupProj
+
+ proj = backend.get_project(proj2Id)
+ assert proj["name"] == PROJECT_2_NAME
+ assert proj["id"] == proj2Id
+ assert proj["isVisible"]
+ assert not proj["isMeta"]
+
+ lookupProj = backend.lookup_project(PROJECT_2_NAME)
+ assert proj == lookupProj
+
+ # verify visibility/getters
+ backend.set_project_visibility(proj1Id, True)
+
+ proj = backend.get_project(proj1Id)
+ assert proj["name"] == PROJECT_1_NAME
+ assert proj["id"] == proj1Id
+ assert proj["isVisible"]
+ assert not proj["isMeta"]
+
+ lookupProj = backend.lookup_project(PROJECT_1_NAME)
+ assert proj == lookupProj
+
+ proj = backend.get_project(proj2Id)
+ assert proj["name"] == PROJECT_2_NAME
+ assert proj["id"] == proj2Id
+ assert proj["isVisible"]
+ assert not proj["isMeta"]
+
+ lookupProj = backend.lookup_project(PROJECT_2_NAME)
+ assert proj == lookupProj
+
+
+def exercise_locations(backend):
+ locations = list(backend.get_locations())
+ assert len(locations) == 0
--- /dev/null
+import os
+
+import test_backend
+
+import sys
+sys.path.append("../src")
+
+import file_backend
+import cache_backend
+
+
+class TestCacheBackend(object):
+
+ def test_projects(self):
+ fileBackend = file_backend.FileBackend(os.tmpnam())
+ backend = cache_backend.LazyCacheBackend(fileBackend)
+ test_backend.exercise_projects(backend)
+
+ # Confirm cache matches actual
+ fileProjects = list(fileBackend.get_projects())
+ fileProjects.sort()
+ cacheProjects = list(backend.get_projects())
+ cacheProjects.sort()
+ assert fileProjects == cacheProjects
+
+ def test_locations(self):
+ fileBackend = file_backend.FileBackend(os.tmpnam())
+ backend = cache_backend.LazyCacheBackend(fileBackend)
+ test_backend.exercise_locations(backend)
+
+ # Confirm cache matches actual
+ fileLocations = list(fileBackend.get_locations())
+ fileLocations.sort()
+ cacheLocations = list(backend.get_locations())
+ cacheLocations.sort()
+ assert fileLocations == cacheLocations