From 391c4620eb98adad989e067a62625a4e3da563a5 Mon Sep 17 00:00:00 2001 From: dhakim87 Date: Wed, 29 Jan 2020 11:15:08 -0800 Subject: [PATCH 1/2] Basic framework for testing flask server with one passing unit test. It was honestly hard to find something we could pass :P --- .../api/tests/test_integration.py | 110 ++++++++++++++++++ microsetta_private_api/server.py | 9 +- repo_test_scratch.py | 1 - 3 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 microsetta_private_api/api/tests/test_integration.py diff --git a/microsetta_private_api/api/tests/test_integration.py b/microsetta_private_api/api/tests/test_integration.py new file mode 100644 index 000000000..db471d1f0 --- /dev/null +++ b/microsetta_private_api/api/tests/test_integration.py @@ -0,0 +1,110 @@ +import pytest +import microsetta_private_api.server +from microsetta_private_api.repo.transaction import Transaction +from microsetta_private_api.repo.account_repo import AccountRepo +from microsetta_private_api.model.account import Account +from microsetta_private_api.repo.source_repo import SourceRepo +from microsetta_private_api.model.source import \ + Source, HumanInfo, AnimalInfo, EnvironmentInfo +import datetime +import json + +ACCT_ID = "aaaaaaaa-bbbb-cccc-dddd-eeeeffffffff" +HUMAN_ID = "b0b0b0b0-b0b0-b0b0-b0b0-b0b0b0b0b0b0" +DOGGY_ID = "dddddddd-dddd-dddd-dddd-dddddddddddd" +PLANTY_ID = "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee" + + +def json_converter(o): + if isinstance(o, datetime.datetime): + return str(o) + return o.__dict__ + + +def setup_test_data(): + with Transaction() as t: + acct_repo = AccountRepo(t) + acct_repo.delete_account(ACCT_ID) + acc = Account(ACCT_ID, + "foo@baz.com", + "globus", + "Dan", + "H", + '{"a":5, "b":7}', + "USER") + acct_repo.create_account(acc) + + source_repo = SourceRepo(t) + source_repo.delete_source(ACCT_ID, DOGGY_ID) + source_repo.delete_source(ACCT_ID, PLANTY_ID) + source_repo.delete_source(ACCT_ID, HUMAN_ID) + + source_repo.create_source(Source.create_human( + HUMAN_ID, + ACCT_ID, + HumanInfo("Bo", "bo@bo.com", False, "Mr Bo", False, "Mrs Bo", + False, datetime.datetime.utcnow(), "TODO,WutDis?") + )) + source_repo.create_source(Source.create_animal( + DOGGY_ID, + ACCT_ID, + AnimalInfo("Doggy"))) + source_repo.create_source(Source.create_environment( + PLANTY_ID, + ACCT_ID, + EnvironmentInfo("Planty", "The green one"))) + + t.commit() + + +def teardown_test_data(): + with Transaction() as t: + acct_repo = AccountRepo(t) + source_repo = SourceRepo(t) + source_repo.delete_source(ACCT_ID, DOGGY_ID) + source_repo.delete_source(ACCT_ID, PLANTY_ID) + source_repo.delete_source(ACCT_ID, HUMAN_ID) + acct_repo.delete_account(ACCT_ID) + + t.commit() + + +@pytest.fixture +def client(): + setup_test_data() + app = microsetta_private_api.server.build_app() + with app.app.test_client() as client: + yield client + teardown_test_data() + + +def test_get_sources(client): + resp = client.get('/api/accounts/%s/sources' % ACCT_ID).data + sources = json.loads(resp) + assert len([x for x in sources if x['source_name'] == 'Bo']) == 1 + assert len([x for x in sources if x['source_name'] == 'Doggy']) == 1 + assert len([x for x in sources if x['source_name'] == 'Planty']) == 1 + + +# BROKEN +# def test_external_surveys(client): +# # I can't even find a test that we can pass for demo purposes! +# resp = client.get('/api/accounts/%s/sources' % ACCT_ID).data +# sources = json.loads(resp) +# bobo = [x for x in sources if x['source_name'] == 'Bo'][0] +# doggy = [x for x in sources if x['source_name'] == 'Doggy'][0] +# env = [x for x in sources if x['source_name'] == 'Planty'][0] +# +# resp = client.get('/accounts/%s/sources/%s/survey_templates' % +# (ACCT_ID, bobo.id)) +# bobo_surveys = json.loads(resp.data) +# resp = client.get('/accounts/%s/sources/%s/survey_templates' % +# (ACCT_ID, doggy.id)) +# doggy_surveys = json.loads(resp.data) +# resp = client.get('/accounts/%s/sources/%s/survey_templates' % +# (ACCT_ID, env.id)) +# env_surveys = json.loads(resp.data) +# +# assert bobo_surveys == [1, 3, 4, 5] +# assert doggy_surveys == [2] +# assert env_surveys == [3] diff --git a/microsetta_private_api/server.py b/microsetta_private_api/server.py index ef3949db8..170afdf6c 100644 --- a/microsetta_private_api/server.py +++ b/microsetta_private_api/server.py @@ -10,8 +10,8 @@ import connexion from microsetta_private_api.util.util import JsonifyDefaultEncoder -# If we're running in stand alone mode, run the application -if __name__ == '__main__': + +def build_app(): # Create the application instance app = connexion.FlaskApp(__name__) @@ -22,5 +22,10 @@ # Note: app.app is the actual Flask application instance, so any Flask # settings have to be set there. app.app.json_encoder = JsonifyDefaultEncoder + return app + +# If we're running in stand alone mode, run the application +if __name__ == '__main__': + app = build_app() app.run(port=8082, debug=True) diff --git a/repo_test_scratch.py b/repo_test_scratch.py index a28b6b7d3..2d13fbcaa 100644 --- a/repo_test_scratch.py +++ b/repo_test_scratch.py @@ -145,4 +145,3 @@ def json_converter(o): print(survey_model == survey_model2) survey_answers_repo.delete_answered_survey(ACCT_ID, answer_id) - From 0f6b05dfe3d75f4e0ec65fa04c3a0d2cbae59091 Mon Sep 17 00:00:00 2001 From: dhakim87 Date: Wed, 29 Jan 2020 13:15:55 -0800 Subject: [PATCH 2/2] Source now returns source_id as specified in the api. test_integration now has two working tests --- .../api/tests/test_integration.py | 74 +++++++++++-------- microsetta_private_api/model/source.py | 3 +- 2 files changed, 46 insertions(+), 31 deletions(-) diff --git a/microsetta_private_api/api/tests/test_integration.py b/microsetta_private_api/api/tests/test_integration.py index db471d1f0..973d9b1b0 100644 --- a/microsetta_private_api/api/tests/test_integration.py +++ b/microsetta_private_api/api/tests/test_integration.py @@ -25,13 +25,23 @@ def setup_test_data(): with Transaction() as t: acct_repo = AccountRepo(t) acct_repo.delete_account(ACCT_ID) + + creation_time = None + update_time = None + acc = Account(ACCT_ID, - "foo@baz.com", - "globus", - "Dan", - "H", - '{"a":5, "b":7}', - "USER") + "foo@baz.com", + "standard", + "GLOBUS", + "Dan", + "H", + { + "street": "123 Dan Lane", + "city": "Danville", + "state": "CA", + "post_code": 12345, + "country_code": "US" + }) acct_repo.create_account(acc) source_repo = SourceRepo(t) @@ -42,8 +52,9 @@ def setup_test_data(): source_repo.create_source(Source.create_human( HUMAN_ID, ACCT_ID, - HumanInfo("Bo", "bo@bo.com", False, "Mr Bo", False, "Mrs Bo", - False, datetime.datetime.utcnow(), "TODO,WutDis?") + HumanInfo("Bo", "bo@bo.com", False, "Mr Bo", "Mrs Bo", + False, datetime.datetime.utcnow(), None, "Mr. Obtainer", + "18-plus") )) source_repo.create_source(Source.create_animal( DOGGY_ID, @@ -86,25 +97,28 @@ def test_get_sources(client): assert len([x for x in sources if x['source_name'] == 'Planty']) == 1 -# BROKEN -# def test_external_surveys(client): -# # I can't even find a test that we can pass for demo purposes! -# resp = client.get('/api/accounts/%s/sources' % ACCT_ID).data -# sources = json.loads(resp) -# bobo = [x for x in sources if x['source_name'] == 'Bo'][0] -# doggy = [x for x in sources if x['source_name'] == 'Doggy'][0] -# env = [x for x in sources if x['source_name'] == 'Planty'][0] -# -# resp = client.get('/accounts/%s/sources/%s/survey_templates' % -# (ACCT_ID, bobo.id)) -# bobo_surveys = json.loads(resp.data) -# resp = client.get('/accounts/%s/sources/%s/survey_templates' % -# (ACCT_ID, doggy.id)) -# doggy_surveys = json.loads(resp.data) -# resp = client.get('/accounts/%s/sources/%s/survey_templates' % -# (ACCT_ID, env.id)) -# env_surveys = json.loads(resp.data) -# -# assert bobo_surveys == [1, 3, 4, 5] -# assert doggy_surveys == [2] -# assert env_surveys == [3] +def test_surveys(client): + # I can't even find a test that we can pass for demo purposes! + resp = client.get('/api/accounts/%s/sources' % ACCT_ID).data + + sources = json.loads(resp) + bobo = [x for x in sources if x['source_name'] == 'Bo'][0] + doggy = [x for x in sources if x['source_name'] == 'Doggy'][0] + env = [x for x in sources if x['source_name'] == 'Planty'][0] + + resp = client.get( + '/api/accounts/%s/sources/%s/survey_templates?language_tag=en_us' % + (ACCT_ID, bobo['source_id']), ) + bobo_surveys = json.loads(resp.data) + resp = client.get( + '/api/accounts/%s/sources/%s/survey_templates?language_tag=en_us' % + (ACCT_ID, doggy['source_id'])) + doggy_surveys = json.loads(resp.data) + resp = client.get( + '/api/accounts/%s/sources/%s/survey_templates?language_tag=en_us' % + (ACCT_ID, env['source_id'])) + env_surveys = json.loads(resp.data) + + assert bobo_surveys == [1, 3, 4, 5] + assert doggy_surveys == [2] + assert env_surveys == [] diff --git a/microsetta_private_api/model/source.py b/microsetta_private_api/model/source.py index 60891b949..1afc0aaa4 100644 --- a/microsetta_private_api/model/source.py +++ b/microsetta_private_api/model/source.py @@ -71,7 +71,8 @@ def __init__(self, source_id, account_id, source_type, source_data): def to_api(self): result = { "source_type": self.source_type, - "source_name": self.source_data.name + "source_name": self.source_data.name, + "source_id": self.id } if self.source_type == Source.SOURCE_TYPE_HUMAN: