mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-04-19 05:29:18 +00:00
96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package actions
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"forgejo.org/models/db"
|
|
"forgejo.org/models/unittest"
|
|
|
|
"forgejo.org/modules/timeutil"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGetRunBefore(t *testing.T) {
|
|
require.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
// this repo is part of the test database requiring loading "repository.yml" in main_test.go
|
|
var repoID int64 = 1
|
|
|
|
workflowID := "test_workflow"
|
|
|
|
// third completed run
|
|
time1, err := time.Parse(time.RFC3339, "2024-07-31T15:47:55+08:00")
|
|
require.NoError(t, err)
|
|
timeutil.MockSet(time1)
|
|
run1 := ActionRun{
|
|
ID: 1,
|
|
Index: 1,
|
|
RepoID: repoID,
|
|
Stopped: timeutil.TimeStampNow(),
|
|
WorkflowID: workflowID,
|
|
}
|
|
|
|
// fourth completed run
|
|
time2, err := time.Parse(time.RFC3339, "2024-08-31T15:47:55+08:00")
|
|
require.NoError(t, err)
|
|
timeutil.MockSet(time2)
|
|
run2 := ActionRun{
|
|
ID: 2,
|
|
Index: 2,
|
|
RepoID: repoID,
|
|
Stopped: timeutil.TimeStampNow(),
|
|
WorkflowID: workflowID,
|
|
}
|
|
|
|
// second completed run
|
|
time3, err := time.Parse(time.RFC3339, "2024-07-31T15:47:54+08:00")
|
|
require.NoError(t, err)
|
|
timeutil.MockSet(time3)
|
|
run3 := ActionRun{
|
|
ID: 3,
|
|
Index: 3,
|
|
RepoID: repoID,
|
|
Stopped: timeutil.TimeStampNow(),
|
|
WorkflowID: workflowID,
|
|
}
|
|
|
|
// first completed run
|
|
time4, err := time.Parse(time.RFC3339, "2024-06-30T15:47:54+08:00")
|
|
require.NoError(t, err)
|
|
timeutil.MockSet(time4)
|
|
run4 := ActionRun{
|
|
ID: 4,
|
|
Index: 4,
|
|
RepoID: repoID,
|
|
Stopped: timeutil.TimeStampNow(),
|
|
WorkflowID: workflowID,
|
|
}
|
|
require.NoError(t, db.Insert(db.DefaultContext, &run1))
|
|
runBefore, err := GetRunBefore(db.DefaultContext, repoID, run1.Stopped)
|
|
// there is no run before run1
|
|
require.Error(t, err)
|
|
require.Nil(t, runBefore)
|
|
|
|
// now there is only run3 before run1
|
|
require.NoError(t, db.Insert(db.DefaultContext, &run3))
|
|
runBefore, err = GetRunBefore(db.DefaultContext, repoID, run1.Stopped)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, run3.ID, runBefore.ID)
|
|
|
|
// there still is only run3 before run1
|
|
require.NoError(t, db.Insert(db.DefaultContext, &run2))
|
|
runBefore, err = GetRunBefore(db.DefaultContext, repoID, run1.Stopped)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, run3.ID, runBefore.ID)
|
|
|
|
// run4 is further away from run1
|
|
require.NoError(t, db.Insert(db.DefaultContext, &run4))
|
|
runBefore, err = GetRunBefore(db.DefaultContext, repoID, run1.Stopped)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, run3.ID, runBefore.ID)
|
|
}
|