summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md4
-rw-r--r--tests/api.py (renamed from tests/backend.py)126
-rw-r--r--tests/fixtures.py57
-rw-r--r--tests/frontend.py32
-rw-r--r--tests/models.py87
-rw-r--r--tests/routes.py20
6 files changed, 171 insertions, 155 deletions
diff --git a/README.md b/README.md
index 0d7c8d23..dbf6aef7 100644
--- a/README.md
+++ b/README.md
@@ -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
+
+