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

     1  package integration
     2  
     3  import (
     4  	"bytes"
     5  	"path/filepath"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/ActiveState/cli/internal/constants"
    10  	"github.com/ActiveState/cli/internal/fileutils"
    11  	"github.com/ActiveState/cli/internal/testhelpers/e2e"
    12  	"github.com/ActiveState/cli/internal/testhelpers/suite"
    13  	"github.com/ActiveState/cli/internal/testhelpers/tagsuite"
    14  	"github.com/ActiveState/cli/pkg/platform/runtime/buildscript"
    15  	"github.com/ActiveState/cli/pkg/project"
    16  )
    17  
    18  type CommitIntegrationTestSuite struct {
    19  	tagsuite.Suite
    20  }
    21  
    22  func (suite *CommitIntegrationTestSuite) TestCommitManualBuildScriptMod() {
    23  	suite.OnlyRunForTags(tagsuite.Commit, tagsuite.BuildScripts)
    24  	ts := e2e.New(suite.T(), false)
    25  	defer ts.Close()
    26  
    27  	cp := ts.Spawn("config", "set", constants.OptinBuildscriptsConfig, "true")
    28  	cp.ExpectExitCode(0)
    29  
    30  	cp = ts.SpawnWithOpts(
    31  		e2e.OptArgs(
    32  			"checkout",
    33  			"ActiveState-CLI/Commit-Test-A#7a1b416e-c17f-4d4a-9e27-cbad9e8f5655",
    34  			".",
    35  		),
    36  		e2e.OptAppendEnv(constants.DisableRuntime+"=false"),
    37  	)
    38  	cp.Expect("Checked out", e2e.RuntimeSourcingTimeoutOpt)
    39  	cp.ExpectExitCode(0)
    40  
    41  	proj, err := project.FromPath(ts.Dirs.Work)
    42  	suite.NoError(err, "Error loading project")
    43  
    44  	_, err = buildscript.ScriptFromProject(proj)
    45  	suite.Require().NoError(err) // verify validity
    46  
    47  	cp = ts.Spawn("commit")
    48  	cp.Expect("No change")
    49  	cp.ExpectExitCode(1)
    50  
    51  	_, err = buildscript.ScriptFromProject(proj)
    52  	suite.Require().NoError(err) // verify validity
    53  
    54  	scriptPath := filepath.Join(ts.Dirs.Work, constants.BuildScriptFileName)
    55  	data := fileutils.ReadFileUnsafe(scriptPath)
    56  	data = bytes.ReplaceAll(data, []byte("casestyle"), []byte("case"))
    57  	suite.Require().NoError(fileutils.WriteFile(scriptPath, data), "Update buildscript")
    58  
    59  	cp = ts.SpawnWithOpts(
    60  		e2e.OptArgs("commit"),
    61  	)
    62  	cp.Expect("successfully created")
    63  	cp.ExpectExitCode(0)
    64  
    65  	cp = ts.SpawnWithOpts(
    66  		e2e.OptArgs("pkg"),
    67  		e2e.OptAppendEnv(constants.DisableRuntime+"=false"),
    68  	)
    69  	cp.Expect("case ", e2e.RuntimeSourcingTimeoutOpt) // note: intentional trailing whitespace to not match 'casestyle'
    70  	cp.ExpectExitCode(0)
    71  }
    72  
    73  func (suite *CommitIntegrationTestSuite) TestCommitAtTimeChange() {
    74  	suite.OnlyRunForTags(tagsuite.Commit, tagsuite.BuildScripts)
    75  	ts := e2e.New(suite.T(), false)
    76  	defer ts.Close()
    77  
    78  	cp := ts.Spawn("config", "set", constants.OptinBuildscriptsConfig, "true")
    79  	cp.ExpectExitCode(0)
    80  
    81  	cp = ts.SpawnWithOpts(
    82  		e2e.OptArgs("checkout", "ActiveState-CLI/Commit-Test-A#7a1b416e-c17f-4d4a-9e27-cbad9e8f5655", "."),
    83  		e2e.OptAppendEnv(constants.DisableRuntime+"=false"),
    84  	)
    85  	cp.Expect("Checked out", e2e.RuntimeSourcingTimeoutOpt)
    86  	cp.ExpectExitCode(0)
    87  
    88  	proj, err := project.FromPath(ts.Dirs.Work)
    89  	suite.NoError(err, "Error loading project")
    90  
    91  	_, err = buildscript.ScriptFromProject(proj)
    92  	suite.Require().NoError(err) // verify validity
    93  
    94  	// Update top-level at_time variable.
    95  	dateTime := "2023-03-01T12:34:56.789Z"
    96  	buildScriptFile := filepath.Join(proj.Dir(), constants.BuildScriptFileName)
    97  	contents, err := fileutils.ReadFile(buildScriptFile)
    98  	suite.Require().NoError(err)
    99  	suite.Require().NoError(fileutils.WriteFile(buildScriptFile, bytes.Replace(contents, []byte("2023-06-22T21:56:10.504Z"), []byte(dateTime), 1)))
   100  	suite.Require().Contains(string(fileutils.ReadFileUnsafe(filepath.Join(proj.Dir(), constants.BuildScriptFileName))), dateTime)
   101  
   102  	cp = ts.Spawn("commit")
   103  	cp.Expect("successfully created")
   104  	cp.ExpectExitCode(0)
   105  
   106  	cp = ts.Spawn("history")
   107  	cp.Expect("Revision")
   108  	revisionTime, err := time.Parse(time.RFC3339, dateTime)
   109  	suite.Require().NoError(err)
   110  	cp.Expect(revisionTime.Format(time.RFC822))
   111  	cp.ExpectExitCode(0)
   112  }
   113  
   114  func TestCommitIntegrationTestSuite(t *testing.T) {
   115  	suite.Run(t, new(CommitIntegrationTestSuite))
   116  }