1
+ import pytest
2
+ from fastapi .testclient import TestClient
3
+ from unittest .mock import patch , MagicMock
4
+
5
+ from openai_api_client .main import app
6
+ from openai_api_client .dependencies .openai import OpenAIService
7
+ from openai_api_client .schemas .openai import OpenAIRequest , OpenAIResponse
8
+ from openai_api_client .services .openai import openai_service
9
+ from openai_api_client .models .user import User
10
+ from openai_api_client .schemas .user import UserCreate
11
+
12
+
13
+ @pytest .fixture
14
+ def client ():
15
+ return TestClient (app )
16
+
17
+
18
+ @pytest .fixture
19
+ def mock_openai ():
20
+ with patch ("openai_api_client.dependencies.openai.openai" ) as mock_openai :
21
+ yield mock_openai
22
+
23
+
24
+ @pytest .fixture
25
+ async def test_user (mock_user_service ):
26
+ user_data = UserCreate (
27
+ username = "testuser" ,
28
+ email = "test@example.com" ,
29
+ password = "testpassword" ,
30
+ )
31
+ user = await mock_user_service .create_user (user_data )
32
+ yield user
33
+ await mock_user_service .delete_user (user .id )
34
+
35
+
36
+ class TestUserRoutes :
37
+ def test_register_user_success (self , client ):
38
+ user_data = {
39
+ "username" : "newuser" ,
40
+ "email" : "newuser@example.com" ,
41
+ "password" : "testpassword" ,
42
+ }
43
+ response = client .post ("/api/v1/users/register" , json = user_data )
44
+ assert response .status_code == 201
45
+ assert response .json ()["username" ] == "newuser"
46
+ assert response .json ()["email" ] == "newuser@example.com"
47
+ assert response .json ()["api_key" ] is not None
48
+
49
+ def test_register_user_username_exists (self , client ):
50
+ user_data = {
51
+ "username" : "testuser" ,
52
+ "email" : "newuser@example.com" ,
53
+ "password" : "testpassword" ,
54
+ }
55
+ response = client .post ("/api/v1/users/register" , json = user_data )
56
+ assert response .status_code == 400
57
+ assert "Username already exists" in response .json ()["detail" ]
58
+
59
+ def test_register_user_email_exists (self , client ):
60
+ user_data = {
61
+ "username" : "newuser" ,
62
+ "email" : "test@example.com" ,
63
+ "password" : "testpassword" ,
64
+ }
65
+ response = client .post ("/api/v1/users/register" , json = user_data )
66
+ assert response .status_code == 400
67
+ assert "Email already exists" in response .json ()["detail" ]
68
+
69
+ def test_login_user_success (self , client , test_user ):
70
+ login_data = {"email" : "test@example.com" , "password" : "testpassword" }
71
+ response = client .post ("/api/v1/users/login" , json = login_data )
72
+ assert response .status_code == 200
73
+ assert response .json ()["access_token" ] is not None
74
+ assert response .json ()["token_type" ] == "bearer"
75
+
76
+ def test_login_user_invalid_credentials (self , client , test_user ):
77
+ login_data = {"email" : "test@example.com" , "password" : "wrongpassword" }
78
+ response = client .post ("/api/v1/users/login" , json = login_data )
79
+ assert response .status_code == 401
80
+ assert "Invalid credentials" in response .json ()["detail" ]
81
+
82
+ def test_get_current_user_success (self , client , test_user ):
83
+ response = client .get (
84
+ "/api/v1/users/me" , headers = {"Authorization" : f"Bearer { test_user .api_key } " }
85
+ )
86
+ assert response .status_code == 200
87
+ assert response .json ()["username" ] == "testuser"
88
+ assert response .json ()["email" ] == "test@example.com"
89
+ assert response .json ()["api_key" ] is not None
0 commit comments