package app import ( "fmt" "os" "testing" "gitlab.com/revalus/grm/config" ) func prepareConfigContent() (string, string) { checkErrorDuringPreparation := func(err error) { if err != nil { fmt.Printf("Cannot prepare a temporary directory for testing! %v ", err.Error()) os.Exit(2) } } baseTmp := fmt.Sprintf("%v/grmTest", os.TempDir()) if _, ok := os.Stat(baseTmp); ok != nil { err := os.Mkdir(baseTmp, 0777) checkErrorDuringPreparation(err) } tempDir, err := os.MkdirTemp(baseTmp, "*") checkErrorDuringPreparation(err) configFilePath := fmt.Sprintf("%v/config-file.yaml", tempDir) file, err := os.Create(configFilePath) checkErrorDuringPreparation(err) defer file.Close() yamlConfig := fmt.Sprintf(` workspace: %v repositories: - src: "https://github.com/golang/example.git"`, tempDir) _, err = file.WriteString(yamlConfig) checkErrorDuringPreparation(err) return tempDir, configFilePath } func TestParseApplication(t *testing.T) { workdir, configFile := prepareConfigContent() t.Cleanup(func() { os.Remove(workdir) }) args := []string{"custom-app", "sync", "-c", configFile} grm := GitRepositoryManager{} grm.Parse(args) if workdir != grm.configuration.Workspace { t.Errorf("Expected to get %v, instead of this got %v", workdir, grm.configuration.Repositories) } if !grm.cliArguments.Sync { t.Error("The value of \"sync\" is expected to be true") } expectedRepo := config.RepositoryConfig{ Name: "example", Src: "https://github.com/golang/example.git", Dest: "example", } if expectedRepo != grm.configuration.Repositories[0] { t.Errorf("Expected to get %v, instead of this got %v", expectedRepo, grm.configuration.Repositories[0]) } } func Example_test_sync_output() { grm := GitRepositoryManager{ configuration: config.Configuration{ Workspace: "/tmp", }, cliArguments: config.CliArguments{ Sync: true, Version: true, }, console: ConsoleOutput{ Color: false, }, } grm.Run() // Output: // Info: Synchronizing repositories // Info: All repositories are synced // Info: Current version: 0.2.0 }