On branch main
new file: main_dc/yalarba/api_yal/cmd/testrunner/README.md new file: main_dc/yalarba/api_yal/cmd/testrunner/main.go new file: main_dc/yalarba/api_yal/cmd/testrunner/runner.go deleted: main_dc/yalarba/api_yal/test/intergration/auth_integration_test.go deleted: main_dc/yalarba/api_yal/test/intergration/objects_integration_test.go deleted: main_dc/yalarba/api_yal/test/intergration/setup_test.go deleted: main_dc/yalarba/api_yal/test/setup_test.go new file: main_dc/yalarba/api_yal/tests/integration/account_test.go new file: main_dc/yalarba/api_yal/tests/integration/appeal_test.go new file: main_dc/yalarba/api_yal/tests/integration/auth_test.go new file: main_dc/yalarba/api_yal/tests/integration/comment_test.go new file: main_dc/yalarba/api_yal/tests/integration/feedback_test.go new file: main_dc/yalarba/api_yal/tests/integration/object_test.go new file: main_dc/yalarba/api_yal/tests/integration/rating_test.go new file: main_dc/yalarba/api_yal/tests/testutils/client.go new file: main_dc/yalarba/api_yal/tests/testutils/fixtures.go new file: main_dc/yalarba/api_yal/tests/testutils/setup.go write tests
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
package integration
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"api_yal/tests/testutils"
|
||||
)
|
||||
|
||||
func TestAuthFlow(t *testing.T) {
|
||||
config := testutils.NewTestConfig()
|
||||
|
||||
t.Run("Register", func(t *testing.T) {
|
||||
testData := map[string]interface{}{
|
||||
"email": "testflow@example.com",
|
||||
"password": "test123456",
|
||||
"first_name": "Flow",
|
||||
"last_name": "Test",
|
||||
}
|
||||
|
||||
resp, err := config.Request("POST", "/auth/register", testData, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to register: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 201 {
|
||||
t.Errorf("Expected status 201, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &result); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
if _, ok := result["token"]; !ok {
|
||||
t.Error("Token not found in response")
|
||||
}
|
||||
|
||||
if _, ok := result["user"]; !ok {
|
||||
t.Error("User data not found in response")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Login", func(t *testing.T) {
|
||||
// Сначала создаем пользователя
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
// Тестируем логин
|
||||
resp, err := config.Request("POST", "/auth/login", map[string]interface{}{
|
||||
"email": user.Email,
|
||||
"password": user.Password,
|
||||
}, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to login: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &result); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
if _, ok := result["token"]; !ok {
|
||||
t.Error("Token not found in response")
|
||||
}
|
||||
|
||||
// Проверяем, что refresh token установлен в cookie
|
||||
cookies := resp.Cookies()
|
||||
foundRefreshToken := false
|
||||
for _, cookie := range cookies {
|
||||
if cookie.Name == "refresh_token" {
|
||||
foundRefreshToken = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !foundRefreshToken {
|
||||
t.Error("Refresh token cookie not set")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("RefreshToken", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
// Логинимся для получения refresh token в cookie
|
||||
_, err := config.Request("POST", "/auth/login", map[string]interface{}{
|
||||
"email": user.Email,
|
||||
"password": user.Password,
|
||||
}, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to login: %v", err)
|
||||
}
|
||||
|
||||
// Обновляем токен
|
||||
resp, err := config.Request("POST", "/auth/refresh", nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to refresh token: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Logout", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
resp, err := config.Request("POST", "/auth/logout", nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to logout: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &result); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
if msg, ok := result["message"]; !ok || msg != "Successfully logged out" {
|
||||
t.Error("Logout message not as expected")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("PasswordReset", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
// Запрос сброса пароля
|
||||
resp, err := config.Request("POST", "/auth/password-reset/request", map[string]interface{}{
|
||||
"email": user.Email,
|
||||
}, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to request password reset: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &result); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
resetToken, ok := result["token"].(string)
|
||||
if !ok {
|
||||
t.Fatal("Reset token not found in response")
|
||||
}
|
||||
|
||||
// Подтверждение сброса пароля
|
||||
newPassword := "newpassword789"
|
||||
resp, err = config.Request("POST", "/auth/password-reset/confirm", map[string]interface{}{
|
||||
"token": resetToken,
|
||||
"new_password": newPassword,
|
||||
}, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to confirm password reset: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
// Проверяем, что можно войти с новым паролем
|
||||
newToken, err := config.GetAuthToken(user.Email, newPassword)
|
||||
if err != nil {
|
||||
t.Errorf("Failed to login with new password: %v", err)
|
||||
}
|
||||
if newToken == "" {
|
||||
t.Error("Failed to get token with new password")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("MobileLogin", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
resp, err := config.Request("POST", "/auth/mobile/login", map[string]interface{}{
|
||||
"email": user.Email,
|
||||
"password": user.Password,
|
||||
}, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to mobile login: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &result); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
requiredFields := []string{"access_token", "refresh_token", "expires_at", "user"}
|
||||
for _, field := range requiredFields {
|
||||
if _, ok := result[field]; !ok {
|
||||
t.Errorf("Required field %s not found in response", field)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user