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,235 +1,221 @@
|
||||
package integration
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"api_yal/tests/testutils"
|
||||
"fmt"
|
||||
"testing"
|
||||
"api_yal/tests/testutils"
|
||||
)
|
||||
|
||||
// TestCommentEndpoints тестирует все эндпоинты для работы с комментариями к отзывам
|
||||
// Включает создание, получение, обновление, удаление комментариев и получение статистики
|
||||
func TestCommentEndpoints(t *testing.T) {
|
||||
config := testutils.NewTestConfig()
|
||||
config := testutils.NewTestConfig()
|
||||
|
||||
// CreateComment тестирует создание нового комментария к отзыву
|
||||
t.Run("CreateComment", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("CreateComment", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
|
||||
commentData := testutils.CreateCommentRequest{
|
||||
FeedbackID: feedbackID,
|
||||
Text: "Great review! I agree completely.",
|
||||
}
|
||||
commentData := testutils.CreateCommentRequest{
|
||||
FeedbackID: feedbackID,
|
||||
Text: "Great review! I agree completely.",
|
||||
}
|
||||
|
||||
resp, err := config.Request("POST", "/comments", commentData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create comment: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
resp, err := config.Request("POST", "/comments", commentData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create comment: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
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 createdComment map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdComment); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var createdComment map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdComment); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
if _, ok := createdComment["id"]; !ok {
|
||||
t.Error("Comment ID not found")
|
||||
}
|
||||
})
|
||||
if _, ok := createdComment["id"]; !ok {
|
||||
t.Error("Comment ID not found")
|
||||
}
|
||||
})
|
||||
|
||||
// GetCommentByID тестирует получение комментария по ID
|
||||
t.Run("GetCommentByID", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("GetCommentByID", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
|
||||
// Создаем комментарий
|
||||
commentData := testutils.CreateCommentRequest{
|
||||
FeedbackID: feedbackID,
|
||||
Text: "Test comment",
|
||||
}
|
||||
resp, err := config.Request("POST", "/comments", commentData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create comment: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
commentData := testutils.CreateCommentRequest{
|
||||
FeedbackID: feedbackID,
|
||||
Text: "Test comment",
|
||||
}
|
||||
resp, err := config.Request("POST", "/comments", commentData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create comment: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var createdComment map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdComment); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var createdComment map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdComment); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
commentID := createdComment["id"].(float64)
|
||||
commentID := createdComment["id"].(float64)
|
||||
|
||||
// Получение комментария доступно без авторизации
|
||||
getResp, err := config.Request("GET", "/comments/"+string(rune(commentID)), nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get comment: %v", err)
|
||||
}
|
||||
defer getResp.Body.Close()
|
||||
getResp, err := config.Request("GET", "/comments/"+fmt.Sprintf("%.0f", commentID), nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get comment: %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)
|
||||
}
|
||||
})
|
||||
|
||||
// UpdateComment тестирует обновление текста комментария автором
|
||||
t.Run("UpdateComment", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("UpdateComment", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
|
||||
// Создаем комментарий
|
||||
commentData := testutils.CreateCommentRequest{
|
||||
FeedbackID: feedbackID,
|
||||
Text: "Original comment",
|
||||
}
|
||||
resp, err := config.Request("POST", "/comments", commentData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create comment: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
commentData := testutils.CreateCommentRequest{
|
||||
FeedbackID: feedbackID,
|
||||
Text: "Original comment",
|
||||
}
|
||||
resp, err := config.Request("POST", "/comments", commentData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create comment: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var createdComment map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdComment); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var createdComment map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdComment); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
commentID := createdComment["id"].(float64)
|
||||
commentID := createdComment["id"].(float64)
|
||||
|
||||
updateData := map[string]interface{}{
|
||||
"text": "Updated comment text",
|
||||
}
|
||||
updateData := map[string]interface{}{
|
||||
"text": "Updated comment text",
|
||||
}
|
||||
|
||||
updateResp, err := config.Request("PUT", "/comments/"+string(rune(commentID)), updateData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update comment: %v", err)
|
||||
}
|
||||
defer updateResp.Body.Close()
|
||||
updateResp, err := config.Request("PUT", "/comments/"+fmt.Sprintf("%.0f", commentID), updateData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to update comment: %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)
|
||||
}
|
||||
})
|
||||
|
||||
// ListComments тестирует получение списка комментариев с пагинацией
|
||||
t.Run("ListComments", func(t *testing.T) {
|
||||
resp, err := config.Request("GET", "/comments?page=1&page_size=20", nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to list comments: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
t.Run("ListComments", func(t *testing.T) {
|
||||
resp, err := config.Request("GET", "/comments?page=1&page_size=20", nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to list comments: %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)
|
||||
}
|
||||
})
|
||||
|
||||
// MyComments тестирует получение комментариев текущего пользователя
|
||||
t.Run("MyComments", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("MyComments", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
resp, err := config.Request("GET", "/comments/my", nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get my comments: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
resp, err := config.Request("GET", "/comments/my", nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get my comments: %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)
|
||||
}
|
||||
})
|
||||
|
||||
// CommentsByFeedback тестирует получение комментариев для конкретного отзыва
|
||||
t.Run("CommentsByFeedback", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("CommentsByFeedback", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
|
||||
resp, err := config.Request("GET", "/comments/feedback/"+string(rune(feedbackID)), nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get comments by feedback: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
resp, err := config.Request("GET", "/comments/feedback/"+fmt.Sprintf("%d", feedbackID), nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get comments by feedback: %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)
|
||||
}
|
||||
})
|
||||
|
||||
// CommentStats тестирует получение статистики по комментариям
|
||||
t.Run("CommentStats", func(t *testing.T) {
|
||||
resp, err := config.Request("GET", "/comments/stats", nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get comment stats: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
t.Run("CommentStats", func(t *testing.T) {
|
||||
resp, err := config.Request("GET", "/comments/stats", nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get comment stats: %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)
|
||||
}
|
||||
|
||||
var stats map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &stats); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var stats map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &stats); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
// Проверяем наличие полей статистики
|
||||
expectedFields := []string{"total_comments", "verified_comments", "unverified_comments"}
|
||||
for _, field := range expectedFields {
|
||||
if _, ok := stats[field]; !ok {
|
||||
t.Errorf("Expected field %s not found", field)
|
||||
}
|
||||
}
|
||||
})
|
||||
expectedFields := []string{"total_comments", "verified_comments", "unverified_comments"}
|
||||
for _, field := range expectedFields {
|
||||
if _, ok := stats[field]; !ok {
|
||||
t.Errorf("Expected field %s not found", field)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// DeleteComment тестирует удаление комментария автором
|
||||
t.Run("DeleteComment", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
t.Run("DeleteComment", func(t *testing.T) {
|
||||
user := config.CreateTestUser(t)
|
||||
defer config.CleanupTestUser(t, user)
|
||||
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
objectID := config.CreateTestObject(t, user.Token)
|
||||
feedbackID := config.CreateTestFeedback(t, user.Token, objectID)
|
||||
|
||||
// Создаем комментарий
|
||||
commentData := testutils.CreateCommentRequest{
|
||||
FeedbackID: feedbackID,
|
||||
Text: "Comment to delete",
|
||||
}
|
||||
resp, err := config.Request("POST", "/comments", commentData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create comment: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
commentData := testutils.CreateCommentRequest{
|
||||
FeedbackID: feedbackID,
|
||||
Text: "Comment to delete",
|
||||
}
|
||||
resp, err := config.Request("POST", "/comments", commentData, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create comment: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var createdComment map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdComment); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
var createdComment map[string]interface{}
|
||||
if err := config.ParseResponse(resp, &createdComment); err != nil {
|
||||
t.Fatalf("Failed to parse response: %v", err)
|
||||
}
|
||||
|
||||
commentID := createdComment["id"].(float64)
|
||||
commentID := createdComment["id"].(float64)
|
||||
|
||||
deleteResp, err := config.Request("DELETE", "/comments/"+string(rune(commentID)), nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to delete comment: %v", err)
|
||||
}
|
||||
defer deleteResp.Body.Close()
|
||||
deleteResp, err := config.Request("DELETE", "/comments/"+fmt.Sprintf("%.0f", commentID), nil, user.Token)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to delete comment: %v", err)
|
||||
}
|
||||
defer deleteResp.Body.Close()
|
||||
|
||||
if deleteResp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", deleteResp.StatusCode)
|
||||
}
|
||||
})
|
||||
}
|
||||
if deleteResp.StatusCode != 200 {
|
||||
t.Errorf("Expected status 200, got %d", deleteResp.StatusCode)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user