fix: parse username/workspace correctly on coder state push --build (#10974)

Fixes the same issue as #10884 but for state push
This commit is contained in:
Spike Curtis 2023-12-04 09:58:35 +04:00 committed by GitHub
parent baf3bf6b9c
commit 0536b58b48
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 1 deletions

View File

@ -103,7 +103,11 @@ func (r *RootCmd) statePush() *clibase.Cmd {
if buildNumber == 0 {
build = workspace.LatestBuild
} else {
build, err = client.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(inv.Context(), codersdk.Me, inv.Args[0], strconv.FormatInt((buildNumber), 10))
owner, workspace, err := splitNamedWorkspace(inv.Args[0])
if err != nil {
return err
}
build, err = client.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(inv.Context(), owner, workspace, strconv.FormatInt((buildNumber), 10))
if err != nil {
return err
}

View File

@ -134,4 +134,28 @@ func TestStatePush(t *testing.T) {
err := inv.Run()
require.NoError(t, err)
})
t.Run("OtherUserBuild", func(t *testing.T) {
t.Parallel()
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
owner := coderdtest.CreateFirstUser(t, client)
templateAdmin, taUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, &echo.Responses{
Parse: echo.ParseComplete,
ProvisionApply: echo.ApplyComplete,
})
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
workspace := coderdtest.CreateWorkspace(t, templateAdmin, owner.OrganizationID, template.ID)
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
inv, root := clitest.New(t, "state", "push",
"--build", strconv.Itoa(int(workspace.LatestBuild.BuildNumber)),
taUser.Username+"/"+workspace.Name,
"-")
//nolint: gocritic // this tests owner pushing another user's state
clitest.SetupConfig(t, client, root)
inv.Stdin = strings.NewReader("some magic state")
err := inv.Run()
require.NoError(t, err)
})
}