def platform(session): platform = Platform(name="foo", slug="fixture-platform", type=PlatformType.INFO) session.add(platform) yield platform session.delete(platform)
def post(self): """Create a new platform :raises IntegrityError: Raised when the slug is not unique """ args = platform_arguments.parse_args() platform = Platform(**args) self.session.add(platform) self.session.commit() return platform
def test_source_merging(self, session): platform1 = Platform(name="Platform 1", slug="platform-1", base_score=200) platform2 = Platform(name="Platform 2", slug="platform-2", base_score=300) session.add_all([platform1, platform2]) object1 = ExternalObject(type=ExternalObjectType.MOVIE) object2 = ExternalObject(type=ExternalObjectType.MOVIE) session.add_all([object1, object2]) value1 = Value( external_object=object1, type=ValueType.TITLE, text="Foo", sources=[ValueSource(platform=platform1, score_factor=200)], ) value2 = Value( external_object=object2, type=ValueType.TITLE, text="Foo", sources=[ValueSource(platform=platform2, score_factor=300)], ) session.add_all([value1, value2]) session.commit() object2.merge_and_delete(object1, session) session.expire_all() assert len(object1.values) == 1 assert value1.external_object == object1 assert value1.score == (200 * 200 + 300 * 300) assert len(value1.sources) == 2 assert session.query(ExternalObject).count() == 1
def test_put(client, session): platform = Platform(name="foo", slug="bar", type=PlatformType.INFO, country="US") session.add(platform) session.commit() response = client.put("/api/platforms/{}".format(platform.id), data={"name": "baz"}) assert response.json["name"] == "baz" session.refresh(platform) assert platform.name == "baz"
def test_delete(client, session): platform = Platform(name="foo", slug="bar", type=PlatformType.INFO, country="US") session.add(platform) session.commit() platform_id = platform.id session.expire(platform) response = client.delete("/api/platforms/{}".format(platform.id)) assert response.json == "ok" assert session.query(PlatformGroup).get(platform_id) is None
def test_list(client, session): response = client.get("/api/platforms/") assert response.json["items"] == [] platform = Platform(name="foo", slug="bar", type=PlatformType.INFO, country="US") session.add(platform) session.commit() response = client.get("/api/platforms/") assert response.json["items"] == [{ "id": platform.id, "type": "info", "slug": platform.slug, "name": platform.name, "country": platform.country, "group": None, }]
def test_get(client, session): group = PlatformGroup(name="foo") session.add(group) session.commit() response = client.get("/api/groups/{}".format(group.id)) assert response.json == { "id": group.id, "name": group.name, "platforms": [] } platform = Platform(name="bar", slug="bar", type=PlatformType.INFO, country="US", group=group) session.add(group) session.commit() response = client.get("/api/groups/{}".format(group.id)) assert response.json == { "id": group.id, "name": group.name, "platforms": [{ "id": platform.id, "type": "info", "slug": platform.slug, "name": platform.name, "country": platform.country, }], } session.delete(group) session.commit() response = client.get("/api/groups/{}".format(group.id)) assert response.status_code == 404
def test_get(client, session): platform = Platform(name="foo", slug="bar", type=PlatformType.INFO, country="US") session.add(platform) session.commit() response = client.get("/api/platforms/{}".format(platform.id)) assert response.json == { "id": platform.id, "type": "info", "slug": platform.slug, "name": platform.name, "country": platform.country, "group": None, } group = PlatformGroup(name="baz", platforms=[platform]) session.add(group) session.commit() response = client.get("/api/platforms/{}".format(platform.id)) assert response.json["group"] == {"id": group.id, "name": group.name}
def test_list(self, client, app, session): platform = Platform(name="Platform") provider = Provider(name="Provider", slug="provider") session.add(platform, provider) session.add(ProviderPlatform(platform=platform, provider=provider)) session.commit() with captured_templates(app) as templates: rv = client.get("/providers/") assert rv.status_code == 200 assert len(templates) == 1 template, context = templates[0] assert template.name == "providers/list.html" assert "page" in context assert "filter_form" in context assert "ordering" in context assert len(context["page"].items) == 1 assert context["page"].items[0] == provider assert len(context["page"].items[0].platforms) == 1 assert context["page"].items[0].platforms[0] == platform assert context["ordering"] is None
def test_value_moving(self, session): # This tests for moving a lot of values at once. There was an issue of # value disappearing, hence this test. platform1 = Platform(name="Platform 1", slug="platform-1", base_score=200) platform2 = Platform(name="Platform 2", slug="platform-2", base_score=300) session.add_all([platform1, platform2]) object1 = ExternalObject(type=ExternalObjectType.MOVIE) object2 = ExternalObject(type=ExternalObjectType.MOVIE) session.add_all([object1, object2]) # The first 5 values are on both platforms, while the 5 others are only # on the second one. With this, the first 5 should only have their # sources moved, while the 5 others should have the whole value moved values1 = [ Value( external_object=object1, type=ValueType.TITLE, text="{}".format(i), sources=[ ValueSource(platform=platform1, score_factor=100 * i) ], ) for i in range(5) ] values2 = [ Value( external_object=object2, type=ValueType.TITLE, text="{}".format(i), sources=[ ValueSource(platform=platform2, score_factor=100 * i) ], ) for i in range(10) ] session.add_all(values1 + values2) session.commit() object2.merge_and_delete(object1, session) session.expire_all() seen_indexes = set() for value in object1.values: # Retrieve the `i` from the value text index = int(value.text) seen_indexes.add(index) if index < 5: # those should have two sources assert len(value.sources) == 2 assert value.score == index * 100 * (200 + 300) assert value.sources[0].score_factor == index * 100 assert value.sources[1].score_factor == index * 100 else: assert len(value.sources) == 1 assert value.score == index * 100 * 300 assert value.sources[0].platform == platform2 assert value.sources[0].score_factor == index * 100 assert len(seen_indexes) == 10 # all indexes should have been unique assert len(object1.values) == 10 assert session.query(ExternalObject).count() == 1 assert session.query(Value).count() == 10 assert session.query(ValueSource).count() == 15