Skip to content

Commit fd55b45

Browse files
authored
Merge pull request #59 from cs130-w21/coverage
Improved test coverage
2 parents 4587094 + 32816a7 commit fd55b45

File tree

5 files changed

+148
-4
lines changed

5 files changed

+148
-4
lines changed

tests/conftest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ def app():
2323
os.close(db_fd)
2424
os.unlink(db_path)
2525

26+
@pytest.fixture
27+
def app_no_test():
28+
app = create_app(None)
29+
# Warning: do not use this fixture for testing beyond
30+
# initialization. If you need to, initialize the
31+
# DB here. (NOT RECOMMENDED)
32+
yield app
2633

2734
@pytest.fixture
2835
def client(app):

tests/data.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
INSERT INTO profiles (uid, profile)
22
VALUES
33
('DEEPFKNVAL', '{"EXPEXT": 85, "IMPDIS": 84, "ATTDEP": 50, "SENTIM": 0, "INVEST": 1, "HOBBIE": "diamondhands"}'),
4-
('A1B2C3D4E5', '{"EXPEXT": 42, "IMPDIS": 42, "ATTDEP": 42, "SENTIM": 42, "INVEST": 3, "HOBBIE": "life"}');
4+
('A1B2C3D4E5', '{"EXPEXT": 42, "IMPDIS": 42, "ATTDEP": 42, "SENTIM": 42, "INVEST": 3, "HOBBIE": "life"}'),
5+
('AAAAAAAAAA', '{"EXPEXT": 42, "IMPDIS": 42, "ATTDEP": 42, "SENTIM": 42, "INVEST": 3, "HOBBIE": "life"}'),
6+
('BBBBBBBBBB', '{"EXPEXT": 42, "IMPDIS": 42, "ATTDEP": 42, "SENTIM": 42, "HOBBIE": "life"}');

tests/test_compare.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ def test_get_compare(client):
88
get_response = client.get('compare/<placeholder>', follow_redirects=True)
99
assert b"Compare Portfolios" in get_response.data
1010

11-
# PLACEHOLDER TEST
12-
# TODO: Implement this in Sprint 3
1311
def test_post_compare(client):
1412
# Enter same ID
1513
post_response = client.post('compare/<placeholder>', data=dict(
@@ -26,12 +24,43 @@ def test_post_compare(client):
2624
), follow_redirects=True)
2725
assert b"Compare Portfolios" in post_response.data
2826
assert b"Invalid ID" in post_response.data
27+
28+
post_response = client.post('compare/<placholder>', data=dict(
29+
person1='ZZZZZZZZZZ',
30+
person2=TEST_ID1
31+
), follow_redirects=True)
32+
assert b"Compare Portfolios" in post_response.data
33+
assert b"Invalid ID" in post_response.data
2934
# Enter two IDs
3035

3136
# no portfolio in session, so should redirect to index
32-
# TODO: implement this when Compare is implemented
3337
post_response = client.post('compare/<placeholder>', data=dict(
3438
person1=TEST_ID1,
3539
person2=TEST_ID2
3640
), follow_redirects=True)
3741
assert b"Your Compatibility is" in post_response.data
42+
43+
def test_post_compare2(client):
44+
# check for incomplete
45+
post_response = client.post('compare/<placeholder>', data=dict(
46+
person1='BBBBBBBBBB',
47+
person2=TEST_ID2
48+
), follow_redirects=True)
49+
assert b"Your Compatibility is" in post_response.data
50+
51+
post_response = client.post('compare/<placeholder>', data=dict(
52+
person1=TEST_ID1,
53+
person2='BBBBBBBBBB'
54+
), follow_redirects=True)
55+
assert b"Your Compatibility is" in post_response.data
56+
# same hobbie
57+
post_response = client.post('compare/<placeholder>', data=dict(
58+
person1=TEST_ID2,
59+
person2='AAAAAAAAAA'
60+
), follow_redirects=True)
61+
assert b"Your Compatibility is" in post_response.data
62+
63+
def test_compare_with_code(client):
64+
get_response = client.get('compare/AAAAAAAAAA', follow_redirects=True)
65+
assert b"Compare Portfolios" in get_response.data
66+
assert b"AAAAAAAAAA" in get_response.data

tests/test_index.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,16 @@ def test_index(client):
7272
), follow_redirects=True)
7373
assert b"Number of Shares must be a positive integer" in post_response.data
7474
assert b"Get My Results" not in get_response.data
75+
76+
def test_about_remove(client):
77+
get_response = client.get('about')
78+
assert b"Website created by..." in get_response.data
79+
80+
get_response = client.get('remove/ZZZZ',
81+
follow_redirects = True)
82+
assert b"Welcome to StockMeetsBagel" in get_response.data
83+
assert b"Get My Results" not in get_response.data
84+
85+
def test_app_no_config(client, app_no_test):
86+
get_response = client.get('about')
87+
assert b"Website created by..." in get_response.data

tests/test_results.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import pytest
22

33
from flaskr.db import get_db
4+
import sqlite3
45

56
TEST_STOCK = 'AMZN'
67
TEST_SHARES = '1'
@@ -45,3 +46,95 @@ def test_stock_in_session(client, app):
4546
get_response = client.get('results', follow_redirects=True)
4647
assert b"Your profile has been generated." in get_response.data
4748
assert b"Compare Our Results" in get_response.data
49+
50+
def test_total_value(client, monkeypatch):
51+
def fake_financials(_self, symbol, typ):
52+
return dict(
53+
metric={
54+
'52WeekHigh': '1',
55+
'52WeekLow': '1',
56+
'bookValuePerShareAnnual': '1',
57+
'marketCapitalization': '1'
58+
}
59+
)
60+
monkeypatch.setattr('finnhub.Client.company_basic_financials', fake_financials)
61+
client.post('/', data=dict(
62+
stock='XELA',
63+
volume='1'
64+
), follow_redirects=True)
65+
get_response = client.get('results', follow_redirects=True)
66+
assert b"Your profile has been generated." in get_response.data
67+
assert b"Compare Our Results" in get_response.data
68+
69+
client.post('/', data=dict(
70+
stock='XELA',
71+
volume='5000'
72+
), follow_redirects=True)
73+
get_response = client.get('results', follow_redirects=True)
74+
assert b"Your profile has been generated." in get_response.data
75+
assert b"Compare Our Results" in get_response.data
76+
77+
client.post('/', data=dict(
78+
stock='XELA',
79+
volume='40000'
80+
), follow_redirects=True)
81+
get_response = client.get('results', follow_redirects=True)
82+
assert b"Your profile has been generated." in get_response.data
83+
assert b"Compare Our Results" in get_response.data
84+
85+
client.post('/', data=dict(
86+
stock='XELA',
87+
volume='100000'
88+
), follow_redirects=True)
89+
get_response = client.get('results', follow_redirects=True)
90+
assert b"Your profile has been generated." in get_response.data
91+
assert b"Compare Our Results" in get_response.data
92+
93+
client.post('/', data=dict(
94+
stock='XELA',
95+
volume='250000'
96+
), follow_redirects=True)
97+
get_response = client.get('results', follow_redirects=True)
98+
assert b"Your profile has been generated." in get_response.data
99+
assert b"Compare Our Results" in get_response.data
100+
101+
client.post('/', data=dict(
102+
stock='XELA',
103+
volume='650000'
104+
), follow_redirects=True)
105+
get_response = client.get('results', follow_redirects=True)
106+
assert b"Your profile has been generated." in get_response.data
107+
assert b"Compare Our Results" in get_response.data
108+
109+
def test_sectors(client, monkeypatch):
110+
def fake_profile2(_self, **params):
111+
return dict(finnhubIndustry='gamer')
112+
monkeypatch.setattr('finnhub.Client.company_profile2', fake_profile2)
113+
114+
client.post('/', data=dict(
115+
stock='XELA',
116+
volume='10'
117+
), follow_redirects=True)
118+
client.post('/', data=dict(
119+
stock='MSFT',
120+
volume='1'
121+
), follow_redirects=True)
122+
123+
get_response = client.get('results', follow_redirects=True)
124+
assert b"Your profile has been generated." in get_response.data
125+
assert b"Compare Our Results" in get_response.data
126+
127+
def test_generate_uid(client, app, monkeypatch):
128+
def fake_secrets_choice(sequence):
129+
return 'A'
130+
131+
monkeypatch.setattr('secrets.choice', fake_secrets_choice)
132+
133+
client.post('/', data=dict(
134+
stock=TEST_STOCK,
135+
volume=TEST_SHARES
136+
), follow_redirects=True)
137+
138+
with pytest.raises(sqlite3.IntegrityError) as e:
139+
get_response = client.get('results', follow_redirects=True)
140+
assert 'UNIQUE' in str(e.value)

0 commit comments

Comments
 (0)