diff options
Diffstat (limited to 'tests')
| -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 | 
5 files changed, 167 insertions, 155 deletions
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 + +  | 
