github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/test/integration/secrets_int_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"encoding/json"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/ActiveState/cli/internal/testhelpers/suite"
     9  
    10  	"github.com/ActiveState/cli/internal/runners/secrets"
    11  	"github.com/ActiveState/cli/internal/testhelpers/e2e"
    12  	"github.com/ActiveState/cli/internal/testhelpers/tagsuite"
    13  )
    14  
    15  type SecretsIntegrationTestSuite struct {
    16  	tagsuite.Suite
    17  }
    18  
    19  func (suite *SecretsIntegrationTestSuite) TestSecrets_JSON() {
    20  	suite.OnlyRunForTags(tagsuite.Secrets, tagsuite.JSON)
    21  	ts := e2e.New(suite.T(), false)
    22  	defer ts.Close()
    23  
    24  	ts.PrepareProject("cli-integration-tests/Python3", "00000000-0000-0000-0000-000000000000")
    25  
    26  	secret := secrets.SecretExport{
    27  		Name:        "test-secret",
    28  		Scope:       "project",
    29  		Description: "",
    30  		HasValue:    true,
    31  		Value:       "test-value",
    32  	}
    33  
    34  	expected, err := json.Marshal(secret)
    35  	suite.Require().NoError(err)
    36  
    37  	ts.LoginAsPersistentUser()
    38  	cp := ts.Spawn("secrets", "set", "project.test-secret", "test-value")
    39  	cp.Expect("Operating on project")
    40  	cp.Expect("cli-integration-tests/Python3")
    41  	cp.ExpectExitCode(0)
    42  
    43  	cp = ts.Spawn("secrets", "get", "project.test-secret", "--output", "json")
    44  	cp.ExpectExitCode(0)
    45  	suite.Equal(string(expected), cp.StrippedSnapshot())
    46  
    47  	cp = ts.Spawn("secrets", "sync")
    48  	cp.Expect("Operating on project")
    49  	cp.Expect("cli-integration-tests/Python3")
    50  	cp.Expect("Successfully synchronized")
    51  	cp.ExpectExitCode(0)
    52  
    53  	cp = ts.Spawn("secrets")
    54  	cp.Expect("Operating on project")
    55  	cp.Expect("cli-integration-tests/Python3")
    56  	cp.Expect("Name")
    57  	cp.Expect("project")
    58  	cp.Expect("Description")
    59  	cp.Expect("Defined")
    60  	cp.Expect("test-secret")
    61  	cp.ExpectExitCode(0)
    62  }
    63  
    64  func (suite *SecretsIntegrationTestSuite) TestSecret_Expand() {
    65  	suite.OnlyRunForTags(tagsuite.Secrets, tagsuite.JSON)
    66  	ts := e2e.New(suite.T(), false)
    67  	defer ts.Close()
    68  
    69  	ts.LoginAsPersistentUser()
    70  	defer clearSecrets(ts, "project.test-secret", "user.test-secret")
    71  
    72  	asyData := strings.TrimSpace(`
    73  project: https://platform.activestate.com/ActiveState-CLI/secrets-test
    74  scripts:
    75    - name: project-secret
    76      language: bash
    77      standalone: true
    78      value: echo $secrets.project.project-secret
    79    - name: user-secret
    80      language: bash
    81      standalone: true
    82      value: echo $secrets.user.user-secret
    83  `)
    84  
    85  	ts.PrepareActiveStateYAML(asyData)
    86  	ts.PrepareCommitIdFile("c7f8f45d-39e2-4f22-bd2e-4182b914880f")
    87  
    88  	cp := ts.Spawn("secrets", "set", "project.project-secret", "project-value")
    89  	cp.Expect("Operating on project")
    90  	cp.Expect("ActiveState-CLI/secrets-test")
    91  	cp.ExpectExitCode(0)
    92  
    93  	cp = ts.Spawn("secrets", "set", "user.user-secret", "user-value")
    94  	cp.Expect("Operating on project")
    95  	cp.Expect("ActiveState-CLI/secrets-test")
    96  	cp.ExpectExitCode(0)
    97  
    98  	cp = ts.Spawn("run", "project-secret")
    99  	cp.Expect("project-value")
   100  	cp.ExpectExitCode(0)
   101  
   102  	cp = ts.Spawn("run", "user-secret")
   103  	cp.Expect("user-value")
   104  	cp.ExpectExitCode(0)
   105  }
   106  
   107  func clearSecrets(ts *e2e.Session, unset ...string) {
   108  	for _, secret := range unset {
   109  		cp := ts.Spawn("secrets", "set", secret, "")
   110  		cp.ExpectExitCode(0)
   111  	}
   112  }
   113  
   114  func TestSecretsIntegrationTestSuite(t *testing.T) {
   115  	suite.Run(t, new(SecretsIntegrationTestSuite))
   116  }