Skip to content

Commit b75edb9

Browse files
committed
test: add tests for ActivatePythonVenvIfPresent in runtime package
1 parent 91a07bf commit b75edb9

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

internal/runtime/runtime_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,17 @@
1515
package runtime
1616

1717
import (
18+
"path/filepath"
1819
"testing"
1920

2021
"github.com/slackapi/slack-cli/internal/hooks"
2122
"github.com/slackapi/slack-cli/internal/runtime/deno"
2223
"github.com/slackapi/slack-cli/internal/runtime/node"
2324
"github.com/slackapi/slack-cli/internal/runtime/python"
2425
"github.com/slackapi/slack-cli/internal/slackcontext"
26+
"github.com/slackapi/slack-cli/internal/slackdeps"
2527
"github.com/spf13/afero"
28+
"github.com/stretchr/testify/mock"
2629
"github.com/stretchr/testify/require"
2730
)
2831

@@ -57,6 +60,56 @@ func Test_Runtime_New(t *testing.T) {
5760
}
5861
}
5962

63+
func Test_ActivatePythonVenvIfPresent(t *testing.T) {
64+
tests := map[string]struct {
65+
createVenv bool
66+
expectedActivated bool
67+
}{
68+
"activates venv when it exists": {
69+
createVenv: true,
70+
expectedActivated: true,
71+
},
72+
"no-op when venv does not exist": {
73+
createVenv: false,
74+
expectedActivated: false,
75+
},
76+
}
77+
for name, tc := range tests {
78+
t.Run(name, func(t *testing.T) {
79+
fs := slackdeps.NewFsMock()
80+
osMock := slackdeps.NewOsMock()
81+
projectDir := "/path/to/project"
82+
venvPath := filepath.Join(projectDir, ".venv")
83+
84+
osMock.On("Getenv", "PATH").Return("/usr/bin:/bin")
85+
osMock.AddDefaultMocks()
86+
87+
if tc.createVenv {
88+
// Create the pip executable so venvExists returns true
89+
var pipPath string
90+
pipPath = filepath.Join(venvPath, "bin", "pip")
91+
err := fs.MkdirAll(filepath.Dir(pipPath), 0755)
92+
require.NoError(t, err)
93+
err = afero.WriteFile(fs, pipPath, []byte(""), 0755)
94+
require.NoError(t, err)
95+
}
96+
97+
activated, err := ActivatePythonVenvIfPresent(fs, osMock, projectDir)
98+
require.NoError(t, err)
99+
require.Equal(t, tc.expectedActivated, activated)
100+
101+
if tc.expectedActivated {
102+
osMock.AssertCalled(t, "Setenv", "VIRTUAL_ENV", venvPath)
103+
osMock.AssertCalled(t, "Setenv", "PATH", mock.Anything)
104+
osMock.AssertCalled(t, "Unsetenv", "PYTHONHOME")
105+
} else {
106+
osMock.AssertNotCalled(t, "Setenv", mock.Anything, mock.Anything)
107+
osMock.AssertNotCalled(t, "Unsetenv", mock.Anything)
108+
}
109+
})
110+
}
111+
}
112+
60113
func Test_Runtime_NewDetectProject(t *testing.T) {
61114
tests := map[string]struct {
62115
sdkConfig hooks.SDKCLIConfig

0 commit comments

Comments
 (0)