mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add --version flag to coder templates pull, default to active version (#10153)
Fixes https://github.com/coder/coder/issues/9837
This commit is contained in:
+126
-4
@@ -7,6 +7,7 @@ import (
|
||||
"encoding/hex"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/codeclysm/extract/v3"
|
||||
@@ -49,7 +50,7 @@ func TestTemplatePull_NoName(t *testing.T) {
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
// Stdout tests that 'templates pull' pulls down the latest template
|
||||
// Stdout tests that 'templates pull' pulls down the active template
|
||||
// and writes it to stdout.
|
||||
func TestTemplatePull_Stdout(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -78,6 +79,7 @@ func TestTemplatePull_Stdout(t *testing.T) {
|
||||
// are being sorted correctly.
|
||||
updatedVersion := coderdtest.UpdateTemplateVersion(t, client, owner.OrganizationID, source2, template.ID)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, updatedVersion.ID)
|
||||
coderdtest.UpdateActiveTemplateVersion(t, client, template.ID, updatedVersion.ID)
|
||||
|
||||
inv, root := clitest.New(t, "templates", "pull", "--tar", template.Name)
|
||||
clitest.SetupConfig(t, templateAdmin, root)
|
||||
@@ -91,7 +93,123 @@ func TestTemplatePull_Stdout(t *testing.T) {
|
||||
require.True(t, bytes.Equal(expected, buf.Bytes()), "tar files differ")
|
||||
}
|
||||
|
||||
// ToDir tests that 'templates pull' pulls down the latest template
|
||||
// Stdout tests that 'templates pull' pulls down the non-latest active template
|
||||
// and writes it to stdout.
|
||||
func TestTemplatePull_ActiveOldStdout(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
client := coderdtest.New(t, &coderdtest.Options{
|
||||
IncludeProvisionerDaemon: true,
|
||||
})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
|
||||
source1 := genTemplateVersionSource()
|
||||
source2 := genTemplateVersionSource()
|
||||
|
||||
expected, err := echo.Tar(source1)
|
||||
require.NoError(t, err)
|
||||
|
||||
version1 := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, source1)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version1.ID)
|
||||
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version1.ID)
|
||||
|
||||
updatedVersion := coderdtest.UpdateTemplateVersion(t, client, user.OrganizationID, source2, template.ID)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, updatedVersion.ID)
|
||||
|
||||
inv, root := clitest.New(t, "templates", "pull", "--tar", template.Name)
|
||||
clitest.SetupConfig(t, client, root)
|
||||
|
||||
var buf bytes.Buffer
|
||||
inv.Stdout = &buf
|
||||
var stderr strings.Builder
|
||||
inv.Stderr = &stderr
|
||||
|
||||
err = inv.Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.True(t, bytes.Equal(expected, buf.Bytes()), "tar files differ")
|
||||
require.Contains(t, stderr.String(), "A newer template version than the active version exists.")
|
||||
}
|
||||
|
||||
// Stdout tests that 'templates pull' pulls down the specified template and
|
||||
// writes it to stdout.
|
||||
func TestTemplatePull_SpecifiedStdout(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
client := coderdtest.New(t, &coderdtest.Options{
|
||||
IncludeProvisionerDaemon: true,
|
||||
})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
|
||||
source1 := genTemplateVersionSource()
|
||||
source2 := genTemplateVersionSource()
|
||||
source3 := genTemplateVersionSource()
|
||||
|
||||
expected, err := echo.Tar(source1)
|
||||
require.NoError(t, err)
|
||||
|
||||
version1 := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, source1)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version1.ID)
|
||||
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version1.ID)
|
||||
|
||||
updatedVersion := coderdtest.UpdateTemplateVersion(t, client, user.OrganizationID, source2, template.ID)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, updatedVersion.ID)
|
||||
|
||||
updatedVersion2 := coderdtest.UpdateTemplateVersion(t, client, user.OrganizationID, source3, template.ID)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, updatedVersion2.ID)
|
||||
coderdtest.UpdateActiveTemplateVersion(t, client, template.ID, updatedVersion2.ID)
|
||||
|
||||
inv, root := clitest.New(t, "templates", "pull", "--tar", template.Name, "--version", version1.Name)
|
||||
clitest.SetupConfig(t, client, root)
|
||||
|
||||
var buf bytes.Buffer
|
||||
inv.Stdout = &buf
|
||||
|
||||
err = inv.Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.True(t, bytes.Equal(expected, buf.Bytes()), "tar files differ")
|
||||
}
|
||||
|
||||
// Stdout tests that 'templates pull' pulls down the latest template
|
||||
// and writes it to stdout.
|
||||
func TestTemplatePull_LatestStdout(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
client := coderdtest.New(t, &coderdtest.Options{
|
||||
IncludeProvisionerDaemon: true,
|
||||
})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
|
||||
source1 := genTemplateVersionSource()
|
||||
source2 := genTemplateVersionSource()
|
||||
|
||||
expected, err := echo.Tar(source1)
|
||||
require.NoError(t, err)
|
||||
|
||||
version1 := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, source1)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version1.ID)
|
||||
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version1.ID)
|
||||
|
||||
updatedVersion := coderdtest.UpdateTemplateVersion(t, client, user.OrganizationID, source2, template.ID)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, updatedVersion.ID)
|
||||
|
||||
inv, root := clitest.New(t, "templates", "pull", "--tar", template.Name, "latest")
|
||||
clitest.SetupConfig(t, client, root)
|
||||
|
||||
var buf bytes.Buffer
|
||||
inv.Stdout = &buf
|
||||
|
||||
err = inv.Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.True(t, bytes.Equal(expected, buf.Bytes()), "tar files differ")
|
||||
}
|
||||
|
||||
// ToDir tests that 'templates pull' pulls down the active template
|
||||
// and writes it to the correct directory.
|
||||
func TestTemplatePull_ToDir(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -120,6 +238,7 @@ func TestTemplatePull_ToDir(t *testing.T) {
|
||||
// are being sorted correctly.
|
||||
updatedVersion := coderdtest.UpdateTemplateVersion(t, client, owner.OrganizationID, source2, template.ID)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, updatedVersion.ID)
|
||||
coderdtest.UpdateActiveTemplateVersion(t, client, template.ID, updatedVersion.ID)
|
||||
|
||||
dir := t.TempDir()
|
||||
|
||||
@@ -143,8 +262,9 @@ func TestTemplatePull_ToDir(t *testing.T) {
|
||||
)
|
||||
}
|
||||
|
||||
// ToDir tests that 'templates pull' pulls down the latest template
|
||||
// and writes it to a directory with the name of the template if the path is not implicitly supplied.
|
||||
// ToDir tests that 'templates pull' pulls down the active template and writes
|
||||
// it to a directory with the name of the template if the path is not implicitly
|
||||
// supplied.
|
||||
// nolint: paralleltest
|
||||
func TestTemplatePull_ToImplicit(t *testing.T) {
|
||||
client := coderdtest.New(t, &coderdtest.Options{
|
||||
@@ -171,6 +291,7 @@ func TestTemplatePull_ToImplicit(t *testing.T) {
|
||||
// are being sorted correctly.
|
||||
updatedVersion := coderdtest.UpdateTemplateVersion(t, client, owner.OrganizationID, source2, template.ID)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, updatedVersion.ID)
|
||||
coderdtest.UpdateActiveTemplateVersion(t, client, template.ID, updatedVersion.ID)
|
||||
|
||||
// create a tempdir and change the working directory to it for the duration of the test (cannot run in parallel)
|
||||
dir := t.TempDir()
|
||||
@@ -233,6 +354,7 @@ func TestTemplatePull_FolderConflict(t *testing.T) {
|
||||
// are being sorted correctly.
|
||||
updatedVersion := coderdtest.UpdateTemplateVersion(t, client, owner.OrganizationID, source2, template.ID)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, updatedVersion.ID)
|
||||
coderdtest.UpdateActiveTemplateVersion(t, client, template.ID, updatedVersion.ID)
|
||||
|
||||
dir := t.TempDir()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user