Загрузка данных


package logger

import (
	"context"
	"testing"
	"time"
)

// Тест сохранения и получения имени сервиса
func TestSetAndGetServiceName(t *testing.T) {
	expected := "my-backend-service"
	SetServiceName(expected)

	got := GetServiceName()
	if got != expected {
		t.Errorf("ожидалось имя сервиса %q, получено %q", expected, got)
	}
}

// Тест работы с контекстом запроса
func TestGetRequestDataFromCtx(t *testing.T) {
	t.Run("успешный сценарий: данные есть в контексте", func(t *testing.T) {
		expectedDTO := &RequestDTO{
			Method:    "POST",
			URL:       "/api/v1/orders",
			StartTime: time.Now(),
			RequestID: "req-uuid-12345",
			Cached:    false,
		}

		// Кладем DTO в контекст по нашему ключу
		ctx := context.WithValue(context.Background(), RequestContextKey, expectedDTO)

		got, err := GetRequestDataFromCtx(ctx)
		if err != nil {
			t.Fatalf("ожидалась успешное извлечение из контекста, получена ошибка: %v", err)
		}

		if got.RequestID != expectedDTO.RequestID {
			t.Errorf("ожидался RequestID %q, получен %q", expectedDTO.RequestID, got.RequestID)
		}
		if got.Method != expectedDTO.Method {
			t.Errorf("ожидался Method %q, получен %q", expectedDTO.Method, got.Method)
		}
	})

	t.Run("ошибка: данных нет в контексте", func(t *testing.T) {
		ctx := context.Background()

		got, err := GetRequestDataFromCtx(ctx)
		if err == nil {
			t.Error("ожидалась ошибка из-за отсутствия данных в контексте, но err == nil")
		}
		if got != nil {
			t.Errorf("ожидался nil результат, получено %#v", got)
		}
	})
}

// Тест базовой инициализации логгера
func TestLoggerInitialization(t *testing.T) {
	t.Run("Get возвращает валидный инстанс логгера", func(t *testing.T) {
		log := Get()
		if log == nil {
			t.Fatal("Get() вернул nil")
		}
	})

	t.Run("LogWithUserData корректно создает logrus.Entry", func(t *testing.T) {
		ctx := context.Background()
		entry := LogWithUserData(ctx)
		if entry == nil {
			t.Fatal("LogWithUserData() вернул nil")
		}
	})
}