mirror of
https://github.com/coder/coder.git
synced 2025-07-13 21:36:50 +00:00
fix: Improve coverage by uploading PostgreSQL tests (#532)
This also adds a test for workspace creation via the CLI.
This commit is contained in:
8
.github/workflows/coder.yaml
vendored
8
.github/workflows/coder.yaml
vendored
@ -270,6 +270,14 @@ jobs:
|
|||||||
GIT_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
GIT_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
||||||
run: go run scripts/datadog-cireport/main.go gotests.xml
|
run: go run scripts/datadog-cireport/main.go gotests.xml
|
||||||
|
|
||||||
|
- uses: codecov/codecov-action@v2
|
||||||
|
if: github.actor != 'dependabot[bot]'
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
files: ./gotests.coverage
|
||||||
|
flags: unittest-go-${{ matrix.os }}
|
||||||
|
fail_ci_if_error: true
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
name: "deploy"
|
name: "deploy"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
44
cli/workspacecreate_test.go
Normal file
44
cli/workspacecreate_test.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package cli_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/coder/coder/cli/clitest"
|
||||||
|
"github.com/coder/coder/coderd/coderdtest"
|
||||||
|
"github.com/coder/coder/pty/ptytest"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestWorkspaceCreate(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
t.Run("Create", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
client := coderdtest.New(t, nil)
|
||||||
|
user := coderdtest.CreateFirstUser(t, client)
|
||||||
|
coderdtest.NewProvisionerDaemon(t, client)
|
||||||
|
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, nil)
|
||||||
|
coderdtest.AwaitProjectVersionJob(t, client, version.ID)
|
||||||
|
project := coderdtest.CreateProject(t, client, user.OrganizationID, version.ID)
|
||||||
|
cmd, root := clitest.New(t, "workspaces", "create", "my-workspace", "--project", project.Name)
|
||||||
|
clitest.SetupConfig(t, client, root)
|
||||||
|
doneChan := make(chan struct{})
|
||||||
|
pty := ptytest.New(t)
|
||||||
|
cmd.SetIn(pty.Input())
|
||||||
|
cmd.SetOut(pty.Output())
|
||||||
|
go func() {
|
||||||
|
defer close(doneChan)
|
||||||
|
err := cmd.Execute()
|
||||||
|
require.NoError(t, err)
|
||||||
|
}()
|
||||||
|
matches := []string{
|
||||||
|
"Create workspace", "yes",
|
||||||
|
}
|
||||||
|
for i := 0; i < len(matches); i += 2 {
|
||||||
|
match := matches[i]
|
||||||
|
value := matches[i+1]
|
||||||
|
pty.ExpectMatch(match)
|
||||||
|
pty.WriteLine(value)
|
||||||
|
}
|
||||||
|
<-doneChan
|
||||||
|
})
|
||||||
|
}
|
@ -29,6 +29,7 @@ ignore:
|
|||||||
- database/databasefake
|
- database/databasefake
|
||||||
# These are generated or don't require tests.
|
# These are generated or don't require tests.
|
||||||
- cmd
|
- cmd
|
||||||
|
- coderd/tunnel
|
||||||
- database/dump
|
- database/dump
|
||||||
- database/postgres
|
- database/postgres
|
||||||
- peerbroker/proto
|
- peerbroker/proto
|
||||||
|
@ -28,6 +28,47 @@ func TestProjectVersion(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPatchCancelProjectVersion(t *testing.T) {
|
func TestPatchCancelProjectVersion(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
t.Run("AlreadyCompleted", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
client := coderdtest.New(t, nil)
|
||||||
|
user := coderdtest.CreateFirstUser(t, client)
|
||||||
|
coderdtest.NewProvisionerDaemon(t, client)
|
||||||
|
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, nil)
|
||||||
|
coderdtest.AwaitProjectVersionJob(t, client, version.ID)
|
||||||
|
err := client.CancelProjectVersion(context.Background(), version.ID)
|
||||||
|
var apiErr *codersdk.Error
|
||||||
|
require.ErrorAs(t, err, &apiErr)
|
||||||
|
require.Equal(t, http.StatusPreconditionFailed, apiErr.StatusCode())
|
||||||
|
})
|
||||||
|
t.Run("AlreadyCanceled", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
client := coderdtest.New(t, nil)
|
||||||
|
user := coderdtest.CreateFirstUser(t, client)
|
||||||
|
coderdtest.NewProvisionerDaemon(t, client)
|
||||||
|
version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, &echo.Responses{
|
||||||
|
Parse: echo.ParseComplete,
|
||||||
|
Provision: []*proto.Provision_Response{{
|
||||||
|
Type: &proto.Provision_Response_Log{
|
||||||
|
Log: &proto.Log{},
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
})
|
||||||
|
require.Eventually(t, func() bool {
|
||||||
|
var err error
|
||||||
|
version, err = client.ProjectVersion(context.Background(), version.ID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
t.Logf("Status: %s", version.Job.Status)
|
||||||
|
return version.Job.Status == codersdk.ProvisionerJobRunning
|
||||||
|
}, 5*time.Second, 25*time.Millisecond)
|
||||||
|
err := client.CancelProjectVersion(context.Background(), version.ID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
err = client.CancelProjectVersion(context.Background(), version.ID)
|
||||||
|
var apiErr *codersdk.Error
|
||||||
|
require.ErrorAs(t, err, &apiErr)
|
||||||
|
require.Equal(t, http.StatusPreconditionFailed, apiErr.StatusCode())
|
||||||
|
})
|
||||||
|
t.Run("Success", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
client := coderdtest.New(t, nil)
|
client := coderdtest.New(t, nil)
|
||||||
user := coderdtest.CreateFirstUser(t, client)
|
user := coderdtest.CreateFirstUser(t, client)
|
||||||
@ -57,6 +98,7 @@ func TestPatchCancelProjectVersion(t *testing.T) {
|
|||||||
// so the job cancel will time out and fail.
|
// so the job cancel will time out and fail.
|
||||||
return version.Job.Status == codersdk.ProvisionerJobFailed
|
return version.Job.Status == codersdk.ProvisionerJobFailed
|
||||||
}, 5*time.Second, 25*time.Millisecond)
|
}, 5*time.Second, 25*time.Millisecond)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestProjectVersionSchema(t *testing.T) {
|
func TestProjectVersionSchema(t *testing.T) {
|
||||||
|
Reference in New Issue
Block a user