]> git.lizzy.rs Git - cheatdb.git/blob - app/tests/test_api.py
8009656051c082c92a347f5473a4fed845b04734
[cheatdb.git] / app / tests / test_api.py
1 import pytest
2 from app import app
3 from app.default_data import populate_test_data
4 from app.models import db, License, Tag, User, UserRank, Package
5 from utils import client, recreate_db, parse_json
6 from utils import is_str, is_int, is_optional
7
8 def validate_package_list(packages, strict=False):
9         valid_keys = {
10                 "author", "name", "release",
11                 "short_description", "thumbnail",
12                 "title", "type"
13         }
14
15         for package in packages:
16                 assert set(package.keys()).issubset(valid_keys)
17
18                 assert is_str(package.get("author"))
19                 assert is_str(package.get("name"))
20                 if strict:
21                         assert is_int(package.get("release"))
22                 else:
23                         assert is_optional(int, package.get("release"))
24                 assert is_str(package.get("short_description"))
25                 assert is_optional(str, package.get("thumbnail"))
26                 assert is_str(package.get("title"))
27                 assert is_str(package.get("type"))
28
29
30 def test_packages_empty(client):
31         """Start with a blank database."""
32
33         rv = client.get("/api/packages/")
34         assert parse_json(rv.data) == []
35
36
37 def test_packages_with_contents(client):
38         """Start with a test database."""
39
40
41         populate_test_data(db.session)
42         db.session.commit()
43
44         rv = client.get("/api/packages/")
45
46         packages = parse_json(rv.data)
47
48         assert len(packages) > 0
49         assert len(packages) == Package.query.filter_by(approved=True).count()
50
51         validate_package_list(packages)
52
53
54 def test_packages_with_query(client):
55         """Start with a test database."""
56
57         populate_test_data(db.session)
58         db.session.commit()
59
60         rv = client.get("/api/packages/?q=food")
61
62         packages = parse_json(rv.data)
63
64         assert len(packages) == 2
65
66         validate_package_list(packages)
67
68         assert (packages[0]["name"] == "food" and packages[1]["name"] == "food_sweet") or \
69                 (packages[1]["name"] == "food" and packages[0]["name"] == "food_sweet")
70
71
72 def test_packages_with_protocol_high(client):
73         """Start with a test database."""
74
75         populate_test_data(db.session)
76         db.session.commit()
77
78         rv = client.get("/api/packages/?protocol_version=40")
79
80         packages = parse_json(rv.data)
81
82         assert len(packages) == 4
83
84         for package in packages:
85                 assert package["name"] != "mesecons"
86
87         validate_package_list(packages, True)
88
89
90 def test_packages_with_protocol_low(client):
91         """Start with a test database."""
92
93         populate_test_data(db.session)
94         db.session.commit()
95
96         rv = client.get("/api/packages/?protocol_version=20")
97
98         packages = parse_json(rv.data)
99
100         assert len(packages) == 4
101
102         for package in packages:
103                 assert package["name"] != "awards"
104
105         validate_package_list(packages, True)