Coverage for tests/routes/test_auth_route.py: 100%

102 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-05-02 02:49 +0000

1import pytest 

2from unittest.mock import patch, MagicMock 

3from app.models.response import success_response, error_response 

4from app.models.status_codes import StatusCodes 

5 

6def test_login_page(client): 

7 response = client.get('/login') 

8 assert response.status_code == 200 

9 

10 

11def test_login_route_email_success(client): 

12 mock_login = MagicMock() 

13 mock_login.user.id = "123" 

14 mock_login.session.access_token = "123456" 

15 mock_login.session.refresh_token = "abcdef" 

16 

17 with patch('app.routes.auth.login_with_email', return_value = mock_login): 

18 response = client.post( 

19 '/auth/login?provider=email', 

20 json={ 

21 "email": "test@test.com", 

22 "password": "testpassword" 

23 } 

24 ) 

25 assert response.status_code == 200 

26 data = response.get_json() 

27 assert data["data"]["token"] == "123" 

28 assert data["data"]["access_token"] == "123456" 

29 assert data["data"]["refresh_token"] == "abcdef" 

30 

31 

32def test_login_route_email_missing_fields(client): 

33 mock_login = MagicMock() 

34 mock_login.user.id = "123" 

35 mock_login.session.access_token = "123456" 

36 mock_login.session.refresh_token = "abcdef" 

37 

38 with patch('app.routes.auth.login_with_email', return_value = mock_login): 

39 response = client.post( 

40 '/auth/login?provider=email', 

41 json={ 

42 "email": "test@test.com", 

43 } 

44 ) 

45 assert response.status_code == 400 

46 data = response.get_json() 

47 assert data["message"] == "Email or password not provided" 

48 assert data["data"] is None 

49 

50 

51def test_login_route_github_success(client): 

52 mock_login = MagicMock() 

53 mock_login.url = "http://example.com" 

54 

55 with patch('app.routes.auth.login_with_provider', return_value = mock_login): 

56 response = client.get('/auth/login?provider=github') 

57 assert response.status_code == 302 

58 assert response.headers['Location'] == "http://example.com" 

59 

60 

61def test_login_route_github_missing_provider(client): 

62 response = client.get('/auth/login') 

63 assert response.status_code == 400 

64 data = response.get_json() 

65 assert data["message"] == "Provider not provided. Ex github" 

66 assert data["data"] is None 

67 

68 

69def test_auth_complete(client): 

70 response = client.get('/auth/complete') 

71 assert response.status_code == 200 

72 assert b"<p>Signed in successfully!</p>" in response.data 

73 

74 

75def test_auth_callback(client): 

76 mock_auth = MagicMock() 

77 mock_auth.user.id = "123" 

78 mock_auth.session.access_token = "123456" 

79 mock_auth.session.refresh_token = "abcdef" 

80 

81 with patch('app.routes.auth.callback', return_value = mock_auth): 

82 response = client.get('/auth/callback?code=123456') 

83 assert response.status_code == 302 

84 assert response.headers['Location'] == f"/auth/complete?id={mock_auth.user.id}&access_token={mock_auth.session.access_token}&refresh_token={mock_auth.session.refresh_token}" 

85 

86def test_auth_callback_missing_code(client): 

87 response = client.get('/auth/callback') 

88 assert response.status_code == 400 

89 data = response.get_json() 

90 assert data["message"] == "Error: Missing authorization code" 

91 assert data["data"] is None 

92 

93def test_auth_callback_next_url(client): 

94 mock_auth = MagicMock() 

95 mock_auth.user.id = "123" 

96 mock_auth.session.access_token = "123456" 

97 mock_auth.session.refresh_token = "abcdef" 

98 

99 with client.session_transaction() as sess: 

100 sess["next_url"] = "/clover" 

101 

102 with patch('app.routes.auth.callback', return_value=mock_auth): 

103 response = client.get('/auth/callback?code=123456') 

104 

105 assert response.status_code == 302 

106 assert response.headers['Location'] == ( 

107 f"/clover?id=123&access_token=123456&refresh_token=abcdef" 

108 ) 

109 

110def test_auth_signup_success(client): 

111 mock_signup = MagicMock() 

112 mock_signup.user.id = "123" 

113 

114 with patch('app.routes.auth.signup_with_email', return_value=mock_signup): 

115 response = client.post('/auth/signup', json={ 

116 "email": "test@test.com", 

117 "password": "testpassword", 

118 "first_name": "John", 

119 "last_name": "Doe" 

120 } 

121 ) 

122 assert response.status_code == 200 

123 data = response.get_json() 

124 assert data["message"] == "Signup successful" 

125 assert data["data"]["token"] == "123" 

126 

127def test_auth_signup_missing_fields(client): 

128 response = client.post('/auth/signup', json={ 

129 "email": "", 

130 "password": "testpassword" 

131 } 

132 ) 

133 

134 assert response.status_code == 400 

135 data = response.get_json() 

136 assert data["message"] == "Email or password not provided" 

137 assert data["data"] is None 

138 

139def test_auth_signout_success(client, app): 

140 with app.app_context(): 

141 with patch('app.routes.auth.signout', return_value=success_response( 

142 "Signout successful", 

143 None, 

144 StatusCodes.OK 

145 )): 

146 response = client.post('/auth/signout', json={ 

147 "user_id": "123" 

148 }) 

149 

150 assert response.status_code == 200 

151 data = response.get_json() 

152 assert data["message"] == "Signout successful" 

153 assert data["data"] is None 

154 

155def test_auth_signout_missing_user_id(client): 

156 response = client.post('/auth/signout', json={}) 

157 assert response.status_code == 400 

158 data = response.get_json() 

159 assert data["message"] == "User ID not provided" 

160 assert data["data"] is None