|
1 | 1 | import requests |
2 | 2 | import json |
| 3 | +import pytest |
3 | 4 |
|
4 | 5 | # Define the base URL |
5 | 6 | BASE_URL = "http://localhost:8001/api/v1" |
|
11 | 12 | def get_jwt_token(): |
12 | 13 | # User registration (assuming it doesn't need authentication) |
13 | 14 | register_url = f"{BASE_URL}/register" |
14 | | - register_data = json.dumps({"username": "testuser", "password": "securepassword"}) |
| 15 | + register_data = json.dumps({"username": "user1", "password": "securepassword"}) |
15 | 16 | register_response = requests.post(register_url, headers=headers, data=register_data) |
16 | | - print("Register User:", register_response.status_code, register_response.json()) |
| 17 | + |
| 18 | + assert register_response.status_code in [200, 201], f"User registration failed: {register_response.status_code}" |
17 | 19 |
|
18 | 20 | # User login |
19 | 21 | login_url = f"{BASE_URL}/login" |
20 | | - login_data = json.dumps({"username": "testuser", "password": "securepassword"}) |
| 22 | + login_data = json.dumps({"username": "user1", "password": "securepassword"}) |
21 | 23 | login_response = requests.post(login_url, headers=headers, data=login_data) |
22 | | - print("Login User:", login_response.status_code, login_response.json()) |
| 24 | + |
| 25 | + assert login_response.status_code == 200, f"User login failed: {login_response.status_code}" |
23 | 26 |
|
24 | 27 | # Extracting JWT token from login response |
25 | | - jwt_token = login_response.json().get('token') |
| 28 | + jwt_token = login_response.json().get('token') |
| 29 | + assert jwt_token is not None, "JWT token not found in login response" |
| 30 | + |
26 | 31 | return jwt_token |
27 | 32 |
|
28 | 33 | # Create a new book |
29 | | -def test_create_book(jwt_token): |
| 34 | +def create_book(jwt_token): |
30 | 35 | url = f"{BASE_URL}/books" |
31 | 36 | auth_headers = {**headers, "Authorization": f"Bearer {jwt_token}"} |
32 | 37 | data = json.dumps({"author": "Jane Doe", "title": "New Book Title"}) |
33 | 38 | response = requests.post(url, headers=auth_headers, data=data) |
34 | | - print("Create Book:", response.status_code, response.json()) |
| 39 | + |
| 40 | + assert response.status_code == 201, f"Failed to create book: {response.status_code}" |
35 | 41 | return response.json() |
36 | 42 |
|
37 | 43 | # Get all books |
38 | | -def test_get_books(jwt_token): |
| 44 | +def get_books(jwt_token): |
39 | 45 | url = f"{BASE_URL}/books" |
40 | 46 | auth_headers = {**headers, "Authorization": f"Bearer {jwt_token}"} |
41 | 47 | response = requests.get(url, headers=auth_headers) |
42 | | - print("Get Books:", response.status_code, response.json()) |
| 48 | + |
| 49 | + assert response.status_code == 200, f"Failed to get books: {response.status_code}" |
| 50 | + return response.json() |
43 | 51 |
|
44 | 52 | # Get a specific book by ID |
45 | | -def test_get_book(book_id, jwt_token): |
| 53 | +def get_book(book_id, jwt_token): |
46 | 54 | url = f"{BASE_URL}/books/{book_id}" |
47 | 55 | auth_headers = {**headers, "Authorization": f"Bearer {jwt_token}"} |
48 | 56 | response = requests.get(url, headers=auth_headers) |
49 | | - print("Get Book:", response.status_code, response.json()) |
| 57 | + |
| 58 | + assert response.status_code == 200, f"Failed to get book: {response.status_code}" |
| 59 | + return response.json() |
50 | 60 |
|
51 | 61 | # Update a book |
52 | | -def test_update_book(book_id, jwt_token): |
| 62 | +def update_book(book_id, jwt_token): |
53 | 63 | url = f"{BASE_URL}/books/{book_id}" |
54 | 64 | auth_headers = {**headers, "Authorization": f"Bearer {jwt_token}"} |
55 | 65 | data = json.dumps({"author": "John Smith", "title": "Updated Book Title"}) |
56 | 66 | response = requests.put(url, headers=auth_headers, data=data) |
57 | | - print("Update Book:", response.status_code, response.json()) |
| 67 | + |
| 68 | + assert response.status_code == 200, f"Failed to update book: {response.status_code}" |
| 69 | + return response.json() |
58 | 70 |
|
59 | 71 | # Delete a book |
60 | | -def test_delete_book(book_id, jwt_token): |
| 72 | +def delete_book(book_id, jwt_token): |
61 | 73 | url = f"{BASE_URL}/books/{book_id}" |
62 | 74 | auth_headers = {**headers, "Authorization": f"Bearer {jwt_token}"} |
63 | 75 | response = requests.delete(url, headers=auth_headers) |
64 | | - print("Delete Book:", response.status_code) |
| 76 | + |
| 77 | + assert response.status_code == 204, f"Failed to delete book: {response.status_code}" |
| 78 | + |
| 79 | +# Tests using pytest |
| 80 | +@pytest.fixture(scope="module") |
| 81 | +def jwt_token(): |
| 82 | + return get_jwt_token() |
| 83 | + |
| 84 | +def test_create_book(jwt_token): |
| 85 | + book = create_book(jwt_token) |
| 86 | + assert book['data']['author'] == "Jane Doe" |
| 87 | + assert book['data']['title'] == "New Book Title" |
| 88 | + return book |
| 89 | + |
| 90 | +def test_get_books(jwt_token): |
| 91 | + books = get_books(jwt_token) |
| 92 | + assert isinstance(books, dict), "Books response is not a dictionary" |
| 93 | + assert 'data' in books, "Books data not found in response" |
65 | 94 |
|
66 | | -# Run tests |
67 | | -def run_tests(): |
68 | | - # Authenticate and obtain JWT |
69 | | - jwt_token = get_jwt_token() |
70 | | - if jwt_token: |
71 | | - # Create a book and use its ID for further tests |
72 | | - book = test_create_book(jwt_token) |
73 | | - book_id = book['data']['id'] |
| 95 | +def test_get_book(jwt_token): |
| 96 | + book = create_book(jwt_token) |
| 97 | + book_id = book['data']['id'] |
| 98 | + fetched_book = get_book(book_id, jwt_token) |
| 99 | + assert fetched_book['data']['id'] == book_id, "Fetched book ID does not match created book ID" |
74 | 100 |
|
75 | | - # Perform operations |
76 | | - test_get_books(jwt_token) |
77 | | - test_get_book(book_id, jwt_token) |
78 | | - test_update_book(book_id, jwt_token) |
79 | | - test_delete_book(book_id, jwt_token) |
| 101 | +def test_update_book(jwt_token): |
| 102 | + book = create_book(jwt_token) |
| 103 | + book_id = book['data']['id'] |
| 104 | + updated_book = update_book(book_id, jwt_token) |
| 105 | + assert updated_book['data']['author'] == "John Smith", "Book author not updated" |
| 106 | + assert updated_book['data']['title'] == "Updated Book Title", "Book title not updated" |
80 | 107 |
|
81 | | -if __name__ == "__main__": |
82 | | - run_tests() |
| 108 | +def test_delete_book(jwt_token): |
| 109 | + book = create_book(jwt_token) |
| 110 | + book_id = book['data']['id'] |
| 111 | + delete_book(book_id, jwt_token) |
| 112 | + with pytest.raises(AssertionError): |
| 113 | + get_book(book_id, jwt_token) # This should raise an error since the book is deleted |
0 commit comments