package dto import ( "testing" "github.com/Wei-Shaw/sub2api/internal/service" "github.com/stretchr/testify/require" ) func TestUsageLogFromService_IncludesOpenAIWSMode(t *testing.T) { t.Parallel() wsLog := &service.UsageLog{ RequestID: "req_1", Model: "gpt-5.3-codex", OpenAIWSMode: true, } httpLog := &service.UsageLog{ RequestID: "resp_1", Model: "gpt-5.3-codex", OpenAIWSMode: false, } require.True(t, UsageLogFromService(wsLog).OpenAIWSMode) require.False(t, UsageLogFromService(httpLog).OpenAIWSMode) require.True(t, UsageLogFromServiceAdmin(wsLog).OpenAIWSMode) require.False(t, UsageLogFromServiceAdmin(httpLog).OpenAIWSMode) } func TestUsageLogFromService_PrefersRequestTypeForLegacyFields(t *testing.T) { t.Parallel() log := &service.UsageLog{ RequestID: "req_2", Model: "gpt-5.3-codex", RequestType: service.RequestTypeWSV2, Stream: false, OpenAIWSMode: false, } userDTO := UsageLogFromService(log) adminDTO := UsageLogFromServiceAdmin(log) require.Equal(t, "ws_v2", userDTO.RequestType) require.True(t, userDTO.Stream) require.True(t, userDTO.OpenAIWSMode) require.Equal(t, "ws_v2", adminDTO.RequestType) require.True(t, adminDTO.Stream) require.True(t, adminDTO.OpenAIWSMode) } func TestUsageCleanupTaskFromService_RequestTypeMapping(t *testing.T) { t.Parallel() requestType := int16(service.RequestTypeStream) task := &service.UsageCleanupTask{ ID: 1, Status: service.UsageCleanupStatusPending, Filters: service.UsageCleanupFilters{ RequestType: &requestType, }, } dtoTask := UsageCleanupTaskFromService(task) require.NotNil(t, dtoTask) require.NotNil(t, dtoTask.Filters.RequestType) require.Equal(t, "stream", *dtoTask.Filters.RequestType) } func TestRequestTypeStringPtrNil(t *testing.T) { t.Parallel() require.Nil(t, requestTypeStringPtr(nil)) }