def test_suites_have_packages_once(self, app): """A package can either belong to a suite or not; it cannot belong twice.""" n1 = Namespace(name='Hello') p1 = Package(name='Dog Bog', namespace=n1) with pytest.raises(sqlalchemy.exc.IntegrityError): s = Suite(name='Everything', packages=[p1, p1]) s.save()
def route_create_suite(suite): suite_slug = slugify(suite) existing = Suite.get(suite_slug) if existing is not None: raise SuiteAlreadyExistsErrorResponse(suite) suite = Suite(name=suite).save() return suite_schema.jsonify(suite)
def test_suites_have_packages(self, app): n1 = Namespace(name='Hello') p1 = Package(name='Dog Bog', namespace=n1) n2 = Namespace(name='Bello') p2 = Package(name='Trog Mog', namespace=n2) s = Suite(name='Everything', packages=[p1, p2]) s.save() assert set(s.packages) == set([p1, p2])
def test_delete_suite(self, app, client): n = Namespace(name='Hello') p = Package(name='Dog Bog', namespace=n) s = Suite(name="Suite", packages=[p]) s.save() response = client.delete(f"/api/v1/suites/{s.slug}/") assert response.status_code == 200 assert Suite.query.count() == 0
def test_get_single_suite(self, app, client): n = Namespace(name='Hello') p = Package(name='Dog Bog', namespace=n) s = Suite(name="Suite", packages=[p]) s.save() response = client.get(f"/api/v1/suites/{s.slug}/") assert response.status_code == 200 assert response.json['packages'] == packages_schema.dump([p]).data assert response.json['slug'] == s.slug
def test_query_packages_belonging_to_suite(self, app): n1 = Namespace(name='Hello') p1 = Package(name='Dog Bog', namespace=n1) n2 = Namespace(name='Bello') p2 = Package(name='Trog Mog', namespace=n2) s = Suite(name='Everything', packages=[p1, p2]) s.save() packages = Package.query.filter(Package.suites.contains(s)).all() assert set(packages) == set([p1, p2])
def test_packages_have_suites(self, app): """Packages belong to suites through a backref.""" n1 = Namespace(name='Hello') p1 = Package(name='Dog Bog', namespace=n1) n2 = Namespace(name='Bello') p2 = Package(name='Trog Mog', namespace=n2) s = Suite(name='Everything', packages=[p1, p2]) s.save() assert p1.suites == [s] assert p2.suites == [s]
def test_update_suite_remove_packages(self, app, client): n = Namespace(name='Hello') p = Package(name='Dog Bog', namespace=n) s = Suite(name="Suite", packages=[p]) s.save() assert s.packages == [p] response = client.put(f"/api/v1/suites/{s.slug}/packages", json=[]) assert response.status_code == 200 assert s.packages == []
def get_suite(suite_slug): match = Suite.get(suite_slug) if match is None: raise SuiteNotFoundErrorResponse(suite_slug) return match
def test_update_suite_packages_packages_must_exist(self, app, client): s = Suite(name="Suite", packages=[]) s.save() n = Namespace(name='Hello') p1 = Package(name='Dog Bog', namespace=n) p1.save() response = client.put(f"/api/v1/suites/{s.slug}/packages", json=["hello/dog-bog", "hello/mog"]) assert response.status_code == 400 assert s.packages == [] response = client.put(f"/api/v1/suites/{s.slug}/packages", json=["hello/dog-bog"]) assert response.status_code == 200 assert s.packages == [p1]
def test_update_suite_packages(self, app, client): s = Suite(name="Suite", packages=[]) s.save() n = Namespace(name='Hello') p1 = Package(name='Dog Bog', namespace=n) p2 = Package(name='Mog', namespace=n) app.db.session.add(p1) app.db.session.add(p2) app.db.session.add(n) app.db.session.commit() response = client.put(f"/api/v1/suites/{s.slug}/packages", json=["hello/dog-bog", "hello/mog"]) assert response.status_code == 200 assert response.json['packages'] == packages_schema.dump([p1, p2]).data assert p1.suites == [s] assert p2.suites == [s] assert set(s.packages) == set([p1, p2])
def test_append_package_after_creation(self, app): n1 = Namespace(name='Hello') p1 = Package(name='Dog Bog', namespace=n1) n2 = Namespace(name='Bello') p2 = Package(name='Trog Mog', namespace=n2) s = Suite(name='Everything', packages=[p1]) s.save() assert s.packages == [p1] s.packages.append(p2) s.save() assert s.packages == [p1, p2]
def suite(self, namespace, package, app): suite = Suite(name='Package Suite', packages=[package]) suite.save() return suite