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")
}
})
}