Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7fd59db

Browse files
refactor: tests
Refactor the One Big Test into multiple separate unit tests
1 parent1fe6fe3 commit7fd59db

File tree

1 file changed

+136
-81
lines changed

1 file changed

+136
-81
lines changed

‎coderd/agentapi/devcontainer_agent_test.go

Lines changed: 136 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package agentapi_test
33
import (
44
"cmp"
55
"context"
6+
"database/sql"
67
"slices"
78
"sync/atomic"
89
"testing"
@@ -23,7 +24,7 @@ import (
2324
"github.com/coder/quartz"
2425
)
2526

26-
funcdevContainerAgentAPI(t*testing.T,log slog.Logger)*agentapi.DevContainerAgentAPI {
27+
funcdevContainerAgentAPI(t*testing.T,log slog.Logger)(*agentapi.DevContainerAgentAPI, database.WorkspaceResource) {
2728
db,_:=dbtestutil.NewDB(t)
2829

2930
user:=dbgen.User(t,db, database.User{})
@@ -72,99 +73,153 @@ func devContainerAgentAPI(t *testing.T, log slog.Logger) *agentapi.DevContainerA
7273
},
7374
Clock:clock,
7475
Database:dbauthz.New(db,auth,log,accessControlStore),
75-
}
76+
},resource
7677
}
7778

7879
funcTestDevContainerAgentAPI(t*testing.T) {
7980
t.Parallel()
8081

81-
log:=testutil.Logger(t)
82-
ctx:=testutil.Context(t,testutil.WaitShort)
83-
api:=devContainerAgentAPI(t,log)
84-
85-
// Given: There are no dev container agents.
86-
listResp,err:=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{})
87-
require.NoError(t,err)
88-
require.Len(t,listResp.Agents,0)
89-
90-
// When: We create two dev container agents.
91-
createResp,err:=api.CreateDevContainerAgent(ctx,&proto.CreateDevContainerAgentRequest{
92-
Name:"some-child-agent",
93-
Directory:"/workspaces/wibble",
94-
Architecture:"amd64",
95-
OperatingSystem:"linux",
96-
})
97-
require.NoError(t,err)
82+
t.Run("CanCreateDevContainerAgent",func(t*testing.T) {
83+
t.Parallel()
9884

99-
childAgentOneID,err:=uuid.FromBytes(createResp.Id)
100-
require.NoError(t,err)
85+
log:=testutil.Logger(t)
86+
ctx:=testutil.Context(t,testutil.WaitShort)
87+
api,_:=devContainerAgentAPI(t,log)
10188

102-
createResp,err=api.CreateDevContainerAgent(ctx,&proto.CreateDevContainerAgentRequest{
103-
Name:"some-other-child-agent",
104-
Directory:"/workspaces/wobble",
105-
Architecture:"amd64",
106-
OperatingSystem:"linux",
107-
})
108-
require.NoError(t,err)
109-
110-
childAgentTwoID,err:=uuid.FromBytes(createResp.Id)
111-
require.NoError(t,err)
112-
113-
// Then: We expect these dev container agents to be created.
114-
agentOne,err:=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),childAgentOneID)//nolint:gocritic // this is a test
115-
require.NoError(t,err)
116-
require.Equal(t,"/workspaces/wibble",agentOne.Directory)
117-
require.Equal(t,"amd64",agentOne.Architecture)
118-
require.Equal(t,"linux",agentOne.OperatingSystem)
119-
require.Equal(t,"some-child-agent",agentOne.Name)
120-
121-
agentTwo,err:=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),childAgentTwoID)//nolint:gocritic // this is a test
122-
require.NoError(t,err)
123-
require.Equal(t,"/workspaces/wobble",agentTwo.Directory)
124-
require.Equal(t,"amd64",agentTwo.Architecture)
125-
require.Equal(t,"linux",agentTwo.OperatingSystem)
126-
require.Equal(t,"some-other-child-agent",agentTwo.Name)
127-
128-
// Then: We expect to be able to list these dev container agents.
129-
createdAgents:= []database.WorkspaceAgent{agentOne,agentTwo}
130-
slices.SortFunc(createdAgents,func(a,b database.WorkspaceAgent)int {
131-
returncmp.Compare(a.ID.String(),b.ID.String())
132-
})
89+
createResp,err:=api.CreateDevContainerAgent(ctx,&proto.CreateDevContainerAgentRequest{
90+
Name:"some-child-agent",
91+
Directory:"/workspaces/wibble",
92+
Architecture:"amd64",
93+
OperatingSystem:"linux",
94+
})
95+
require.NoError(t,err)
13396

134-
listResp,err=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{})
135-
require.NoError(t,err)
136-
require.Len(t,listResp.Agents,len(createdAgents))
97+
agentID,err:=uuid.FromBytes(createResp.Id)
98+
require.NoError(t,err)
13799

138-
listedAgents:=listResp.Agents
139-
slices.SortFunc(listedAgents,func(a,b*proto.ListDevContainerAgentsResponse_DevContainerAgent)int {
140-
returncmp.Compare(string(a.Id),string(b.Id))
141-
})
100+
//nolint:gocritic // this is a test.
101+
agent,err:=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),agentID)
102+
require.NoError(t,err)
142103

143-
fori,agent:=rangelistedAgents {
144-
require.Equal(t,createdAgents[i].ID[:],agent.Id)
145-
require.Equal(t,createdAgents[i].Name,agent.Name)
146-
}
147-
148-
// When: We delete a dev container agent.
149-
_,err=api.DeleteDevContainerAgent(ctx,&proto.DeleteDevContainerAgentRequest{
150-
Id:agentOne.ID[:],
104+
require.Equal(t,"some-child-agent",agent.Name)
105+
require.Equal(t,"/workspaces/wibble",agent.Directory)
106+
require.Equal(t,"amd64",agent.Architecture)
107+
require.Equal(t,"linux",agent.OperatingSystem)
151108
})
152-
require.NoError(t,err)
153109

154-
// Then: We expect this dev container agent to be deleted.
155-
listResp,err=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{})
156-
require.NoError(t,err)
157-
require.Len(t,listResp.Agents,1)
158-
require.Equal(t,agentTwo.ID[:],listResp.Agents[0].Id)
110+
t.Run("CanDeleteDevContainerAgent",func(t*testing.T) {
111+
t.Parallel()
112+
113+
log:=testutil.Logger(t)
114+
ctx:=testutil.Context(t,testutil.WaitShort)
115+
api,res:=devContainerAgentAPI(t,log)
116+
117+
// Given: A dev container agent.
118+
agent:=dbgen.WorkspaceAgent(t,api.Database, database.WorkspaceAgent{
119+
ParentID: uuid.NullUUID{Valid:true,UUID:api.AgentID},
120+
ResourceID:res.ID,
121+
Name:"some-child-agent",
122+
Directory:"/workspaces/wibble",
123+
Architecture:"amd64",
124+
OperatingSystem:"linux",
125+
})
126+
127+
// When: We delete the dev container agent.
128+
_,err:=api.DeleteDevContainerAgent(ctx,&proto.DeleteDevContainerAgentRequest{
129+
Id:agent.ID[:],
130+
})
131+
require.NoError(t,err)
132+
133+
// Then: It is deleted.
134+
_,err=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),agent.ID)
135+
require.ErrorIs(t,err,sql.ErrNoRows)
136+
})
159137

160-
// When: We delete the other dev container agent.
161-
_,err=api.DeleteDevContainerAgent(ctx,&proto.DeleteDevContainerAgentRequest{
162-
Id:agentTwo.ID[:],
138+
t.Run("CanDeleteOneDevContainerAgentOfMany",func(t*testing.T) {
139+
t.Parallel()
140+
141+
log:=testutil.Logger(t)
142+
ctx:=testutil.Context(t,testutil.WaitShort)
143+
api,res:=devContainerAgentAPI(t,log)
144+
145+
// Given: Multiple dev container agents.
146+
agentOne:=dbgen.WorkspaceAgent(t,api.Database, database.WorkspaceAgent{
147+
ParentID: uuid.NullUUID{Valid:true,UUID:api.AgentID},
148+
ResourceID:res.ID,
149+
Name:"child-agent-one",
150+
Directory:"/workspaces/wibble",
151+
Architecture:"amd64",
152+
OperatingSystem:"linux",
153+
})
154+
155+
agentTwo:=dbgen.WorkspaceAgent(t,api.Database, database.WorkspaceAgent{
156+
ParentID: uuid.NullUUID{Valid:true,UUID:api.AgentID},
157+
ResourceID:res.ID,
158+
Name:"child-agent-two",
159+
Directory:"/workspaces/wobble",
160+
Architecture:"amd64",
161+
OperatingSystem:"linux",
162+
})
163+
164+
// When: We delete one of the dev container agents.
165+
_,err:=api.DeleteDevContainerAgent(ctx,&proto.DeleteDevContainerAgentRequest{
166+
Id:agentOne.ID[:],
167+
})
168+
require.NoError(t,err)
169+
170+
// Then: The correct one is deleted.
171+
_,err=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),agentOne.ID)
172+
require.ErrorIs(t,err,sql.ErrNoRows)
173+
174+
_,err=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),agentTwo.ID)
175+
require.NoError(t,err)
163176
})
164-
require.NoError(t,err)
165177

166-
// Then: We expect this other dev container agent to be deleted.
167-
listResp,err=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{})
168-
require.NoError(t,err)
169-
require.Len(t,listResp.Agents,0)
178+
t.Run("CanListDevContainerAgents",func(t*testing.T) {
179+
t.Parallel()
180+
181+
log:=testutil.Logger(t)
182+
ctx:=testutil.Context(t,testutil.WaitShort)
183+
api,res:=devContainerAgentAPI(t,log)
184+
185+
// Given: Multiple dev container agents.
186+
agentOne:=dbgen.WorkspaceAgent(t,api.Database, database.WorkspaceAgent{
187+
ParentID: uuid.NullUUID{Valid:true,UUID:api.AgentID},
188+
ResourceID:res.ID,
189+
Name:"child-agent-one",
190+
Directory:"/workspaces/wibble",
191+
Architecture:"amd64",
192+
OperatingSystem:"linux",
193+
})
194+
195+
agentTwo:=dbgen.WorkspaceAgent(t,api.Database, database.WorkspaceAgent{
196+
ParentID: uuid.NullUUID{Valid:true,UUID:api.AgentID},
197+
ResourceID:res.ID,
198+
Name:"child-agent-two",
199+
Directory:"/workspaces/wobble",
200+
Architecture:"amd64",
201+
OperatingSystem:"linux",
202+
})
203+
204+
agents:= []database.WorkspaceAgent{agentOne,agentTwo}
205+
slices.SortFunc(agents,func(a,b database.WorkspaceAgent)int {
206+
returncmp.Compare(a.ID.String(),b.ID.String())
207+
})
208+
209+
// When: We list the dev container agents.
210+
listResp,err:=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{})
211+
require.NoError(t,err)
212+
213+
listedAgents:=listResp.Agents
214+
slices.SortFunc(listedAgents,func(a,b*proto.ListDevContainerAgentsResponse_DevContainerAgent)int {
215+
returncmp.Compare(string(a.Id),string(b.Id))
216+
})
217+
218+
// Then: We expect to see all the agents listed.
219+
require.Len(t,listedAgents,len(agents))
220+
fori,agent:=rangelistedAgents {
221+
require.Equal(t,agents[i].ID[:],agent.Id)
222+
require.Equal(t,agents[i].Name,agent.Name)
223+
}
224+
})
170225
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp