def test_latest_matching_collection_version_is_returned(self): collection_key = ndb.Key(Library, 'collection/1') collection_v1 = Version(id='v1.0.0', sha='x', status=Status.ready, parent=collection_key).put() collection_v2 = Version(id='v2.0.0', sha='x', status=Status.ready, parent=collection_key).put() collection_v3 = Version(id='v3.0.0', sha='x', status=Status.ready, parent=collection_key).put() element_key = ndb.Key(Library, 'ele/ment') element_v1 = Version(id='v1.0.0', sha='x', status=Status.ready, parent=element_key).put() CollectionReference.ensure(element_key, collection_v1, '^1.0.0') CollectionReference.ensure(element_key, collection_v2, '^1.0.0') CollectionReference.ensure(element_key, collection_v3, '^2.0.0') collections = yield Version.collections_for_key_async(element_v1) collection_keys = [collection.key for collection in collections] # Only latest matching version of the collection should be present. self.assertEqual(collection_keys, [ collection_v2, ])
def get(self, owner, repo, version=None): self.response.headers['Access-Control-Allow-Origin'] = '*' self.response.headers['Content-Type'] = 'application/json' library_key = ndb.Key(Library, Library.id(owner, repo)) if version is None: version = yield Library.default_version_for_key_async(library_key) if version is None: self.response.set_status(404) return version_key = ndb.Key(Library, library_key.id(), Version, version) collection_versions = yield Version.collections_for_key_async(version_key) collection_futures = [] for collection_version in collection_versions: collection_futures.append(LibraryMetadata.brief_async(collection_version.key.parent(), collection_version.key.id())) collections = [] for future in collection_futures: collection_result = yield future if collection_result is not None: collections.append(collection_result) result = { 'results': collections, 'count': len(collections), } self.response.write(json.dumps(result))
def test_stale_ref_is_removed(self): # Stale since the collection version doesn't actually exist. collection_v0 = ndb.Key(Library, 'collection/1', Version, 'v0.5.0') element_key = ndb.Key(Library, 'ele/ment') element_v1 = Version(id='v1.0.0', sha='x', status=Status.ready, parent=element_key).put() ref0 = CollectionReference.ensure(element_key, collection_v0, '^1.0.0') collections = yield Version.collections_for_key_async(element_v1) collection_keys = [collection.key for collection in collections] self.assertIsNone(ref0.get()) self.assertEqual(collection_keys, [])
def test_stale_ref_is_removed(self): # Stale since the collection version doesn't actually exist. collection_v0 = ndb.Key(Library, 'collection/1', Version, 'v0.5.0') element_key = ndb.Key(Library, 'ele/ment') element_v1 = Version(id='v1.0.0', sha='x', status=Status.ready, parent=element_key).put() ref0 = CollectionReference.ensure(element_key, collection_v0, '^1.0.0') collections = yield Version.collections_for_key_async(element_v1) collection_keys = [collection.key for collection in collections] self.assertIsNone(ref0.get()) self.assertEqual(collection_keys, [])
def test_latest_matching_collection_version_is_returned(self): collection_key = ndb.Key(Library, 'collection/1') collection_v1 = Version(id='v1.0.0', sha='x', status=Status.ready, parent=collection_key).put() collection_v2 = Version(id='v2.0.0', sha='x', status=Status.ready, parent=collection_key).put() collection_v3 = Version(id='v3.0.0', sha='x', status=Status.ready, parent=collection_key).put() element_key = ndb.Key(Library, 'ele/ment') element_v1 = Version(id='v1.0.0', sha='x', status=Status.ready, parent=element_key).put() CollectionReference.ensure(element_key, collection_v1, '^1.0.0') CollectionReference.ensure(element_key, collection_v2, '^1.0.0') CollectionReference.ensure(element_key, collection_v3, '^2.0.0') collections = yield Version.collections_for_key_async(element_v1) collection_keys = [collection.key for collection in collections] # Only latest matching version of the collection should be present. self.assertEqual(collection_keys, [ collection_v2, ])