On branch main

modified:   main_dc/yalarba/api_yal/cmd/testrunner/main.go
	modified:   main_dc/yalarba/api_yal/cmd/testrunner/runner.go
	modified:   main_dc/yalarba/api_yal/tests/integration/account_test.go
	modified:   main_dc/yalarba/api_yal/tests/integration/appeal_test.go
	modified:   main_dc/yalarba/api_yal/tests/integration/auth_test.go
	modified:   main_dc/yalarba/api_yal/tests/integration/comment_test.go
	modified:   main_dc/yalarba/api_yal/tests/integration/feedback_test.go
	modified:   main_dc/yalarba/api_yal/tests/integration/object_test.go
	modified:   main_dc/yalarba/api_yal/tests/integration/rating_test.go
	deleted:    main_dc/yalarba/api_yal/tests/testutils/client.go
	modified:   main_dc/yalarba/api_yal/tests/testutils/fixtures.go
	modified:   main_dc/yalarba/api_yal/tests/testutils/setup.go
write comments for and into test's functions
This commit is contained in:
2026-06-08 01:58:04 +05:00
parent b4574f9df1
commit d1e45c7686
12 changed files with 346 additions and 118 deletions
@@ -11,20 +11,26 @@ import (
"time"
)
// TestConfig хранит конфигурацию для тестов
// Содержит базовый URL API и HTTP клиент с поддержкой cookies
type TestConfig struct {
BaseURL string
Client *http.Client
BaseURL string // Базовый URL API сервера
Client *http.Client // HTTP клиент с поддержкой cookies
}
// TestUser хранит данные тестового пользователя
type TestUser struct {
Email string
Password string
FirstName string
LastName string
Token string
UserID uint
Email string // Email пользователя
Password string // Пароль пользователя
FirstName string // Имя пользователя
LastName string // Фамилия пользователя
Token string // JWT токен доступа
UserID uint // ID пользователя в системе
}
// NewTestConfig создает новую конфигурацию для тестов
// Настраивает HTTP клиент с поддержкой cookies и таймаутом 30 секунд
// Возвращает указатель на TestConfig
func NewTestConfig() *TestConfig {
jar, _ := cookiejar.New(nil)
return &TestConfig{
@@ -36,6 +42,13 @@ func NewTestConfig() *TestConfig {
}
}
// Request выполняет HTTP запрос к API
// Параметры:
// - method: HTTP метод (GET, POST, PUT, DELETE)
// - path: путь эндпоинта (относительно BaseURL)
// - body: тело запроса (будет сериализовано в JSON)
// - token: JWT токен для авторизации (может быть пустым)
// Возвращает: HTTP ответ и ошибку
func (c *TestConfig) Request(method, path string, body interface{}, token string) (*http.Response, error) {
var reqBody io.Reader
if body != nil {
@@ -59,6 +72,11 @@ func (c *TestConfig) Request(method, path string, body interface{}, token string
return c.Client.Do(req)
}
// ParseResponse парсит JSON ответ HTTP запроса в указанную структуру
// Параметры:
// - resp: HTTP ответ для парсинга
// - target: указатель на структуру, в которую нужно распарсить JSON
// Возвращает: ошибку парсинга
func (c *TestConfig) ParseResponse(resp *http.Response, target interface{}) error {
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
@@ -68,6 +86,11 @@ func (c *TestConfig) ParseResponse(resp *http.Response, target interface{}) erro
return json.Unmarshal(body, target)
}
// CreateTestUser создает тестового пользователя через API регистрации
// Автоматически генерирует уникальный email на основе timestamp
// Параметры:
// - t: указатель на тест для логирования ошибок
// Возвращает: указатель на созданного TestUser с заполненными полями (включая токен)
func (c *TestConfig) CreateTestUser(t *testing.T) *TestUser {
user := &TestUser{
Email: fmt.Sprintf("test_%d@example.com", time.Now().UnixNano()),
@@ -92,9 +115,11 @@ func (c *TestConfig) CreateTestUser(t *testing.T) *TestUser {
t.Fatalf("Failed to parse response: %v", err)
}
// Извлекаем токен из ответа
if token, ok := result["token"].(string); ok {
user.Token = token
}
// Извлекаем ID пользователя из ответа
if userData, ok := result["user"].(map[string]interface{}); ok {
if id, ok := userData["id"].(float64); ok {
user.UserID = uint(id)
@@ -104,6 +129,11 @@ func (c *TestConfig) CreateTestUser(t *testing.T) *TestUser {
return user
}
// CleanupTestUser удаляет тестового пользователя через API
// Вызывается через defer после создания пользователя для очистки
// Параметры:
// - t: указатель на тест для логирования предупреждений
// - user: тестовый пользователь для удаления
func (c *TestConfig) CleanupTestUser(t *testing.T, user *TestUser) {
if user.Token != "" {
_, err := c.Request("DELETE", "/account", nil, user.Token)
@@ -113,6 +143,11 @@ func (c *TestConfig) CleanupTestUser(t *testing.T, user *TestUser) {
}
}
// GetAuthToken выполняет вход пользователя и возвращает JWT токен
// Параметры:
// - email: email пользователя
// - password: пароль пользователя
// Возвращает: JWT токен и ошибку
func (c *TestConfig) GetAuthToken(email, password string) (string, error) {
resp, err := c.Request("POST", "/auth/login", map[string]interface{}{
"email": email,