Skip to content

Commit a3b42a9

Browse files
committed
add tests
1 parent f1de208 commit a3b42a9

File tree

5 files changed

+134
-0
lines changed

5 files changed

+134
-0
lines changed

models/actions/runner.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,9 @@ func (opts FindRunnerOptions) ToConds() builder.Cond {
200200
c = c.Or(builder.Eq{"repo_id": 0, "owner_id": 0})
201201
}
202202
cond = cond.And(c)
203+
} else if !opts.WithAvailable {
204+
c := builder.NewCond().And(builder.Eq{"repo_id": 0, "owner_id": 0})
205+
cond = cond.And(c)
203206
}
204207

205208
if opts.Filter != "" {

models/fixtures/action_runner.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-
2+
id: 34344
3+
name: runner_to_be_deleted
4+
uuid: 3EF231BD-FBB7-4E4B-9602-E6F28363EF17
5+
version: "1.0.0"
6+
owner_id: 0
7+
repo_id: 0
8+
description: "This runner is going to be deleted"
9+
agent_labels: '["runner_to_be_deleted","linux"]'
10+
-
11+
id: 34346
12+
name: runner_to_be_deleted-user
13+
uuid: 3EF231BD-FBB7-4E4B-9602-E6F28363EF18
14+
version: "1.0.0"
15+
owner_id: 1
16+
repo_id: 0
17+
description: "This runner is going to be deleted"
18+
agent_labels: '["runner_to_be_deleted","linux"]'

routers/web/shared/actions/runners.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ func Runners(ctx *context.Context) {
129129
} else if rCtx.IsOrg || rCtx.IsUser {
130130
opts.OwnerID = rCtx.OwnerID
131131
opts.WithAvailable = true
132+
} else {
133+
opts.WithAvailable = true
132134
}
133135

134136
runners, count, err := db.FindAndCount[actions_model.ActionRunner](ctx, opts)

tests/integration/api_admin_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,3 +393,51 @@ func TestAPIEditUser_NotAllowedEmailDomain(t *testing.T) {
393393
}).AddTokenAuth(token)
394394
MakeRequest(t, req, http.StatusOK)
395395
}
396+
397+
func TestAPIRunnerAdminApi(t *testing.T) {
398+
defer tests.PrepareTestEnv(t)()
399+
adminUsername := "user1"
400+
token := getUserToken(t, adminUsername, auth_model.AccessTokenScopeWriteAdmin)
401+
req := NewRequest(t, "POST", "/api/v1/admin/actions/runners/registration-token").AddTokenAuth(token)
402+
tokenResp := MakeRequest(t, req, http.StatusOK)
403+
var registrationToken struct {
404+
Token string `json:"token"`
405+
}
406+
DecodeJSON(t, tokenResp, &registrationToken)
407+
assert.NotEmpty(t, registrationToken.Token)
408+
409+
req = NewRequest(t, "GET", "/api/v1/admin/actions/runners").AddTokenAuth(token)
410+
runnerListResp := MakeRequest(t, req, http.StatusOK)
411+
runnerList := api.ActionRunnersResponse{}
412+
DecodeJSON(t, runnerListResp, &runnerList)
413+
414+
assert.Len(t, runnerList.Entries, 1)
415+
assert.Equal(t, "runner_to_be_deleted", runnerList.Entries[0].Name)
416+
assert.Equal(t, int64(34344), runnerList.Entries[0].ID)
417+
assert.Equal(t, false, runnerList.Entries[0].Ephemeral)
418+
assert.Len(t, runnerList.Entries[0].Labels, 2)
419+
assert.Equal(t, "runner_to_be_deleted", runnerList.Entries[0].Labels[0].Name)
420+
assert.Equal(t, "linux", runnerList.Entries[0].Labels[1].Name)
421+
422+
// Verify get the runner by id
423+
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/admin/actions/runners/%d", runnerList.Entries[0].ID)).AddTokenAuth(token)
424+
runnerResp := MakeRequest(t, req, http.StatusOK)
425+
426+
runner := api.ActionRunner{}
427+
DecodeJSON(t, runnerResp, &runner)
428+
429+
assert.Equal(t, "runner_to_be_deleted", runner.Name)
430+
assert.Equal(t, int64(34344), runner.ID)
431+
assert.Equal(t, false, runner.Ephemeral)
432+
assert.Len(t, runner.Labels, 2)
433+
assert.Equal(t, "runner_to_be_deleted", runner.Labels[0].Name)
434+
assert.Equal(t, "linux", runner.Labels[1].Name)
435+
436+
// Verify delete the runner by id
437+
req = NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/admin/actions/runners/%d", runnerList.Entries[0].ID)).AddTokenAuth(token)
438+
MakeRequest(t, req, http.StatusNoContent)
439+
440+
// Verify get the runner has been deleted
441+
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/admin/actions/runners/%d", runnerList.Entries[0].ID)).AddTokenAuth(token)
442+
MakeRequest(t, req, http.StatusNotFound)
443+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Copyright 2024 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package integration
5+
6+
import (
7+
"fmt"
8+
"net/http"
9+
"testing"
10+
11+
auth_model "code.gitea.io/gitea/models/auth"
12+
api "code.gitea.io/gitea/modules/structs"
13+
"code.gitea.io/gitea/tests"
14+
"github.com/stretchr/testify/assert"
15+
)
16+
17+
func TestAPIRunnerUserApi(t *testing.T) {
18+
defer tests.PrepareTestEnv(t)()
19+
userUsername := "user1"
20+
token := getUserToken(t, userUsername, auth_model.AccessTokenScopeWriteUser)
21+
req := NewRequest(t, "POST", "/api/v1/user/actions/runners/registration-token").AddTokenAuth(token)
22+
tokenResp := MakeRequest(t, req, http.StatusOK)
23+
var registrationToken struct {
24+
Token string `json:"token"`
25+
}
26+
DecodeJSON(t, tokenResp, &registrationToken)
27+
assert.NotEmpty(t, registrationToken.Token)
28+
29+
req = NewRequest(t, "GET", "/api/v1/user/actions/runners").AddTokenAuth(token)
30+
runnerListResp := MakeRequest(t, req, http.StatusOK)
31+
runnerList := api.ActionRunnersResponse{}
32+
DecodeJSON(t, runnerListResp, &runnerList)
33+
34+
assert.Len(t, runnerList.Entries, 1)
35+
assert.Equal(t, "runner_to_be_deleted-user", runnerList.Entries[0].Name)
36+
assert.Equal(t, int64(34346), runnerList.Entries[0].ID)
37+
assert.Equal(t, false, runnerList.Entries[0].Ephemeral)
38+
assert.Len(t, runnerList.Entries[0].Labels, 2)
39+
assert.Equal(t, "runner_to_be_deleted", runnerList.Entries[0].Labels[0].Name)
40+
assert.Equal(t, "linux", runnerList.Entries[0].Labels[1].Name)
41+
42+
// Verify get the runner by id
43+
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/actions/runners/%d", runnerList.Entries[0].ID)).AddTokenAuth(token)
44+
runnerResp := MakeRequest(t, req, http.StatusOK)
45+
46+
runner := api.ActionRunner{}
47+
DecodeJSON(t, runnerResp, &runner)
48+
49+
assert.Equal(t, "runner_to_be_deleted-user", runner.Name)
50+
assert.Equal(t, int64(34346), runner.ID)
51+
assert.Equal(t, false, runner.Ephemeral)
52+
assert.Len(t, runner.Labels, 2)
53+
assert.Equal(t, "runner_to_be_deleted", runner.Labels[0].Name)
54+
assert.Equal(t, "linux", runner.Labels[1].Name)
55+
56+
// Verify delete the runner by id
57+
req = NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/user/actions/runners/%d", runnerList.Entries[0].ID)).AddTokenAuth(token)
58+
MakeRequest(t, req, http.StatusNoContent)
59+
60+
// Verify get the runner has been deleted
61+
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/actions/runners/%d", runnerList.Entries[0].ID)).AddTokenAuth(token)
62+
MakeRequest(t, req, http.StatusNotFound)
63+
}

0 commit comments

Comments
 (0)