github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/subshell/subshell_lin_mac_test.go (about)

     1  //go:build !windows
     2  // +build !windows
     3  
     4  package subshell
     5  
     6  import (
     7  	"errors"
     8  	"fmt"
     9  	"os"
    10  	"strings"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  
    16  	"github.com/ActiveState/cli/internal/config"
    17  	"github.com/ActiveState/cli/internal/constants"
    18  	"github.com/ActiveState/cli/internal/fileutils"
    19  	"github.com/ActiveState/cli/internal/testhelpers/osutil"
    20  	"github.com/ActiveState/cli/pkg/projectfile"
    21  )
    22  
    23  func TestRunCommandNoProjectEnv(t *testing.T) {
    24  	projectURL := fmt.Sprintf("https://%s/string/string", constants.PlatformURL)
    25  	pjfile := projectfile.Project{
    26  		Project: projectURL,
    27  	}
    28  	require.NoError(t, pjfile.Persist())
    29  
    30  	os.Setenv("SHELL", "bash")
    31  	os.Setenv("ACTIVESTATE_PROJECT", "SHOULD NOT BE SET")
    32  
    33  	cfg, err := config.New()
    34  	require.NoError(t, err)
    35  	subs := New(cfg)
    36  
    37  	data := []byte("#!/usr/bin/env bash\necho $ACTIVESTATE_PROJECT")
    38  	filename, err := fileutils.WriteTempFileToDir("", "testRunCommand", data, 0700)
    39  	require.NoError(t, err)
    40  	defer os.Remove(filename)
    41  
    42  	out, err := osutil.CaptureStdout(func() {
    43  		rerr := subs.Run(filename)
    44  		require.NoError(t, rerr)
    45  	})
    46  	require.NoError(t, err)
    47  	assert.Empty(t, strings.TrimSpace(out), "Should not echo anything cause the ACTIVESTATE_PROJECT should be undefined by the run command")
    48  
    49  	projectfile.Reset()
    50  }
    51  
    52  func TestRunCommandError(t *testing.T) {
    53  	projectURL := fmt.Sprintf("https://%s/string/string", constants.PlatformURL)
    54  	pjfile := projectfile.Project{
    55  		Project: projectURL,
    56  	}
    57  	require.NoError(t, pjfile.Persist())
    58  
    59  	os.Setenv("SHELL", "bash")
    60  
    61  	cfg, err := config.New()
    62  	require.NoError(t, err)
    63  	subs := New(cfg)
    64  
    65  	err = subs.Run("some-file-that-doesnt-exist")
    66  	assert.Error(t, err, "Returns an error")
    67  
    68  	data := []byte("#!/usr/bin/env bash\nexit 2")
    69  	filename, err := fileutils.WriteTempFileToDir("", "testRunCommand", data, 0700)
    70  	require.NoError(t, err)
    71  	defer os.Remove(filename)
    72  
    73  	err = subs.Run(filename)
    74  	require.Error(t, err, "Returns an error")
    75  	var eerr interface{ ExitCode() int }
    76  	require.True(t, errors.As(err, &eerr), "Error is exec exit error")
    77  	assert.Equal(t, eerr.ExitCode(), 2, "Returns exit code 2")
    78  
    79  	projectfile.Reset()
    80  }