Skip to content

Commit d271d13

Browse files
author
marter11
committed
shared functions
2 parents d1edcc8 + 0d5acb9 commit d271d13

File tree

5 files changed

+92
-25
lines changed

5 files changed

+92
-25
lines changed

tests/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66

77
from api import app
88
from api.models import db
9-
from api.models import User, Project
9+
from api.models import User, Project, UserFeedback, ProjectFeedback, UserLink, ProjectLink
1010

1111
sys.path.insert(0, os.getcwd()+'/tests')

tests/api/__init__.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
2+
"""
3+
4+
Creates valid model objects for testing purposes:
5+
6+
- insert data to the database which could be used for testing
7+
8+
- these functions will give back the created objects in dict format which is hardcoded at every model's as_dict instance method
9+
10+
- call these functions form any test case.
11+
12+
"""
13+
14+
from tests import db, Project, User, UserLink, ProjectLink
15+
16+
def create_project_for_test_cases(data):
17+
new_project = Project(**data)
18+
db.session.add(new_project)
19+
db.session.commit()
20+
return new_project.id
21+
22+
def create_user_for_test_cases(data):
23+
new_user = User(**data)
24+
db.session.add(new_user)
25+
db.session.commit()
26+
return new_user.as_dict()
27+
28+
def create_user_link_for_test_cases(data):
29+
new_user_link = UserLink(**data)
30+
db.session.add(new_user)
31+
db.session.commit()
32+
return new_user_link.as_dict()
33+
34+
def create_project_for_test_cases(data):
35+
new_project_link = ProjectLink(**data)
36+
db.session.add(new_project_link)
37+
db.session.commit()
38+
return new_project_link.as_dict()

tests/api/views/test_projectView.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
11
from tests.conftest import client
22
from tests import db, Project
3-
from datetime import datetime
3+
from tests.api import create_project_for_test_cases
44

5-
class TestPorjectView(object):
5+
class TestProjectView(object):
66

77
valid_data = {
88
'name': 'PB api',
99
'description': 'A cool project',
1010
'repository': 'http://github.xy.com'
1111
}
1212

13-
def create_project_for_test_cases(self):
14-
new_project = Project(**self.valid_data)
15-
db.session.add(new_project)
16-
db.session.commit()
17-
return new_project.id
18-
1913
def test_create_project(self, client):
2014
response = client.post('/projects', json={"name": "Project"})
2115
assert response.status_code == 400
@@ -34,7 +28,7 @@ def test_update_project(self, client):
3428
# notice: should return 404 when doesen't exist insted of 400
3529
assert response.status_code == 404
3630

37-
project_id = self.create_project_for_test_cases()
31+
project_id = create_project_for_test_cases(self.valid_data)
3832
response = client.post('/projects/{}'.format(project_id), json={'description': 'updated desc'})
3933
project = Project.query.filter_by(id=project_id).first()
4034
assert project.description == 'updated desc'

tests/api/views/test_userView.py

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from tests.conftest import client
22
from tests import db, User
3+
from tests.api import create_user_for_test_cases
34

45
class TestUserView(object):
56

7+
# valid data for user creation
68
valid_data = {
79
'name': 'L Jone',
810
'bio': 'coding...',
@@ -12,12 +14,6 @@ class TestUserView(object):
1214
'occupation': 'cashier'
1315
}
1416

15-
def create_user_for_test_cases(self):
16-
new_user = User(**self.valid_data)
17-
db.session.add(new_user)
18-
db.session.commit()
19-
return new_user.id
20-
2117
def test_create_user(self, client):
2218
response = client.post('/users', json=self.valid_data)
2319
assert response.status_code == 201
@@ -26,7 +22,7 @@ def test_create_user(self, client):
2622
assert response.status_code == 400
2723

2824
def test_update_user(self, client):
29-
user_id = self.create_user_for_test_cases()
25+
user_id = create_user_for_test_cases(self.valid_data)["id"]
3026

3127
response = client.post('/users/1', json={})
3228
assert response.status_code == 400
@@ -38,15 +34,14 @@ def test_update_user(self, client):
3834
response = client.post('/users/{}'.format(user_id), json={"name": "Updated Name"})
3935
assert response.status_code == 200
4036

41-
# created_user = User.query.filter_by(id=user_id).first()
4237
assert response.get_json()['name'] == "Updated Name"
4338

4439
def test_delete_user(self, client):
4540
user_id = None
4641
response = client.delete('/users/{}'.format(user_id))
4742
assert response.status_code == 404
4843

49-
user_id = self.create_user_for_test_cases()
44+
user_id = create_user_for_test_cases(self.valid_data)["id"]
5045
response = client.delete('/users/{}'.format(user_id))
5146
assert response.status_code == 200
5247

@@ -55,15 +50,14 @@ def test_get_user(self, client):
5550
response = client.get('/users/{}'.format(user_id))
5651
assert response.status_code == 404
5752

58-
user_id = self.create_user_for_test_cases()
53+
user = create_user_for_test_cases(self.valid_data)
54+
user_id = user["id"]
5955
response = client.get('/users/{}'.format(user_id))
6056
assert response.status_code == 200
61-
62-
created_user = User.query.filter_by(id=user_id).first()
63-
assert response.get_json() == created_user.as_dict()
57+
assert response.get_json() == user
6458

6559
def test_get_all_users(self, client):
66-
self.create_user_for_test_cases()
60+
create_user_for_test_cases(self.valid_data)
6761

6862
self.valid_data = {
6963
'name': 'Valid',
@@ -74,7 +68,7 @@ def test_get_all_users(self, client):
7468
'occupation': 'cashier2.1'
7569
}
7670

77-
self.create_user_for_test_cases()
71+
create_user_for_test_cases(self.valid_data)
7872

7973
response = client.get('/users')
8074
assert response.status_code == 200
@@ -89,3 +83,34 @@ def test_get_all_users(self, client):
8983
response = client.get('/users')
9084
assert response.status_code == 200
9185
assert response.get_json() == [users_dict[1]]
86+
87+
# notice: Why do we need name in UserLink?
88+
# notice: Won't the API will provide the UserLink, then why the endpoint expects a UserLink specification?
89+
def test_create_user_link(self, client):
90+
user = create_user_for_test_cases(self.valid_data)
91+
url = '/users/{}/links'.format(user["id"])
92+
93+
response = client.post(url, json={"user_id": user["id"]})
94+
assert response.status_code == 400
95+
96+
# response = client.post(url, )
97+
# assert 1 == 1
98+
99+
def test_create_user_feedback(self, client):
100+
user1 = create_user_for_test_cases(self.valid_data)
101+
102+
self.valid_data["name"] = "Other name"
103+
user2 = create_user_for_test_cases(self.valid_data)
104+
105+
url = '/users/{}/feedbacks'.format(user2["id"])
106+
response = client.post(url, json={"user_id": user2["id"]})
107+
assert response.status_code == 400
108+
109+
feedback = {
110+
"author_id": int(user1["id"]),
111+
"rating": 5,
112+
"description": "Cool guy!",
113+
}
114+
115+
response = client.post(url, json=feedback)
116+
assert response.status_code == 201

tests/conftest.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
1+
2+
"""
3+
4+
When the testing process is starting this file will run at first.
5+
6+
This should contain all the neccessary functions for the test flow or at least should be imported here.
7+
8+
"""
9+
110
import pytest
211
from sqlalchemy_utils import database_exists, create_database
312
from os import environ
413
from tests import app, db
514

15+
# Provide default test client for testing endpoints
616
@pytest.fixture
717
def client():
818

0 commit comments

Comments
 (0)