docs: add integration test run instructions to README.md
- Added section 8 'Тестирование' with run instructions, structure, features, and diagnostics - Also includes test file route path adjustments and import reordering
This commit is contained in:
@@ -1,202 +1,188 @@
|
||||
package integration
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"api_yal/tests/testutils"
|
||||
"fmt"
|
||||
"testing"
|
||||
"api_yal/tests/testutils"
|
||||
)
|
||||
|
||||
// TestAppealEndpoints тестирует все эндпоинты для работы с обращениями пользователей
|
||||
// Включает создание, получение, обновление, удаление обращений и получение списка своих обращений
|
||||
func TestAppealEndpoints(t *testing.T) {
|
||||
config := testutils.NewTestConfig()
|
||||
config := testutils.NewTestConfig()
|
||||
|
||||
// CreateAppeal тестирует создание нового обращения
|
||||
t.Run("CreateAppeal", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("CreateAppeal", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
appealData := map[string]interface{}{
|
||||
"type": "complaint",
|
||||
"title": "Test Appeal",
|
||||
"message": "This is a test appeal message for testing purposes",
|
||||
"priority": "high",
|
||||
"contact_name": "Test User",
|
||||
"contact_email": user.Email,
|
||||
}
|
||||
appealData := map[string]interface{}{
|
||||
"type": "complaint",
|
||||
"title": "Test Appeal",
|
||||
"message": "This is a test appeal message for testing purposes",
|
||||
"priority": "high",
|
||||
"contact_name": "Test User",
|
||||
"contact_email": user.Email,
|
||||
}
|
||||
|
||||
resp, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
resp, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Ожидаем статус 201 Created
|
||||
if resp.StatusCode != 201 {
|
||||
t.Errorf("Expected status 201, got %d", resp.StatusCode)
|
||||
}
|
||||
if resp.StatusCode != 201 {
|
||||
t.Errorf("Expected status 201, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var createdAppeal map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdAppeal); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var createdAppeal map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdAppeal); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
// Проверяем, что ID обращения присутствует в ответе
|
||||
if _, ok := createdAppeal["id"]; !ok {
|
||||
t.Error("Appeal ID not found")
|
||||
}
|
||||
})
|
||||
if _, ok := createdAppeal["id"]; !ok {
|
||||
t.Error("Appeal ID not found")
|
||||
}
|
||||
})
|
||||
|
||||
// GetAppealByID тестирует получение обращения по ID
|
||||
t.Run("GetAppealByID", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("GetAppealByID", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
// Создаем обращение
|
||||
appealData := map[string]interface{}{
|
||||
"type": "question",
|
||||
"title": "Test Question",
|
||||
"message": "This is a test question",
|
||||
"contact_email": user.Email,
|
||||
}
|
||||
resp, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
appealData := map[string]interface{}{
|
||||
"type": "question",
|
||||
"title": "Test Question",
|
||||
"message": "This is a test question",
|
||||
"contact_email": user.Email,
|
||||
}
|
||||
resp, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var createdAppeal map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdAppeal); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var createdAppeal map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdAppeal); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
appealID := createdAppeal["id"].(float64)
|
||||
appealID := createdAppeal["id"].(float64)
|
||||
|
||||
getResp, err := config.Request("GET", "/appeals/"+string(rune(appealID)), nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get appeal: %v", err)
|
||||
}
|
||||
defer getResp.Body.Close()
|
||||
getResp, err := config.Request("GET", "/appeals/"+fmt.Sprintf("%.0f", appealID), nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get appeal: %v", err)
|
||||
}
|
||||
defer getResp.Body.Close()
|
||||
|
||||
if getResp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", getResp.StatusCode)
|
||||
}
|
||||
})
|
||||
if getResp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", getResp.StatusCode)
|
||||
}
|
||||
})
|
||||
|
||||
// UpdateAppeal тестирует обновление существующего обращения
|
||||
t.Run("UpdateAppeal", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("UpdateAppeal", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
// Создаем обращение
|
||||
appealData := map[string]interface{}{
|
||||
"type": "suggestion",
|
||||
"title": "Original Title",
|
||||
"message": "Original message for testing",
|
||||
"contact_email": user.Email,
|
||||
}
|
||||
resp, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
appealData := map[string]interface{}{
|
||||
"type": "suggestion",
|
||||
"title": "Original Title",
|
||||
"message": "Original message for testing",
|
||||
"contact_email": user.Email,
|
||||
}
|
||||
resp, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var createdAppeal map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdAppeal); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var createdAppeal map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdAppeal); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
appealID := createdAppeal["id"].(float64)
|
||||
appealID := createdAppeal["id"].(float64)
|
||||
|
||||
updateData := map[string]interface{}{
|
||||
"title": "Updated Title",
|
||||
"message": "Updated message content",
|
||||
"priority": "critical",
|
||||
}
|
||||
updateData := map[string]interface{}{
|
||||
"title": "Updated Title",
|
||||
"message": "Updated message content",
|
||||
"priority": "critical",
|
||||
}
|
||||
|
||||
updateResp, err := config.Request("PUT", "/appeals/"+string(rune(appealID)), updateData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update appeal: %v", err)
|
||||
}
|
||||
defer updateResp.Body.Close()
|
||||
updateResp, err := config.Request("PUT", "/appeals/"+fmt.Sprintf("%.0f", appealID), updateData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update appeal: %v", err)
|
||||
}
|
||||
defer updateResp.Body.Close()
|
||||
|
||||
if updateResp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", updateResp.StatusCode)
|
||||
}
|
||||
})
|
||||
if updateResp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", updateResp.StatusCode)
|
||||
}
|
||||
})
|
||||
|
||||
// MyAppeals тестирует получение списка обращений текущего пользователя
|
||||
t.Run("MyAppeals", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("MyAppeals", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
// Создаем несколько обращений
|
||||
for i := 0; i < 3; i++ {
|
||||
appealData := map[string]interface{}{
|
||||
"type": "other",
|
||||
"title": "Test Appeal",
|
||||
"message": "Test message content",
|
||||
}
|
||||
_, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
}
|
||||
for i := 0; i < 3; i++ {
|
||||
appealData := map[string]interface{}{
|
||||
"type": "other",
|
||||
"title": "Test Appeal",
|
||||
"message": "Test message content",
|
||||
}
|
||||
_, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
resp, err := config.Request("GET", "/appeals/me", nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get my appeals: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
resp, err := config.Request("GET", "/appeals/me", nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get my appeals: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
})
|
||||
if resp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
})
|
||||
|
||||
// DeleteAppeal тестирует удаление обращения
|
||||
t.Run("DeleteAppeal", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("DeleteAppeal", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
// Создаем обращение
|
||||
appealData := map[string]interface{}{
|
||||
"type": "question",
|
||||
"title": "To Delete",
|
||||
"message": "This appeal will be deleted",
|
||||
}
|
||||
resp, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
appealData := map[string]interface{}{
|
||||
"type": "question",
|
||||
"title": "To Delete",
|
||||
"message": "This appeal will be deleted",
|
||||
}
|
||||
resp, err := config.Request("POST", "/appeals", appealData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create appeal: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var createdAppeal map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdAppeal); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var createdAppeal map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdAppeal); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
appealID := createdAppeal["id"].(float64)
|
||||
appealID := createdAppeal["id"].(float64)
|
||||
|
||||
deleteResp, err := config.Request("DELETE", "/appeals/"+string(rune(appealID)), nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to delete appeal: %v", err)
|
||||
}
|
||||
defer deleteResp.Body.Close()
|
||||
deleteResp, err := config.Request("DELETE", "/appeals/"+fmt.Sprintf("%.0f", appealID), nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to delete appeal: %v", err)
|
||||
}
|
||||
defer deleteResp.Body.Close()
|
||||
|
||||
// Ожидаем статус 204 No Content при успешном удалении
|
||||
if deleteResp.StatusCode != 204 {
|
||||
t.Errorf("Expected status 204, got %d", deleteResp.StatusCode)
|
||||
}
|
||||
if deleteResp.StatusCode != 204 {
|
||||
t.Errorf("Expected status 204, got %d", deleteResp.StatusCode)
|
||||
}
|
||||
|
||||
// Проверяем, что обращение удалено - должно вернуть 404
|
||||
getResp, err := config.Request("GET", "/appeals/"+string(rune(appealID)), nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get appeal: %v", err)
|
||||
}
|
||||
defer getResp.Body.Close()
|
||||
getResp, err := config.Request("GET", "/appeals/"+fmt.Sprintf("%.0f", appealID), nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get appeal: %v", err)
|
||||
}
|
||||
defer getResp.Body.Close()
|
||||
|
||||
if getResp.StatusCode != 404 {
|
||||
t.Errorf("Expected status 404 for deleted appeal, got %d", getResp.StatusCode)
|
||||
}
|
||||
})
|
||||
}
|
||||
if getResp.StatusCode != 404 {
|
||||
t.Errorf("Expected status 404 for deleted appeal, got %d", getResp.StatusCode)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user