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 }