update state history session type
All checks were successful
Release and Deploy / build (push) Successful in 2m25s
Release and Deploy / deploy (push) Successful in 26s

This commit is contained in:
Fran Jurmanović
2025-09-15 19:11:25 +02:00
parent 4ab94de529
commit 760412d7db
13 changed files with 386 additions and 205 deletions

View File

@@ -260,7 +260,7 @@ func (m *MockStateHistoryRepository) GetSessionTypes(ctx context.Context, filter
}
// Group by session type
sessionMap := make(map[string]map[string]bool) // session -> sessionID -> bool
sessionMap := make(map[model.TrackSession]map[string]bool) // session -> sessionID -> bool
for _, entry := range filteredEntries {
if sessionMap[entry.Session] == nil {
sessionMap[entry.Session] = make(map[string]bool)

View File

@@ -22,7 +22,7 @@ func NewStateHistoryTestData(serverID uuid.UUID) *StateHistoryTestData {
}
// CreateStateHistory creates a basic state history entry
func (td *StateHistoryTestData) CreateStateHistory(session string, track string, playerCount int, sessionID uuid.UUID) model.StateHistory {
func (td *StateHistoryTestData) CreateStateHistory(session model.TrackSession, track string, playerCount int, sessionID uuid.UUID) model.StateHistory {
return model.StateHistory{
ID: uuid.New(),
ServerID: td.ServerID,
@@ -37,7 +37,7 @@ func (td *StateHistoryTestData) CreateStateHistory(session string, track string,
}
// CreateMultipleEntries creates multiple state history entries for the same session
func (td *StateHistoryTestData) CreateMultipleEntries(session string, track string, playerCounts []int) []model.StateHistory {
func (td *StateHistoryTestData) CreateMultipleEntries(session model.TrackSession, track string, playerCounts []int) []model.StateHistory {
sessionID := uuid.New()
var entries []model.StateHistory
@@ -69,7 +69,7 @@ func CreateBasicFilter(serverID string) *model.StateHistoryFilter {
}
// CreateFilterWithSession creates a filter with session type
func CreateFilterWithSession(serverID string, session string) *model.StateHistoryFilter {
func CreateFilterWithSession(serverID string, session model.TrackSession) *model.StateHistoryFilter {
return &model.StateHistoryFilter{
ServerBasedFilter: model.ServerBasedFilter{
ServerID: serverID,
@@ -97,13 +97,13 @@ var SampleLogLines = []string{
// ExpectedSessionChanges represents the expected session changes from parsing the sample log lines
var ExpectedSessionChanges = []struct {
From string
To string
From model.TrackSession
To model.TrackSession
}{
{"NONE", "PRACTICE"},
{"PRACTICE", "QUALIFY"},
{"QUALIFY", "RACE"},
{"RACE", "NONE"},
{model.SessionUnknown, model.SessionPractice},
{model.SessionPractice, model.SessionQualify},
{model.SessionQualify, model.SessionRace},
{model.SessionRace, model.SessionUnknown},
}
// ExpectedPlayerCounts represents the expected player counts from parsing the sample log lines

View File

@@ -46,7 +46,7 @@ func TestStateHistoryController_GetAll_Success(t *testing.T) {
// Insert test data
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
history := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
err := repo.Insert(helper.CreateContext(), &history)
tests.AssertNoError(t, err)
@@ -78,7 +78,7 @@ func TestStateHistoryController_GetAll_Success(t *testing.T) {
err = json.Unmarshal(body, &result)
tests.AssertNoError(t, err)
tests.AssertEqual(t, 1, len(result))
tests.AssertEqual(t, "Practice", result[0].Session)
tests.AssertEqual(t, model.SessionPractice, result[0].Session)
tests.AssertEqual(t, 5, result[0].PlayerCount)
}
@@ -107,8 +107,8 @@ func TestStateHistoryController_GetAll_WithSessionFilter(t *testing.T) {
// Insert test data with different sessions
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
practiceHistory := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
raceHistory := testData.CreateStateHistory("Race", "spa", 10, uuid.New())
practiceHistory := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
raceHistory := testData.CreateStateHistory(model.SessionRace, "spa", 10, uuid.New())
err := repo.Insert(helper.CreateContext(), &practiceHistory)
tests.AssertNoError(t, err)
@@ -124,7 +124,7 @@ func TestStateHistoryController_GetAll_WithSessionFilter(t *testing.T) {
controller.NewStateHistoryController(stateHistoryService, routeGroups, GetTestAuthMiddleware(membershipService, inMemCache))
// Create request with session filter and authentication
req := httptest.NewRequest("GET", fmt.Sprintf("/api/v1/state-history?id=%s&session=Race", helper.TestData.ServerID.String()), nil)
req := httptest.NewRequest("GET", fmt.Sprintf("/api/v1/state-history?id=%s&session=R", helper.TestData.ServerID.String()), nil)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+tests.MustGenerateTestToken())
@@ -143,7 +143,7 @@ func TestStateHistoryController_GetAll_WithSessionFilter(t *testing.T) {
err = json.Unmarshal(body, &result)
tests.AssertNoError(t, err)
tests.AssertEqual(t, 1, len(result))
tests.AssertEqual(t, "Race", result[0].Session)
tests.AssertEqual(t, model.SessionRace, result[0].Session)
tests.AssertEqual(t, 10, result[0].PlayerCount)
}
@@ -220,7 +220,7 @@ func TestStateHistoryController_GetStatistics_Success(t *testing.T) {
// Create entries with varying player counts
playerCounts := []int{5, 10, 15, 20, 25}
entries := testData.CreateMultipleEntries("Race", "spa", playerCounts)
entries := testData.CreateMultipleEntries(model.SessionRace, "spa", playerCounts)
for _, entry := range entries {
err := repo.Insert(helper.CreateContext(), &entry)
@@ -475,7 +475,7 @@ func TestStateHistoryController_ContentType(t *testing.T) {
// Insert test data
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
history := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
err := repo.Insert(helper.CreateContext(), &history)
tests.AssertNoError(t, err)
@@ -551,7 +551,7 @@ func TestStateHistoryController_ResponseStructure(t *testing.T) {
// Insert test data
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
history := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
err := repo.Insert(helper.CreateContext(), &history)
tests.AssertNoError(t, err)

View File

@@ -30,7 +30,7 @@ func TestStateHistoryRepository_Insert_Success(t *testing.T) {
// Create test data
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
history := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
// Test Insert
err := repo.Insert(ctx, &history)
@@ -65,7 +65,7 @@ func TestStateHistoryRepository_GetAll_Success(t *testing.T) {
// Insert multiple entries
playerCounts := []int{0, 5, 10, 15, 10, 5, 0}
entries := testData.CreateMultipleEntries("Practice", "spa", playerCounts)
entries := testData.CreateMultipleEntries(model.SessionPractice, "spa", playerCounts)
for _, entry := range entries {
err := repo.Insert(ctx, &entry)
@@ -101,8 +101,8 @@ func TestStateHistoryRepository_GetAll_WithFilter(t *testing.T) {
// Create test data with different sessions
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
practiceHistory := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
raceHistory := testData.CreateStateHistory("Race", "spa", 15, uuid.New())
practiceHistory := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
raceHistory := testData.CreateStateHistory(model.SessionRace, "spa", 15, uuid.New())
// Insert both
err := repo.Insert(ctx, &practiceHistory)
@@ -111,13 +111,13 @@ func TestStateHistoryRepository_GetAll_WithFilter(t *testing.T) {
tests.AssertNoError(t, err)
// Test GetAll with session filter
filter := testdata.CreateFilterWithSession(helper.TestData.ServerID.String(), "Race")
filter := testdata.CreateFilterWithSession(helper.TestData.ServerID.String(), model.SessionRace)
result, err := repo.GetAll(ctx, filter)
tests.AssertNoError(t, err)
tests.AssertNotNil(t, result)
tests.AssertEqual(t, 1, len(*result))
tests.AssertEqual(t, "Race", (*result)[0].Session)
tests.AssertEqual(t, model.SessionRace, (*result)[0].Session)
tests.AssertEqual(t, 15, (*result)[0].PlayerCount)
}
@@ -145,8 +145,8 @@ func TestStateHistoryRepository_GetLastSessionID_Success(t *testing.T) {
sessionID1 := uuid.New()
sessionID2 := uuid.New()
history1 := testData.CreateStateHistory("Practice", "spa", 5, sessionID1)
history2 := testData.CreateStateHistory("Race", "spa", 10, sessionID2)
history1 := testData.CreateStateHistory(model.SessionPractice, "spa", 5, sessionID1)
history2 := testData.CreateStateHistory(model.SessionRace, "spa", 10, sessionID2)
// Insert with a small delay to ensure ordering
err := repo.Insert(ctx, &history1)
@@ -217,7 +217,7 @@ func TestStateHistoryRepository_GetSummaryStats_Success(t *testing.T) {
sessionID2 := uuid.New()
// Practice session: 5, 10, 15 players
practiceEntries := testData.CreateMultipleEntries("Practice", "spa", []int{5, 10, 15})
practiceEntries := testData.CreateMultipleEntries(model.SessionPractice, "spa", []int{5, 10, 15})
for i := range practiceEntries {
practiceEntries[i].SessionID = sessionID1
err := repo.Insert(ctx, &practiceEntries[i])
@@ -225,7 +225,7 @@ func TestStateHistoryRepository_GetSummaryStats_Success(t *testing.T) {
}
// Race session: 20, 25, 30 players
raceEntries := testData.CreateMultipleEntries("Race", "spa", []int{20, 25, 30})
raceEntries := testData.CreateMultipleEntries(model.SessionRace, "spa", []int{20, 25, 30})
for i := range raceEntries {
raceEntries[i].SessionID = sessionID2
err := repo.Insert(ctx, &raceEntries[i])
@@ -305,7 +305,7 @@ func TestStateHistoryRepository_GetTotalPlaytime_Success(t *testing.T) {
{
ID: uuid.New(),
ServerID: helper.TestData.ServerID,
Session: "Practice",
Session: model.SessionPractice,
Track: "spa",
PlayerCount: 5,
DateCreated: baseTime,
@@ -316,7 +316,7 @@ func TestStateHistoryRepository_GetTotalPlaytime_Success(t *testing.T) {
{
ID: uuid.New(),
ServerID: helper.TestData.ServerID,
Session: "Practice",
Session: model.SessionPractice,
Track: "spa",
PlayerCount: 10,
DateCreated: baseTime.Add(30 * time.Minute),
@@ -327,7 +327,7 @@ func TestStateHistoryRepository_GetTotalPlaytime_Success(t *testing.T) {
{
ID: uuid.New(),
ServerID: helper.TestData.ServerID,
Session: "Practice",
Session: model.SessionPractice,
Track: "spa",
PlayerCount: 8,
DateCreated: baseTime.Add(60 * time.Minute),
@@ -391,7 +391,7 @@ func TestStateHistoryRepository_ConcurrentOperations(t *testing.T) {
}
// Create and insert initial entry to ensure table exists and is properly set up
initialHistory := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
initialHistory := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
err := repo.Insert(ctx, &initialHistory)
if err != nil {
t.Fatalf("Failed to insert initial record: %v", err)
@@ -404,7 +404,7 @@ func TestStateHistoryRepository_ConcurrentOperations(t *testing.T) {
defer func() {
done <- true
}()
history := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
err := repo.Insert(ctx, &history)
if err != nil {
t.Logf("Insert error: %v", err)
@@ -462,7 +462,7 @@ func TestStateHistoryRepository_FilterEdgeCases(t *testing.T) {
// Insert a test record to ensure the table is properly set up
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
history := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
err := repo.Insert(ctx, &history)
tests.AssertNoError(t, err)

View File

@@ -94,7 +94,7 @@ func TestConfigService_GetEventConfig_ValidFile(t *testing.T) {
// Verify sessions
tests.AssertEqual(t, 3, len(eventConfig.Sessions))
if len(eventConfig.Sessions) > 0 {
tests.AssertEqual(t, "P", eventConfig.Sessions[0].SessionType)
tests.AssertEqual(t, model.SessionPractice, eventConfig.Sessions[0].SessionType)
tests.AssertEqual(t, model.IntString(10), eventConfig.Sessions[0].SessionDurationMinutes)
}
}

View File

@@ -33,7 +33,7 @@ func TestStateHistoryService_GetAll_Success(t *testing.T) {
// Insert test data directly into DB
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
history := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
err := repo.Insert(helper.CreateContext(), &history)
tests.AssertNoError(t, err)
@@ -49,7 +49,7 @@ func TestStateHistoryService_GetAll_Success(t *testing.T) {
tests.AssertNoError(t, err)
tests.AssertNotNil(t, result)
tests.AssertEqual(t, 1, len(*result))
tests.AssertEqual(t, "Practice", (*result)[0].Session)
tests.AssertEqual(t, model.SessionPractice, (*result)[0].Session)
tests.AssertEqual(t, 5, (*result)[0].PlayerCount)
}
@@ -71,8 +71,8 @@ func TestStateHistoryService_GetAll_WithFilter(t *testing.T) {
// Insert test data with different sessions
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
practiceHistory := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
raceHistory := testData.CreateStateHistory("Race", "spa", 10, uuid.New())
practiceHistory := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
raceHistory := testData.CreateStateHistory(model.SessionRace, "spa", 10, uuid.New())
err := repo.Insert(helper.CreateContext(), &practiceHistory)
tests.AssertNoError(t, err)
@@ -85,13 +85,13 @@ func TestStateHistoryService_GetAll_WithFilter(t *testing.T) {
defer helper.ReleaseFiberCtx(app, ctx)
// Test GetAll with session filter
filter := testdata.CreateFilterWithSession(helper.TestData.ServerID.String(), "Race")
filter := testdata.CreateFilterWithSession(helper.TestData.ServerID.String(), model.SessionRace)
result, err := stateHistoryService.GetAll(ctx, filter)
tests.AssertNoError(t, err)
tests.AssertNotNil(t, result)
tests.AssertEqual(t, 1, len(*result))
tests.AssertEqual(t, "Race", (*result)[0].Session)
tests.AssertEqual(t, model.SessionRace, (*result)[0].Session)
tests.AssertEqual(t, 10, (*result)[0].PlayerCount)
}
@@ -143,7 +143,7 @@ func TestStateHistoryService_Insert_Success(t *testing.T) {
// Create test data
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
history := testData.CreateStateHistory("Practice", "spa", 5, uuid.New())
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, uuid.New())
// Create proper Fiber context
app := fiber.New()
@@ -180,7 +180,7 @@ func TestStateHistoryService_GetLastSessionID_Success(t *testing.T) {
// Insert test data
testData := testdata.NewStateHistoryTestData(helper.TestData.ServerID)
sessionID := uuid.New()
history := testData.CreateStateHistory("Practice", "spa", 5, sessionID)
history := testData.CreateStateHistory(model.SessionPractice, "spa", 5, sessionID)
err := repo.Insert(helper.CreateContext(), &history)
tests.AssertNoError(t, err)
@@ -254,7 +254,7 @@ func TestStateHistoryService_GetStatistics_Success(t *testing.T) {
{
ID: uuid.New(),
ServerID: helper.TestData.ServerID,
Session: "Practice",
Session: model.SessionPractice,
Track: "spa",
PlayerCount: 5,
DateCreated: baseTime,
@@ -265,7 +265,7 @@ func TestStateHistoryService_GetStatistics_Success(t *testing.T) {
{
ID: uuid.New(),
ServerID: helper.TestData.ServerID,
Session: "Practice",
Session: model.SessionPractice,
Track: "spa",
PlayerCount: 10,
DateCreated: baseTime.Add(5 * time.Minute),
@@ -276,7 +276,7 @@ func TestStateHistoryService_GetStatistics_Success(t *testing.T) {
{
ID: uuid.New(),
ServerID: helper.TestData.ServerID,
Session: "Race",
Session: model.SessionRace,
Track: "spa",
PlayerCount: 15,
DateCreated: baseTime.Add(10 * time.Minute),
@@ -404,7 +404,7 @@ func TestStateHistoryService_LogParsingWorkflow(t *testing.T) {
}
// Verify session changes were parsed correctly
expectedSessions := []string{"PRACTICE", "QUALIFY", "RACE", "NONE"}
expectedSessions := []model.TrackSession{model.SessionPractice, model.SessionQualify, model.SessionRace}
sessionIndex := 0
for _, state := range stateChanges {
@@ -433,7 +433,7 @@ func TestStateHistoryService_SessionChangeTracking(t *testing.T) {
Name: "Test Server",
}
var sessionChanges []string
var sessionChanges []model.TrackSession
onStateChange := func(state *model.ServerState, changes ...tracking.StateChange) {
for _, change := range changes {
if change == tracking.Session {
@@ -448,7 +448,7 @@ func TestStateHistoryService_SessionChangeTracking(t *testing.T) {
// We'll add one session change at a time and wait briefly to ensure they're processed in order
for _, expected := range testdata.ExpectedSessionChanges {
line := "[2024-01-15 14:30:25.123] Session changed: " + expected.From + " -> " + expected.To
line := string("[2024-01-15 14:30:25.123] Session changed: " + expected.From + " -> " + expected.To)
instance.HandleLogLine(line)
// Small pause to ensure log processing completes
time.Sleep(10 * time.Millisecond)