package testenv import ( "testing" "github.com/fatih/color" "github.com/stretchr/testify/require" "github.com/MichaelMure/git-bug/commands/execenv" "github.com/MichaelMure/git-bug/entity" ) const ( testUserName = "John Doe" testUserEmail = "jdoe@example.com" ) func NewTestEnvAndUser(t *testing.T) (*execenv.Env, entity.Id) { t.Helper() // The Go testing framework either uses os.Stdout directly or a buffer // depending on how the command is initially launched. This results // in os.Stdout.Fd() sometimes being a Terminal, and other times not // being a Terminal which determines whether the ANSI library sends // escape sequences to colorize the text. // // The line below disables all colorization during testing so that the // git-bug command output is consistent in all test scenarios. // // See: // - https://github.com/MichaelMure/git-bug/issues/926 // - https://github.com/golang/go/issues/57671 // - https://github.com/golang/go/blob/f721fa3be9bb52524f97b409606f9423437535e8/src/cmd/go/internal/test/test.go#L1180-L1208 // - https://github.com/golang/go/issues/34877 color.NoColor = true testEnv := execenv.NewTestEnv(t) i, err := testEnv.Backend.Identities().New(testUserName, testUserEmail) require.NoError(t, err) err = testEnv.Backend.SetUserIdentity(i) require.NoError(t, err) return testEnv, i.Id() } const ( testBugTitle = "this is a bug title" testBugMessage = "this is a bug message" ) func NewTestEnvAndBug(t *testing.T) (*execenv.Env, entity.Id) { t.Helper() testEnv, _ := NewTestEnvAndUser(t) b, _, err := testEnv.Backend.Bugs().New(testBugTitle, testBugMessage) require.NoError(t, err) return testEnv, b.Id() } const ( testCommentMessage = "this is a bug comment" ) func NewTestEnvAndBugWithComment(t *testing.T) (*execenv.Env, entity.Id, entity.CombinedId) { t.Helper() env, bugID := NewTestEnvAndBug(t) b, err := env.Backend.Bugs().Resolve(bugID) require.NoError(t, err) commentId, _, err := b.AddComment(testCommentMessage) require.NoError(t, err) return env, bugID, commentId }