Files
atlantis/server/events/github_app_working_dir_test.go
2024-03-27 16:20:45 +00:00

101 lines
3.0 KiB
Go

package events_test
import (
"fmt"
"testing"
. "github.com/petergtz/pegomock/v4"
"github.com/runatlantis/atlantis/server/events"
eventMocks "github.com/runatlantis/atlantis/server/events/mocks"
"github.com/runatlantis/atlantis/server/events/models"
"github.com/runatlantis/atlantis/server/events/vcs"
vcsMocks "github.com/runatlantis/atlantis/server/events/vcs/mocks"
"github.com/runatlantis/atlantis/server/events/vcs/testdata"
"github.com/runatlantis/atlantis/server/logging"
. "github.com/runatlantis/atlantis/testing"
)
// Test that if we don't have any existing files, we check out the repo with a github app.
func TestClone_GithubAppNoneExisting(t *testing.T) {
// Initialize the git repo.
repoDir := initRepo(t)
expCommit := runCmd(t, repoDir, "git", "rev-parse", "HEAD")
dataDir := t.TempDir()
logger := logging.NewNoopLogger(t)
wd := &events.FileWorkspace{
DataDir: dataDir,
CheckoutMerge: false,
TestingOverrideHeadCloneURL: fmt.Sprintf("file://%s", repoDir),
}
defer disableSSLVerification()()
testServer, err := testdata.GithubAppTestServer(t)
Ok(t, err)
gwd := &events.GithubAppWorkingDir{
WorkingDir: wd,
Credentials: &vcs.GithubAppCredentials{
Key: []byte(testdata.GithubPrivateKey),
AppID: 1,
Hostname: testServer,
},
GithubHostname: testServer,
}
cloneDir, _, err := gwd.Clone(logger, models.Repo{}, models.PullRequest{
BaseRepo: models.Repo{},
HeadBranch: "branch",
}, "default")
Ok(t, err)
// Use rev-parse to verify at correct commit.
actCommit := runCmd(t, cloneDir, "git", "rev-parse", "HEAD")
Equals(t, expCommit, actCommit)
}
func TestClone_GithubAppSetsCorrectUrl(t *testing.T) {
logger := logging.NewNoopLogger(t)
RegisterMockTestingT(t)
workingDir := eventMocks.NewMockWorkingDir()
credentials := vcsMocks.NewMockGithubCredentials()
ghAppWorkingDir := events.GithubAppWorkingDir{
WorkingDir: workingDir,
Credentials: credentials,
GithubHostname: "some-host",
}
baseRepo, _ := models.NewRepo(
models.Github,
"runatlantis/atlantis",
"https://github.com/runatlantis/atlantis.git",
// user and token have to be blank otherwise this proxy wouldn't be invoked to begin with
"",
"",
)
headRepo := baseRepo
modifiedBaseRepo := baseRepo
// remove credentials from both urls since we want to use the credential store
modifiedBaseRepo.CloneURL = "https://github.com/runatlantis/atlantis.git"
modifiedBaseRepo.SanitizedCloneURL = "https://github.com/runatlantis/atlantis.git"
When(credentials.GetToken()).ThenReturn("token", nil)
When(workingDir.Clone(Any[logging.SimpleLogging](), Eq(modifiedBaseRepo), Eq(models.PullRequest{BaseRepo: modifiedBaseRepo}),
Eq("default"))).ThenReturn("", true, nil)
_, success, _ := ghAppWorkingDir.Clone(logger, headRepo, models.PullRequest{BaseRepo: baseRepo}, "default")
workingDir.VerifyWasCalledOnce().Clone(logger, modifiedBaseRepo, models.PullRequest{BaseRepo: modifiedBaseRepo}, "default")
Assert(t, success == true, "clone url mutation error")
}