Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 32 additions & 14 deletions tests/test_cart.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,19 @@
#POST call for test cart.
import pytest
from utils.request_handler import RequestHandler
from utils.assertions import assert_status_code, assert_json_key
from utils.assertions import (
assert_status_code,
assert_json_key,
assert_header,
assert_response_time,
)
from utils import logger

log = logger.log
handler = RequestHandler(base_url_key="fakestore_base_url")


def test_create_cart():
def test_create_cart():
payload = {
"userId": 1,
"products": [{"id": 1}]
Expand All @@ -20,8 +25,11 @@ def test_create_cart():
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert_json_key(response, "id") # The new cart ID should be returned
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert_json_key(response, "id")
assert response.json().get("userId") == payload["userId"]



Expand All @@ -31,9 +39,12 @@ def test_get_all_carts():
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert isinstance(response.json(), list), "Expected list of carts"
assert "userId" in response.json()[0], "Missing key 'userId' in response"
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert isinstance(response.json(), list), "Expected list of carts"
assert len(response.json()) > 0
assert "userId" in response.json()[0], "Missing key 'userId' in response"



Expand All @@ -44,9 +55,11 @@ def test_get_cart_by_id(cart_id):
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert_json_key(response, "userId")
assert_json_key(response, "products")
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert_json_key(response, "userId")
assert_json_key(response, "products")


@pytest.mark.parametrize("cart_id", [1])
Expand All @@ -61,9 +74,12 @@ def test_update_cart(cart_id):
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert_json_key(response, "userId")
assert_json_key(response, "products")
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert_json_key(response, "userId")
assert_json_key(response, "products")
assert response.json().get("products")[0]["id"] == payload["products"][0]["id"]


@pytest.mark.parametrize("cart_id", [1])
Expand All @@ -73,5 +89,7 @@ def test_delete_cart(cart_id):
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)

66 changes: 43 additions & 23 deletions tests/test_jsonplaceholder.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
import pytest
from utils.request_handler import RequestHandler
from utils.assertions import assert_status_code, assert_json_key
from utils.assertions import (
assert_status_code,
assert_json_key,
assert_header,
assert_response_time,
)
from utils import logger

handler = RequestHandler(base_url_key="jsonplaceholder")
log = logger.log



def test_get_todo_by_id():
response = handler.get("/todos/1")
def test_get_todo_by_id():
response = handler.get("/todos/1")

log.info(f"GET /todos/1 → {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)

for key in ["userId", "id", "title", "completed"]:
assert_json_key(response, key)
assert_status_code(response, 200)
assert_header(response, "Content-Type", "application/json; charset=utf-8")
assert_response_time(response)

for key in ["userId", "id", "title", "completed"]:
assert_json_key(response, key)
assert response.json()["id"] == 1


def test_get_all_posts():
Expand All @@ -26,13 +34,17 @@ def test_get_all_posts():
log.info(f"GET /posts → {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)

data = response.json()
assert isinstance(data, list), "Response is not a list"
if data:
for key in ["userId", "id", "title", "body"]:
assert key in data[0], f"Key '{key}' not found in first post"
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)

data = response.json()
assert isinstance(data, list), "Response is not a list"
assert len(data) > 0
if data:
for key in ["userId", "id", "title", "body"]:
assert key in data[0], f"Key '{key}' not found in first post"
assert isinstance(data[0]["id"], int)


def test_create_post():
Expand All @@ -47,10 +59,13 @@ def test_create_post():
log.info(f"Payload: {payload}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 201)
# Check for expected keys in response
for key in ["id", "title", "body", "userId"]:
assert_json_key(response, key)
assert_status_code(response, 201)
assert_header(response, "Content-Type")
assert_response_time(response)
# Check for expected keys in response
for key in ["id", "title", "body", "userId"]:
assert_json_key(response, key)
assert isinstance(response.json()["id"], int)


def test_update_post():
Expand All @@ -66,10 +81,13 @@ def test_update_post():
log.info(f"Payload: {payload}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
# Check for expected keys in response
for key in ["id", "title", "body", "userId"]:
assert_json_key(response, key)
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
# Check for expected keys in response
for key in ["id", "title", "body", "userId"]:
assert_json_key(response, key)
assert response.json()["id"] == 1


def test_delete_post():
Expand All @@ -78,4 +96,6 @@ def test_delete_post():
log.info(f"DELETE /posts/1 → {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200) # Or 204 if that’s the expected status
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
46 changes: 32 additions & 14 deletions tests/test_products.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@
# get all products for fakestore

from utils.request_handler import RequestHandler
from utils.assertions import assert_status_code, assert_json_key
from utils.assertions import (
assert_status_code,
assert_json_key,
assert_header,
assert_response_time,
)
from utils import logger
import pytest

Expand All @@ -11,7 +16,7 @@



def test_create_product_fakestore():
def test_create_product_fakestore():
payload = {
"title": "New Product",
"price": 29.99
Expand All @@ -22,8 +27,11 @@ def test_create_product_fakestore():
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert_json_key(response, "id") # fakestoreapi returns an 'id' in the response
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert_json_key(response, "id")
assert response.json().get("title") == payload["title"]


def test_get_all_products_fakestore():
Expand All @@ -32,9 +40,12 @@ def test_get_all_products_fakestore():
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert isinstance(response.json(), list), "Expected response to be a list of products"
assert "title" in response.json()[0], "Missing key 'title' in first product"
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert isinstance(response.json(), list), "Expected response to be a list of products"
assert len(response.json()) > 0
assert "title" in response.json()[0], "Missing key 'title' in first product"



Expand All @@ -48,9 +59,11 @@ def test_get_single_product_by_id(product_id):
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert_json_key(response, "title")
assert_json_key(response, "price")
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert_json_key(response, "title")
assert_json_key(response, "price")



Expand All @@ -66,9 +79,12 @@ def test_update_product(product_id):
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert_json_key(response, "title")
assert_json_key(response, "price")
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert_json_key(response, "title")
assert_json_key(response, "price")
assert response.json().get("title") == payload["title"]



Expand All @@ -81,4 +97,6 @@ def test_delete_product(product_id):
log.info(f"Status Code: {response.status_code}")
log.info(f"Response Body: {response.text}")

assert_status_code(response, 200)
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
13 changes: 12 additions & 1 deletion tests/test_reqres.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import pytest
import requests
from utils.request_handler import RequestHandler
from utils.assertions import assert_status_code, assert_json_key
from utils.assertions import (
assert_status_code,
assert_json_key,
assert_header,
assert_response_time,
)
from utils import logger

handler = RequestHandler()
Expand All @@ -15,7 +20,10 @@ def test_get_users_page_2():
log.info(f"Response: {response.status_code} | Body: {response.text}")

assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert_json_key(response, "data")
assert response.json().get("page") == 2

@pytest.mark.parametrize("user_id", [2, 5])
def test_put_user(user_id):
Expand All @@ -26,4 +34,7 @@ def test_put_user(user_id):
response = handler.put(f"/users/{user_id}", data=payload)
print(response)
assert_status_code(response, 200)
assert_header(response, "Content-Type")
assert_response_time(response)
assert_json_key(response, "job")
assert response.json().get("name") == "Updated User"
Loading