1
1
import random
2
- from json import dumps , loads
3
- from uuid import uuid4
2
+ from json import loads
4
3
5
4
import pytest
6
5
import requests
7
6
from assertpy .assertpy import assert_that
8
7
from jsonpath_ng import parse
9
8
9
+ from clients .people .people_client import PeopleClient
10
10
from config import BASE_URI
11
+ from tests .helpers .people_helpers import search_created_user_in
11
12
from utils .file_reader import read_file
12
13
14
+ client = PeopleClient ()
15
+
13
16
14
17
def test_read_all_has_kent ():
15
- # We use requests.get() with url to make a get request
16
- response = requests .get (BASE_URI )
17
- # response from requests has many useful properties
18
- # we can assert on the response status code
19
- assert_that (response .status_code ).is_equal_to (requests .codes .ok )
20
- # We can get python dict as response by using .json() method
21
- response_content = response .json ()
18
+ response = client .read_all_persons ()
22
19
23
- # Use assertpy's fluent assertions to extract all fnames and then see the result is non empty and has
24
- # Kent in it.
25
- assert_that (response_content ).extracting ('fname' ).is_not_empty ().contains ('Kent' )
20
+ assert_that (response .status_code ).is_equal_to (requests .codes .ok )
21
+ assert_that (response .as_dict ).extracting ('fname' ).is_not_empty ().contains ('Kent' )
26
22
27
23
28
24
def test_new_person_can_be_added ():
29
- unique_last_name = create_person_with_unique_last_name ()
25
+ last_name , response = client .create_person ()
26
+ peoples = client .read_all_persons ().as_dict
30
27
31
- # After user is created, we read all the users and then use filter expression to find if the
32
- # created user is present in the response list
33
- peoples = requests .get (BASE_URI ).json ()
34
- is_new_user_created = search_created_user_in (peoples , unique_last_name )
28
+ is_new_user_created = search_created_user_in (peoples , last_name )
35
29
assert_that (is_new_user_created ).is_not_empty ()
36
30
37
31
38
32
def test_created_person_can_be_deleted ():
39
- persons_last_name = create_person_with_unique_last_name ()
33
+ persons_last_name = client . create_person ()
40
34
41
- peoples = requests . get ( BASE_URI ). json ()
42
- newly_created_user = search_created_user_in (peoples , persons_last_name )[0 ]
35
+ peoples = client . read_all_persons (). as_dict
36
+ new_person_id = search_created_user_in (peoples , persons_last_name )[0 ][ 'person_id' ]
43
37
44
- delete_url = f'{ BASE_URI } /{ newly_created_user ["person_id" ]} '
45
- response = requests .delete (delete_url )
38
+ response = client .delete_person (new_person_id )
46
39
assert_that (response .status_code ).is_equal_to (requests .codes .ok )
47
40
48
41
@@ -58,7 +51,7 @@ def create_data():
58
51
59
52
60
53
def test_person_can_be_added_with_a_json_template (create_data ):
61
- create_person_with_unique_last_name (create_data )
54
+ client . create_person (create_data )
62
55
63
56
response = requests .get (BASE_URI )
64
57
peoples = loads (response .text )
@@ -72,33 +65,3 @@ def test_person_can_be_added_with_a_json_template(create_data):
72
65
73
66
expected_last_name = create_data ['lname' ]
74
67
assert_that (result ).contains (expected_last_name )
75
-
76
-
77
- def create_person_with_unique_last_name (body = None ):
78
- if body is None :
79
- # Ensure a user with a unique last name is created everytime the test runs
80
- # Note: json.dumps() is used to convert python dict to json string
81
- unique_last_name = f'User { str (uuid4 ())} '
82
- payload = dumps ({
83
- 'fname' : 'New' ,
84
- 'lname' : unique_last_name
85
- })
86
- else :
87
- unique_last_name = body ['lname' ]
88
- payload = dumps (body )
89
-
90
- # Setting default headers to show that the client accepts json
91
- # And will send json in the headers
92
- headers = {
93
- 'Content-Type' : 'application/json' ,
94
- 'Accept' : 'application/json'
95
- }
96
-
97
- # We use requests.post method with keyword params to make the request more readable
98
- response = requests .post (url = BASE_URI , data = payload , headers = headers )
99
- assert_that (response .status_code , description = 'Person not created' ).is_equal_to (requests .codes .no_content )
100
- return unique_last_name
101
-
102
-
103
- def search_created_user_in (peoples , last_name ):
104
- return [person for person in peoples if person ['lname' ] == last_name ]
0 commit comments