func TestDetectSource(t *testing.T) { dockerResolver := app.DockerRegistryResolver{ Client: dockerregistry.NewClient(), } mocks := app.MockSourceRepositories() tests := []struct { name string cfg *AppConfig repositories []*app.SourceRepository expectedLang string expectedErr string }{ { name: "detect source - ruby", cfg: &AppConfig{ detector: app.SourceRepositoryEnumerator{ Detectors: source.DefaultDetectors, Tester: dockerfile.NewTester(), }, dockerResolver: dockerResolver, }, repositories: []*app.SourceRepository{mocks[1]}, expectedLang: "ruby", expectedErr: "", }, } for _, test := range tests { err := test.cfg.detectSource(test.repositories) if err != nil { if !strings.Contains(err.Error(), test.expectedErr) { t.Errorf("%s: Invalid error: Expected %s, got %v", test.name, test.expectedErr, err) } } else if len(test.expectedErr) != 0 { t.Errorf("%s: Expected %s error but got none", test.name, test.expectedErr) } for _, repo := range test.repositories { info := repo.Info() if info == nil { t.Errorf("%s: expected repository info to be populated; it is nil", test.name) continue } if term := strings.Join(info.Terms(), ","); term != test.expectedLang { t.Errorf("%s: expected repository info term to be %s; got %s\n", test.name, test.expectedLang, term) } } } }
func TestEnsureHasSource(t *testing.T) { tests := []struct { name string cfg AppConfig components app.ComponentReferences repositories []*app.SourceRepository expectedErr string }{ { name: "One requiresSource, multiple repositories", components: app.ComponentReferences{ app.ComponentReference(&app.ComponentInput{ ExpectToBuild: true, }), }, repositories: app.MockSourceRepositories(), expectedErr: "there are multiple code locations provided - use one of the following suggestions", }, { name: "Multiple requiresSource, multiple repositories", components: app.ComponentReferences{ app.ComponentReference(&app.ComponentInput{ ExpectToBuild: true, }), app.ComponentReference(&app.ComponentInput{ ExpectToBuild: true, }), }, repositories: app.MockSourceRepositories(), expectedErr: "Use '[image]~[repo]' to declare which code goes with which image", }, { name: "One requiresSource, no repositories", components: app.ComponentReferences{ app.ComponentReference(&app.ComponentInput{ ExpectToBuild: true, }), }, repositories: []*app.SourceRepository{}, expectedErr: "you must specify a repository via --code", }, { name: "Multiple requiresSource, no repositories", components: app.ComponentReferences{ app.ComponentReference(&app.ComponentInput{ ExpectToBuild: true, }), app.ComponentReference(&app.ComponentInput{ ExpectToBuild: true, }), }, repositories: []*app.SourceRepository{}, expectedErr: "you must provide at least one source code repository", }, { name: "Successful - one repository", components: app.ComponentReferences{ app.ComponentReference(&app.ComponentInput{ ExpectToBuild: false, }), }, repositories: []*app.SourceRepository{app.MockSourceRepositories()[0]}, expectedErr: "", }, { name: "Successful - no requiresSource", components: app.ComponentReferences{ app.ComponentReference(&app.ComponentInput{ ExpectToBuild: false, }), }, repositories: app.MockSourceRepositories(), expectedErr: "", }, } for _, test := range tests { err := test.cfg.ensureHasSource(test.components, test.repositories) if err != nil { if !strings.Contains(err.Error(), test.expectedErr) { t.Errorf("%s: Invalid error: Expected %s, got %v", test.name, test.expectedErr, err) } } else if len(test.expectedErr) != 0 { t.Errorf("%s: Expected %s error but got none", test.name, test.expectedErr) } } }