diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2018-04-20 16:12:20 -0700 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2018-04-20 16:17:48 -0700 |
commit | cc85fa69262b6e937e9d675808ca779d15c6fd85 (patch) | |
tree | 1ed07b144819f39da895ae088fd78c75b77237d2 | |
parent | 5fa778fcf771b2512844e43e19e5785260ee0452 (diff) | |
download | fatcat-cc85fa69262b6e937e9d675808ca779d15c6fd85.tar.gz fatcat-cc85fa69262b6e937e9d675808ca779d15c6fd85.zip |
refactor tests around more
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | tests/api.py (renamed from tests/backend.py) | 126 | ||||
-rw-r--r-- | tests/fixtures.py | 57 | ||||
-rw-r--r-- | tests/frontend.py | 32 | ||||
-rw-r--r-- | tests/models.py | 87 | ||||
-rw-r--r-- | tests/routes.py | 20 |
6 files changed, 171 insertions, 155 deletions
@@ -21,3 +21,7 @@ Use `pipenv` (which you can install with `pip`). Run tests: pipenv run pytest + + # for coverage: + pipenv run pytest --cov --cov-report html + diff --git a/tests/backend.py b/tests/api.py index 6346744d..31a25245 100644 --- a/tests/backend.py +++ b/tests/api.py @@ -1,133 +1,13 @@ -import os import json import pytest +import unittest +import tempfile import fatcat import fatcat.sql from fatcat.models import * -import unittest -import tempfile - -## Helpers ################################################################## - -def check_entity_fields(e): - for key in ('rev', 'is_live', 'redirect_id'): - assert key in e - for key in ('id',): - assert e[key] is not None - -def check_release(e): - for key in ('work', 'release_type'): - assert key in e - for key in ('title'): - assert e[key] is not None - for key in ('refs', 'creators'): - assert type(e[key]) == list - -def check_creator(e): - for key in ('name',): - assert e[key] is not None - -def check_container(e): - for key in ('name',): - assert e[key] is not None - -def check_file(e): - for key in ('size', 'sha1'): - assert e[key] is not None - -@pytest.fixture -def app(): - fatcat.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' - fatcat.app.testing = True - fatcat.app.debug = True - fatcat.db.session.remove() - fatcat.db.drop_all() - fatcat.db.create_all() - fatcat.sql.populate_db() - return fatcat.app.test_client() - - -## Model Tests ############################################################### - -def test_example_works(app): - fatcat.dummy.insert_example_works() - -def test_random_works(app): - fatcat.dummy.insert_random_works() - -def test_load_crossref(app): - with open('./tests/files/crossref-works.2018-01-21.badsample.json', 'r') as f: - raw = [json.loads(l) for l in f.readlines() if len(l) > 3] - for obj in raw: - fatcat.sql.add_crossref_via_model(obj) - -def test_schema_release_rev(app): - assert ReleaseRev.query.count() == 0 - e = { - "title": "Bogus title", - "release_type": "book", - "creators": [], - "refs": [], - } - model = release_rev_schema.load(e) - fatcat.db.session.add(model.data) - fatcat.db.session.commit() - assert ReleaseRev.query.count() == 1 - model_after = ReleaseRev.query.first() - serial = release_rev_schema.dump(model_after).data - #check_release(serial) - for k in e.keys(): - assert e[k] == serial[k] - -def test_schema_creator_rev(app): - assert ReleaseRev.query.count() == 0 - e = { - "name": "Robin (Batman)", - } - model = creator_rev_schema.load(e) - fatcat.db.session.add(model.data) - fatcat.db.session.commit() - assert CreatorRev.query.count() == 1 - model_after = CreatorRev.query.first() - serial = creator_rev_schema.dump(model_after).data - check_creator(serial) - for k in e.keys(): - assert e[k] == serial[k] - -def test_schema_container_rev(app): - assert ReleaseRev.query.count() == 0 - e = { - "name": "Papers Monthly", - } - model = container_rev_schema.load(e) - fatcat.db.session.add(model.data) - fatcat.db.session.commit() - assert ContainerRev.query.count() == 1 - model_after = ContainerRev.query.first() - serial = container_rev_schema.dump(model_after).data - check_container(serial) - for k in e.keys(): - assert e[k] == serial[k] - -def test_schema_file_rev(app): - assert ReleaseRev.query.count() == 0 - e = { - "sha1": "asdf", - "size": 6, - } - model = file_rev_schema.load(e) - print(model) - fatcat.db.session.add(model.data) - fatcat.db.session.commit() - assert FileRev.query.count() == 1 - model_after = FileRev.query.first() - serial = file_rev_schema.dump(model_after).data - check_file(serial) - for k in e.keys(): - assert e[k] == serial[k] +from fixtures import * -## API Tests ################################################################# def test_health(app): rv = app.get('/health') diff --git a/tests/fixtures.py b/tests/fixtures.py new file mode 100644 index 00000000..9176b8c5 --- /dev/null +++ b/tests/fixtures.py @@ -0,0 +1,57 @@ + +import pytest +import fatcat +import fatcat.sql +from fatcat.models import * + + +@pytest.fixture +def app(): + fatcat.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' + fatcat.app.testing = True + fatcat.app.debug = True + fatcat.db.session.remove() + fatcat.db.drop_all() + fatcat.db.create_all() + fatcat.sql.populate_db() + return fatcat.app.test_client() + +@pytest.fixture +def rich_app(app): + assert app.post('/v0/work', + data=json.dumps(dict( + title="dummy", + work_type="thing", + extra=dict(a=1, b="zing"))), + headers={"content-type": "application/json"} + ).status_code == 200 + return app + + +## Helpers ################################################################## + +def check_entity_fields(e): + for key in ('rev', 'is_live', 'redirect_id'): + assert key in e + for key in ('id',): + assert e[key] is not None + +def check_release(e): + for key in ('work', 'release_type'): + assert key in e + for key in ('title'): + assert e[key] is not None + for key in ('refs', 'creators'): + assert type(e[key]) == list + +def check_creator(e): + for key in ('name',): + assert e[key] is not None + +def check_container(e): + for key in ('name',): + assert e[key] is not None + +def check_file(e): + for key in ('size', 'sha1'): + assert e[key] is not None diff --git a/tests/frontend.py b/tests/frontend.py deleted file mode 100644 index e177f8c0..00000000 --- a/tests/frontend.py +++ /dev/null @@ -1,32 +0,0 @@ - -import os -import json -import pytest -import fatcat -import fatcat.sql -from fatcat.models import * -import unittest -import tempfile - - -@pytest.fixture -def app(): - fatcat.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' - fatcat.app.testing = True - fatcat.app.debug = True - fatcat.db.session.remove() - fatcat.db.drop_all() - fatcat.db.create_all() - fatcat.sql.populate_db() - return fatcat.app.test_client() - - -def test_static_routes(app): - - for route in ('/health', '/robots.txt', '/', '/about'): - rv = app.get(route) - assert rv.status_code == 200 - - assert app.get("/static/bogus/route").status_code == 404 - - diff --git a/tests/models.py b/tests/models.py new file mode 100644 index 00000000..e969992b --- /dev/null +++ b/tests/models.py @@ -0,0 +1,87 @@ + +import json +import pytest +import unittest +import tempfile +import fatcat +import fatcat.sql +from fatcat.models import * +from fixtures import * + + +def test_example_works(app): + fatcat.dummy.insert_example_works() + +def test_random_works(app): + fatcat.dummy.insert_random_works() + +def test_load_crossref(app): + with open('./tests/files/crossref-works.2018-01-21.badsample.json', 'r') as f: + raw = [json.loads(l) for l in f.readlines() if len(l) > 3] + for obj in raw: + fatcat.sql.add_crossref_via_model(obj) + +def test_schema_release_rev(app): + assert ReleaseRev.query.count() == 0 + e = { + "title": "Bogus title", + "release_type": "book", + "creators": [], + "refs": [], + } + model = release_rev_schema.load(e) + fatcat.db.session.add(model.data) + fatcat.db.session.commit() + assert ReleaseRev.query.count() == 1 + model_after = ReleaseRev.query.first() + serial = release_rev_schema.dump(model_after).data + #check_release(serial) + for k in e.keys(): + assert e[k] == serial[k] + +def test_schema_creator_rev(app): + assert ReleaseRev.query.count() == 0 + e = { + "name": "Robin (Batman)", + } + model = creator_rev_schema.load(e) + fatcat.db.session.add(model.data) + fatcat.db.session.commit() + assert CreatorRev.query.count() == 1 + model_after = CreatorRev.query.first() + serial = creator_rev_schema.dump(model_after).data + check_creator(serial) + for k in e.keys(): + assert e[k] == serial[k] + +def test_schema_container_rev(app): + assert ReleaseRev.query.count() == 0 + e = { + "name": "Papers Monthly", + } + model = container_rev_schema.load(e) + fatcat.db.session.add(model.data) + fatcat.db.session.commit() + assert ContainerRev.query.count() == 1 + model_after = ContainerRev.query.first() + serial = container_rev_schema.dump(model_after).data + check_container(serial) + for k in e.keys(): + assert e[k] == serial[k] + +def test_schema_file_rev(app): + assert ReleaseRev.query.count() == 0 + e = { + "sha1": "asdf", + "size": 6, + } + model = file_rev_schema.load(e) + print(model) + fatcat.db.session.add(model.data) + fatcat.db.session.commit() + assert FileRev.query.count() == 1 + model_after = FileRev.query.first() + serial = file_rev_schema.dump(model_after).data + check_file(serial) + for k in e.keys(): + assert e[k] == serial[k] diff --git a/tests/routes.py b/tests/routes.py new file mode 100644 index 00000000..47b99e30 --- /dev/null +++ b/tests/routes.py @@ -0,0 +1,20 @@ + +import json +import pytest +import fatcat +import fatcat.sql +import tempfile +from fatcat.models import * +from fixtures import * + + +def test_static_routes(rich_app): + app = rich_app + + for route in ('/health', '/robots.txt', '/', '/about'): + rv = app.get(route) + assert rv.status_code == 200 + + assert app.get("/static/bogus/route").status_code == 404 + + |