Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d665263

Browse files
authored
fix: Improve coverage by uploading PostgreSQL tests (#532)
This also adds a test for workspace creation via the CLI.
1 parent 6573b65 commit d665263

File tree

4 files changed

+120
-25
lines changed

4 files changed

+120
-25
lines changed

.github/workflows/coder.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,14 @@ jobs:
270270
GIT_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
271271
run: go run scripts/datadog-cireport/main.go gotests.xml
272272

273+
- uses: codecov/codecov-action@v2
274+
if: github.actor != 'dependabot[bot]'
275+
with:
276+
token: ${{ secrets.CODECOV_TOKEN }}
277+
files: ./gotests.coverage
278+
flags: unittest-go-${{ matrix.os }}
279+
fail_ci_if_error: true
280+
273281
deploy:
274282
name: "deploy"
275283
runs-on: ubuntu-latest

cli/workspacecreate_test.go

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package cli_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/coder/coder/cli/clitest"
7+
"github.com/coder/coder/coderd/coderdtest"
8+
"github.com/coder/coder/pty/ptytest"
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func TestWorkspaceCreate(t *testing.T) {
13+
t.Parallel()
14+
t.Run("Create", func(t *testing.T) {
15+
t.Parallel()
16+
client := coderdtest.New(t, nil)
17+
user := coderdtest.CreateFirstUser(t, client)
18+
coderdtest.NewProvisionerDaemon(t, client)
19+
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, nil)
20+
coderdtest.AwaitProjectVersionJob(t, client, version.ID)
21+
project := coderdtest.CreateProject(t, client, user.OrganizationID, version.ID)
22+
cmd, root := clitest.New(t, "workspaces", "create", "my-workspace", "--project", project.Name)
23+
clitest.SetupConfig(t, client, root)
24+
doneChan := make(chan struct{})
25+
pty := ptytest.New(t)
26+
cmd.SetIn(pty.Input())
27+
cmd.SetOut(pty.Output())
28+
go func() {
29+
defer close(doneChan)
30+
err := cmd.Execute()
31+
require.NoError(t, err)
32+
}()
33+
matches := []string{
34+
"Create workspace", "yes",
35+
}
36+
for i := 0; i < len(matches); i += 2 {
37+
match := matches[i]
38+
value := matches[i+1]
39+
pty.ExpectMatch(match)
40+
pty.WriteLine(value)
41+
}
42+
<-doneChan
43+
})
44+
}

codecov.yml

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ ignore:
2929
- database/databasefake
3030
# These are generated or don't require tests.
3131
- cmd
32+
- coderd/tunnel
3233
- database/dump
3334
- database/postgres
3435
- peerbroker/proto

coderd/projectversions_test.go

+67-25
Original file line numberDiff line numberDiff line change
@@ -29,34 +29,76 @@ func TestProjectVersion(t *testing.T) {
2929

3030
func TestPatchCancelProjectVersion(t *testing.T) {
3131
t.Parallel()
32-
client := coderdtest.New(t, nil)
33-
user := coderdtest.CreateFirstUser(t, client)
34-
coderdtest.NewProvisionerDaemon(t, client)
35-
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, &echo.Responses{
36-
Parse: echo.ParseComplete,
37-
Provision: []*proto.Provision_Response{{
38-
Type: &proto.Provision_Response_Log{
39-
Log: &proto.Log{},
40-
},
41-
}},
32+
t.Run("AlreadyCompleted", func(t *testing.T) {
33+
t.Parallel()
34+
client := coderdtest.New(t, nil)
35+
user := coderdtest.CreateFirstUser(t, client)
36+
coderdtest.NewProvisionerDaemon(t, client)
37+
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, nil)
38+
coderdtest.AwaitProjectVersionJob(t, client, version.ID)
39+
err := client.CancelProjectVersion(context.Background(), version.ID)
40+
var apiErr *codersdk.Error
41+
require.ErrorAs(t, err, &apiErr)
42+
require.Equal(t, http.StatusPreconditionFailed, apiErr.StatusCode())
4243
})
43-
require.Eventually(t, func() bool {
44-
var err error
45-
version, err = client.ProjectVersion(context.Background(), version.ID)
44+
t.Run("AlreadyCanceled", func(t *testing.T) {
45+
t.Parallel()
46+
client := coderdtest.New(t, nil)
47+
user := coderdtest.CreateFirstUser(t, client)
48+
coderdtest.NewProvisionerDaemon(t, client)
49+
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, &echo.Responses{
50+
Parse: echo.ParseComplete,
51+
Provision: []*proto.Provision_Response{{
52+
Type: &proto.Provision_Response_Log{
53+
Log: &proto.Log{},
54+
},
55+
}},
56+
})
57+
require.Eventually(t, func() bool {
58+
var err error
59+
version, err = client.ProjectVersion(context.Background(), version.ID)
60+
require.NoError(t, err)
61+
t.Logf("Status: %s", version.Job.Status)
62+
return version.Job.Status == codersdk.ProvisionerJobRunning
63+
}, 5*time.Second, 25*time.Millisecond)
64+
err := client.CancelProjectVersion(context.Background(), version.ID)
4665
require.NoError(t, err)
47-
t.Logf("Status: %s", version.Job.Status)
48-
return version.Job.Status == codersdk.ProvisionerJobRunning
49-
}, 5*time.Second, 25*time.Millisecond)
50-
err := client.CancelProjectVersion(context.Background(), version.ID)
51-
require.NoError(t, err)
52-
require.Eventually(t, func() bool {
53-
var err error
54-
version, err = client.ProjectVersion(context.Background(), version.ID)
66+
err = client.CancelProjectVersion(context.Background(), version.ID)
67+
var apiErr *codersdk.Error
68+
require.ErrorAs(t, err, &apiErr)
69+
require.Equal(t, http.StatusPreconditionFailed, apiErr.StatusCode())
70+
})
71+
t.Run("Success", func(t *testing.T) {
72+
t.Parallel()
73+
client := coderdtest.New(t, nil)
74+
user := coderdtest.CreateFirstUser(t, client)
75+
coderdtest.NewProvisionerDaemon(t, client)
76+
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, &echo.Responses{
77+
Parse: echo.ParseComplete,
78+
Provision: []*proto.Provision_Response{{
79+
Type: &proto.Provision_Response_Log{
80+
Log: &proto.Log{},
81+
},
82+
}},
83+
})
84+
require.Eventually(t, func() bool {
85+
var err error
86+
version, err = client.ProjectVersion(context.Background(), version.ID)
87+
require.NoError(t, err)
88+
t.Logf("Status: %s", version.Job.Status)
89+
return version.Job.Status == codersdk.ProvisionerJobRunning
90+
}, 5*time.Second, 25*time.Millisecond)
91+
err := client.CancelProjectVersion(context.Background(), version.ID)
5592
require.NoError(t, err)
56-
// The echo provisioner doesn't respond to a shutdown request,
57-
// so the job cancel will time out and fail.
58-
return version.Job.Status == codersdk.ProvisionerJobFailed
59-
}, 5*time.Second, 25*time.Millisecond)
93+
require.Eventually(t, func() bool {
94+
var err error
95+
version, err = client.ProjectVersion(context.Background(), version.ID)
96+
require.NoError(t, err)
97+
// The echo provisioner doesn't respond to a shutdown request,
98+
// so the job cancel will time out and fail.
99+
return version.Job.Status == codersdk.ProvisionerJobFailed
100+
}, 5*time.Second, 25*time.Millisecond)
101+
})
60102
}
61103

62104
func TestProjectVersionSchema(t *testing.T) {

0 commit comments

Comments
 (0)