// The SetupSuite method will run before the tests in the suite are run. // It sets up a database connection for all the tests in this suite without polluting global space. func (s *workItemLinkTypeSuite) SetupSuite() { var err error if err = configuration.Setup(""); err != nil { panic(fmt.Errorf("Failed to setup the configuration: %s", err.Error())) } s.db, err = gorm.Open("postgres", configuration.GetPostgresConfigString()) if err != nil { panic("Failed to connect database: " + err.Error()) } // Make sure the database is populated with the correct types (e.g. bug etc.) if err := models.Transactional(DB, func(tx *gorm.DB) error { return migration.PopulateCommonTypes(context.Background(), tx, workitem.NewWorkItemTypeRepository(tx)) }); err != nil { panic(err.Error()) } svc := goa.New("workItemLinkTypeSuite-Service") require.NotNil(s.T(), svc) s.linkTypeCtrl = NewWorkItemLinkTypeController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.linkTypeCtrl) s.linkCatCtrl = NewWorkItemLinkCategoryController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.linkCatCtrl) // s.typeCtrl = NewWorkitemtypeController(svc, gormapplication.NewGormDB(DB)) // require.NotNil(s.T(), s.typeCtrl) }
// This test ensures that List does not return NIL items. func TestTrackerQueryListItemsNotNil(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() controller := TrackerController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} payload := app.CreateTrackerAlternatePayload{ URL: "http://api.github.com", Type: "github", } _, result := test.CreateTrackerCreated(t, nil, nil, &controller, &payload) t.Log(result.ID) tqController := TrackerqueryController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} tqpayload := app.CreateTrackerQueryAlternatePayload{ Query: "is:open is:issue user:arquillian author:aslakknutsen", Schedule: "15 * * * * *", TrackerID: result.ID, } test.CreateTrackerqueryCreated(t, nil, nil, &tqController, &tqpayload) test.CreateTrackerqueryCreated(t, nil, nil, &tqController, &tqpayload) _, list := test.ListTrackerqueryOK(t, nil, nil, &tqController) for _, tq := range list { if tq == nil { t.Error("Returned Tracker Query found nil") } } }
func TestGetTrackerQuery(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() controller := TrackerController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} payload := app.CreateTrackerAlternatePayload{ URL: "http://api.github.com", Type: "github", } _, result := test.CreateTrackerCreated(t, nil, nil, &controller, &payload) tqController := TrackerqueryController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} tqpayload := app.CreateTrackerQueryAlternatePayload{ Query: "is:open is:issue user:arquillian author:aslakknutsen", Schedule: "15 * * * * *", TrackerID: result.ID, } fmt.Printf("tq payload %#v", tqpayload) _, tqresult := test.CreateTrackerqueryCreated(t, nil, nil, &tqController, &tqpayload) test.ShowTrackerqueryOK(t, nil, nil, &tqController, tqresult.ID) _, tqr := test.ShowTrackerqueryOK(t, nil, nil, &tqController, tqresult.ID) if tqr == nil { t.Fatalf("Tracker Query '%s' not present", tqresult.ID) } if tqr.ID != tqresult.ID { t.Errorf("Id should be %s, but is %s", tqresult.ID, tqr.ID) } }
// The SetupTest method will be run before every test in the suite. func (s *workItemTypeSuite) SetupTest() { svc := goa.New("workItemTypeSuite-Service") assert.NotNil(s.T(), svc) s.typeCtrl = NewWorkitemtypeController(svc, gormapplication.NewGormDB(s.DB)) assert.NotNil(s.T(), s.typeCtrl) s.linkTypeCtrl = NewWorkItemLinkTypeController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.linkTypeCtrl) s.linkCatCtrl = NewWorkItemLinkCategoryController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.linkCatCtrl) }
// The SetupSuite method will run before the tests in the suite are run. // It sets up a database connection for all the tests in this suite without polluting global space. func (s *workItemLinkSuite) SetupSuite() { var err error if err = configuration.Setup(""); err != nil { panic(fmt.Errorf("Failed to setup the configuration: %s", err.Error())) } s.db, err = gorm.Open("postgres", configuration.GetPostgresConfigString()) if err != nil { panic("Failed to connect database: " + err.Error()) } // Make sure the database is populated with the correct types (e.g. bug etc.) if err := models.Transactional(DB, func(tx *gorm.DB) error { return migration.PopulateCommonTypes(context.Background(), tx, workitem.NewWorkItemTypeRepository(tx)) }); err != nil { panic(err.Error()) } require.Nil(s.T(), err) priv, err := almtoken.ParsePrivateKey([]byte(almtoken.RSAPrivateKey)) require.Nil(s.T(), err) svc := goa.New("TestWorkItemLinkType-Service") require.NotNil(s.T(), svc) s.workItemLinkTypeCtrl = NewWorkItemLinkTypeController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.workItemLinkTypeCtrl) svc = goa.New("TestWorkItemLinkCategory-Service") require.NotNil(s.T(), svc) s.workItemLinkCategoryCtrl = NewWorkItemLinkCategoryController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.workItemLinkCategoryCtrl) svc = goa.New("TestWorkItemLink-Service") require.NotNil(s.T(), svc) s.workItemLinkCtrl = NewWorkItemLinkController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.workItemLinkCtrl) svc = goa.New("TestWorkItemRelationshipsLinks-Service") require.NotNil(s.T(), svc) s.workItemRelsLinksCtrl = NewWorkItemRelationshipsLinksController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.workItemRelsLinksCtrl) s.workItemSvc = testsupport.ServiceAsUser("TestWorkItem-Service", almtoken.NewManagerWithPrivateKey(priv), testsupport.TestIdentity) require.NotNil(s.T(), s.workItemSvc) s.workItemCtrl = NewWorkitemController(svc, gormapplication.NewGormDB(DB)) require.NotNil(s.T(), s.workItemCtrl) }
func TestSpacesSearchOK(t *testing.T) { resource.Require(t, resource.Database) tester := TestSearchSpaces{} tester.db = gormapplication.NewGormDB(DB) tester.clean = cleaner.DeleteCreatedEntities(DB) idents, err := tester.createTestData() if err != nil { t.Fatal(err) } defer tester.cleanTestData() tests := []okScenario{ {"With uppercase fullname query", args{offset("0"), limit(10), "TEST_AB"}, expects{totalCount(1)}}, {"With lowercase fullname query", args{offset("0"), limit(10), "TEST_AB"}, expects{totalCount(1)}}, {"With uppercase description query", args{offset("0"), limit(10), "DESCRIPTION FOR TEST_AB"}, expects{totalCount(1)}}, {"With lowercase description query", args{offset("0"), limit(10), "description for test_ab"}, expects{totalCount(1)}}, {"with special chars", args{offset("0"), limit(10), "&:\n!#%?*"}, expects{totalCount(0)}}, {"with * to list all", args{offset("0"), limit(10), "*"}, expects{totalCountAtLeast(len(idents))}}, {"with multi page", args{offset("0"), limit(10), "TEST"}, expects{hasLinks("Next")}}, {"with last page", args{offset(strconv.Itoa(len(idents) - 1)), limit(10), "TEST"}, expects{hasNoLinks("Next"), hasLinks("Prev")}}, {"with different values", args{offset("0"), limit(10), "TEST"}, expects{differentValues()}}, } service := goa.New("TestSpacesSearch-Service") controller := NewSearchController(service, tester.db) for _, tt := range tests { _, result := test.SpacesSearchOK(t, context.Background(), service, controller, tt.args.pageLimit, tt.args.pageOffset, tt.args.q) for _, expect := range tt.expects { expect(t, tt, result) } } }
func TestSearchPagination(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() service := getServiceAsUser() wiRepo := workitem.NewWorkItemRepository(DB) _, err := wiRepo.Create( context.Background(), workitem.SystemBug, map[string]interface{}{ workitem.SystemTitle: "specialwordforsearch2", workitem.SystemDescription: nil, workitem.SystemCreator: "baijum", workitem.SystemState: workitem.SystemStateClosed, }, "") require.Nil(t, err) controller := NewSearchController(service, gormapplication.NewGormDB(DB)) q := "specialwordforsearch2" _, sr := test.ShowSearchOK(t, nil, nil, controller, nil, nil, q) // defaults in paging.go is 'pageSizeDefault = 20' assert.Equal(t, "http:///api/search?page[offset]=0&page[limit]=20&q=specialwordforsearch2", *sr.Links.First) assert.Equal(t, "http:///api/search?page[offset]=0&page[limit]=20&q=specialwordforsearch2", *sr.Links.Last) require.NotEmpty(t, sr.Data) r := sr.Data[0] assert.Equal(t, "specialwordforsearch2", r.Attributes[workitem.SystemTitle]) }
func TestUnregisteredURLWithPort(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() service := getServiceAsUser() wiRepo := workitem.NewWorkItemRepository(DB) description := "Related to http://some-other-domain:8080/different-path/154687364529310/ok issue" expectedDescription := rendering.NewMarkupContentFromLegacy(description) _, err := wiRepo.Create( context.Background(), workitem.SystemBug, map[string]interface{}{ workitem.SystemTitle: "specialwordforsearch_new", workitem.SystemDescription: expectedDescription, workitem.SystemCreator: "baijum", workitem.SystemState: workitem.SystemStateClosed, }, "") require.Nil(t, err) controller := NewSearchController(service, gormapplication.NewGormDB(DB)) q := `http://some-other-domain:8080/different-path/` _, sr := test.ShowSearchOK(t, nil, nil, controller, nil, nil, q) require.NotEmpty(t, sr.Data) r := sr.Data[0] assert.Equal(t, description, r.Attributes[workitem.SystemDescription]) }
func createControler(t *testing.T) (*UsersController, application.DB) { svc := goa.New("test") app := gormapplication.NewGormDB(DB) controller := NewUsersController(svc, app) assert.NotNil(t, controller) return controller, app }
func TestSearchURLWithoutPort(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() service := getServiceAsUser() wiRepo := workitem.NewWorkItemRepository(DB) description := "This issue is related to http://localhost/detail/876394" expectedDescription := rendering.NewMarkupContentFromLegacy(description) _, err := wiRepo.Create( context.Background(), workitem.SystemBug, map[string]interface{}{ workitem.SystemTitle: "specialwordforsearch_without_port", workitem.SystemDescription: expectedDescription, workitem.SystemCreator: "baijum", workitem.SystemState: workitem.SystemStateClosed, }, "") require.Nil(t, err) controller := NewSearchController(service, gormapplication.NewGormDB(DB)) q := `"http://localhost/detail/876394"` _, sr := test.ShowSearchOK(t, nil, nil, controller, nil, nil, q) require.NotEmpty(t, sr.Data) r := sr.Data[0] assert.Equal(t, description, r.Attributes[workitem.SystemDescription]) }
func TestUnwantedCharactersRelatedToSearchLogic(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() service := getServiceAsUser() wiRepo := workitem.NewWorkItemRepository(DB) expectedDescription := rendering.NewMarkupContentFromLegacy("Related to http://example-domain:8080/different-path/ok issue") _, err := wiRepo.Create( context.Background(), workitem.SystemBug, map[string]interface{}{ workitem.SystemTitle: "specialwordforsearch_new", workitem.SystemDescription: expectedDescription, workitem.SystemCreator: "baijum", workitem.SystemState: workitem.SystemStateClosed, }, "") require.Nil(t, err) controller := NewSearchController(service, gormapplication.NewGormDB(DB)) // add url: in the query, that is not expected by the code hence need to make sure it gives expected result. q := `http://url:some-random-other-domain:8080/different-path/` _, sr := test.ShowSearchOK(t, nil, nil, controller, nil, nil, q) require.NotNil(t, sr.Data) assert.Empty(t, sr.Data) }
func TestGetTracker(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() controller := TrackerController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} payload := app.CreateTrackerAlternatePayload{ URL: "http://issues.jboss.com", Type: "jira", } _, result := test.CreateTrackerCreated(t, nil, nil, &controller, &payload) test.ShowTrackerOK(t, nil, nil, &controller, result.ID) _, tr := test.ShowTrackerOK(t, nil, nil, &controller, result.ID) if tr == nil { t.Fatalf("Tracker '%s' not present", result.ID) } if tr.ID != result.ID { t.Errorf("Id should be %s, but is %s", result.ID, tr.ID) } payload2 := app.UpdateTrackerAlternatePayload{ URL: tr.URL, Type: tr.Type, } _, updated := test.UpdateTrackerOK(t, nil, nil, &controller, tr.ID, &payload2) if updated.ID != result.ID { t.Errorf("Id has changed from %s to %s", result.ID, updated.ID) } if updated.URL != result.URL { t.Errorf("URL has changed from %s to %s", result.URL, updated.URL) } if updated.Type != result.Type { t.Errorf("Type has changed has from %s to %s", result.Type, updated.Type) } }
func TestSearch(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() service := getServiceAsUser() wiRepo := workitem.NewWorkItemRepository(DB) _, err := wiRepo.Create( context.Background(), workitem.SystemBug, map[string]interface{}{ workitem.SystemTitle: "specialwordforsearch", workitem.SystemDescription: nil, workitem.SystemCreator: "baijum", workitem.SystemState: workitem.SystemStateClosed, }, "") require.Nil(t, err) controller := NewSearchController(service, gormapplication.NewGormDB(DB)) q := "specialwordforsearch" _, sr := test.ShowSearchOK(t, nil, nil, controller, nil, nil, q) require.NotEmpty(t, sr.Data) r := sr.Data[0] assert.Equal(t, "specialwordforsearch", r.Attributes[workitem.SystemTitle]) }
// This test case will check authorized access to Create/Update/Delete APIs func (s *workItemLinkSuite) TestUnauthorizeWorkItemLinkCUD() { UnauthorizeCreateUpdateDeleteTest(s.T(), getWorkItemLinkTestData, func() *goa.Service { return goa.New("TestUnauthorizedCreateWorkItemLink-Service") }, func(service *goa.Service) error { controller := NewWorkItemLinkController(service, gormapplication.NewGormDB(DB)) app.MountWorkItemLinkController(service, controller) return nil }) }
// This test case will check authorized access to Create/Update/Delete APIs func TestUnauthorizeWorkItemTypeCreate(t *testing.T) { UnauthorizeCreateUpdateDeleteTest(t, getWorkItemTypeTestData, func() *goa.Service { return goa.New("TestUnauthorizedCreateWIT-Service") }, func(service *goa.Service) error { controller := NewWorkitemtypeController(service, gormapplication.NewGormDB(DB)) app.MountWorkitemtypeController(service, controller) return nil }) }
// This test case will check authorized access to Create/Update/Delete APIs func TestUnauthorizeTrackerCUD(t *testing.T) { UnauthorizeCreateUpdateDeleteTest(t, getTrackerTestData, func() *goa.Service { return goa.New("TestUnauthorizedTracker-Service") }, func(service *goa.Service) error { controller := NewTrackerController(service, gormapplication.NewGormDB(DB), RwiScheduler) app.MountTrackerController(service, controller) return nil }) }
func (s *workItemLinkSuite) TestUnauthorizeWorkItemRelationshipsLinksCUD() { wiID := strconv.FormatUint(s.bug1ID, 10) UnauthorizeCreateUpdateDeleteTest(s.T(), getWorkItemRelationshipLinksTestData(s.T(), wiID), func() *goa.Service { return goa.New("TestUnauthorizedCreateWorkItemRelationshipsLinks-Service") }, func(service *goa.Service) error { controller := NewWorkItemRelationshipsLinksController(service, gormapplication.NewGormDB(DB)) app.MountWorkItemRelationshipsLinksController(service, controller) return nil }) }
func TestCreateTrackerQueryREST(t *testing.T) { resource.Require(t, resource.Database) privatekey, err := jwt.ParseRSAPrivateKeyFromPEM([]byte(almtoken.RSAPrivateKey)) if err != nil { t.Fatal("Could not parse Key ", err) } service := goa.New("API") controller := NewTrackerController(service, gormapplication.NewGormDB(DB), RwiScheduler) payload := app.CreateTrackerAlternatePayload{ URL: "http://api.github.com", Type: "github", } _, tracker := test.CreateTrackerCreated(t, nil, nil, controller, &payload) jwtMiddleware := goajwt.New(&privatekey.PublicKey, nil, app.NewJWTSecurity()) app.UseJWTMiddleware(service, jwtMiddleware) controller2 := NewTrackerqueryController(service, gormapplication.NewGormDB(DB), RwiScheduler) app.MountTrackerqueryController(service, controller2) server := httptest.NewServer(service.Mux) tqPayload := fmt.Sprintf(`{"query": "abcdefgh", "schedule": "1 1 * * * *", "trackerID": "%s"}`, tracker.ID) trackerQueryCreateURL := "/api/trackerqueries" req, _ := http.NewRequest("POST", server.URL+trackerQueryCreateURL, strings.NewReader(tqPayload)) jwtToken := getValidAuthHeader(t, privatekey) req.Header.Set("Authorization", jwtToken) client := http.Client{} res, err := client.Do(req) if err != nil { t.Fatalf("Server error %s", err) } if res.StatusCode != http.StatusCreated { t.Fatalf("Expected a 201 Created response, got %d", res.StatusCode) } server.Close() }
func TestListIdentities(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() service := goa.New("Test-Identities") app := gormapplication.NewGormDB(DB) identityController := NewIdentityController(service, app) _, ic := test.ListIdentityOK(t, service.Context, service, identityController) require.NotNil(t, ic) numberOfCurrentIdent := len(ic.Data) ctx := context.Background() identityRepo := app.Identities() identity := account.Identity{ Username: "******", Provider: "test-idp", ID: uuid.NewV4(), } err := identityRepo.Create(ctx, &identity) if err != nil { t.Fatal(err) } _, ic2 := test.ListIdentityOK(t, service.Context, service, identityController) require.NotNil(t, ic2) assert.Equal(t, numberOfCurrentIdent+1, len(ic2.Data)) assertIdent(t, identity, findIdent(identity.ID, ic2.Data)) identity2 := account.Identity{ Username: "******", Provider: "test-idp", ID: uuid.NewV4(), } err = identityRepo.Create(ctx, &identity2) if err != nil { t.Fatal(err) } _, ic3 := test.ListIdentityOK(t, service.Context, service, identityController) require.NotNil(t, ic3) assert.Equal(t, numberOfCurrentIdent+2, len(ic3.Data)) assertIdent(t, identity, findIdent(identity.ID, ic3.Data)) assertIdent(t, identity2, findIdent(identity2.ID, ic3.Data)) }
func TestCreateTracker(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() controller := TrackerController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} payload := app.CreateTrackerAlternatePayload{ URL: "http://issues.jboss.com", Type: "jira", } _, created := test.CreateTrackerCreated(t, nil, nil, &controller, &payload) if created.ID == "" { t.Error("no id") } }
// This test ensures that ID returned by Show is valid. // refer : https://github.com/almighty/almighty-core/issues/189 func TestCreateTrackerQueryValidId(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() controller := TrackerController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} payload := app.CreateTrackerAlternatePayload{ URL: "http://api.github.com", Type: "github", } _, result := test.CreateTrackerCreated(t, nil, nil, &controller, &payload) t.Log(result.ID) tqController := TrackerqueryController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} tqpayload := app.CreateTrackerQueryAlternatePayload{ Query: "is:open is:issue user:arquillian author:aslakknutsen", Schedule: "15 * * * * *", TrackerID: result.ID, } _, trackerquery := test.CreateTrackerqueryCreated(t, nil, nil, &tqController, &tqpayload) _, created := test.ShowTrackerqueryOK(t, nil, nil, &tqController, trackerquery.ID) if created != nil && created.ID != trackerquery.ID { t.Error("Failed because fetched Tracker query not same as requested. Found: ", trackerquery.ID, " Expected, ", created.ID) } }
// This test ensures that ID returned by Show is valid. // refer : https://github.com/almighty/almighty-core/issues/189 func TestCreateTrackerValidId(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() controller := TrackerController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} payload := app.CreateTrackerAlternatePayload{ URL: "http://issues.jboss.com", Type: "jira", } _, tracker := test.CreateTrackerCreated(t, nil, nil, &controller, &payload) _, created := test.ShowTrackerOK(t, nil, nil, &controller, tracker.ID) if created != nil && created.ID != tracker.ID { t.Error("Failed because fetched Tracker not same as requested. Found: ", tracker.ID, " Expected, ", created.ID) } }
func TestCreateTrackerQuery(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() controller := TrackerController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} payload := app.CreateTrackerAlternatePayload{ URL: "http://api.github.com", Type: "github", } _, result := test.CreateTrackerCreated(t, nil, nil, &controller, &payload) t.Log(result.ID) tqController := TrackerqueryController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} tqpayload := app.CreateTrackerQueryAlternatePayload{ Query: "is:open is:issue user:arquillian author:aslakknutsen", Schedule: "15 * * * * *", TrackerID: result.ID, } _, tqresult := test.CreateTrackerqueryCreated(t, nil, nil, &tqController, &tqpayload) t.Log(tqresult) if tqresult.ID == "" { t.Error("no id") } }
// TestAutoRegisterHostURL checks if client's host is neatly registered as a KnwonURL or not // Uses helper functions verifySearchByKnownURLs, searchByURL, getWICreatePayload func TestAutoRegisterHostURL(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() service := getServiceAsUser() wiCtrl := NewWorkitemController(service, gormapplication.NewGormDB(DB)) // create a WI, search by `list view URL` of newly created item newWI := getWICreatePayload() _, wi := test.CreateWorkitemCreated(t, service.Context, service, wiCtrl, newWI) require.NotNil(t, wi) customHost := "own.domain.one" queryString := fmt.Sprintf("http://%s/work-item/list/detail/%s", customHost, *wi.Data.ID) verifySearchByKnownURLs(t, wi, customHost, queryString) // Search by `board view URL` of newly created item customHost2 := "own.domain.two" queryString2 := fmt.Sprintf("http://%s/work-item/board/detail/%s", customHost2, *wi.Data.ID) verifySearchByKnownURLs(t, wi, customHost2, queryString2) }
func TestMain(m *testing.M) { if _, c := os.LookupEnv(resource.Database); c != false { var err error if err = configuration.Setup(""); err != nil { panic(fmt.Errorf("Failed to setup the configuration: %s", err.Error())) } db, err = gorm.Open("postgres", configuration.GetPostgresConfigString()) if err != nil { panic("Failed to connect database: " + err.Error()) } defer db.Close() // Migrate the schema err = migration.Migrate(db.DB()) if err != nil { panic(err.Error()) } } oauth := &oauth2.Config{ ClientID: configuration.GetKeycloakClientID(), ClientSecret: configuration.GetKeycloakSecret(), Scopes: []string{"user:email"}, Endpoint: oauth2.Endpoint{ AuthURL: "http://sso.demo.almighty.io/auth/realms/demo/protocol/openid-connect/auth", TokenURL: "http://sso.demo.almighty.io/auth/realms/demo/protocol/openid-connect/token", }, } privateKey, err := token.ParsePrivateKey([]byte(token.RSAPrivateKey)) if err != nil { panic(err) } tokenManager := token.NewManagerWithPrivateKey(privateKey) userRepository := account.NewUserRepository(db) identityRepository := account.NewIdentityRepository(db) app := gormapplication.NewGormDB(db) loginService = NewKeycloakOAuthProvider(oauth, identityRepository, userRepository, tokenManager, app) os.Exit(m.Run()) }
// searchByURL copies much of the codebase from search_testing.go->ShowSearchOK // and customises the values to add custom Host in the call. func searchByURL(t *testing.T, customHost, queryString string) *app.SearchWorkItemList { service := getServiceAsUser() var resp interface{} var respSetter goatest.ResponseSetterFunc = func(r interface{}) { resp = r } newEncoder := func(io.Writer) goa.Encoder { return respSetter } service.Encoder = goa.NewHTTPEncoder() service.Encoder.Register(newEncoder, "*/*") rw := httptest.NewRecorder() query := url.Values{} u := &url.URL{ Path: fmt.Sprintf("/api/search"), RawQuery: query.Encode(), Host: customHost, } req, err := http.NewRequest("GET", u.String(), nil) if err != nil { panic("invalid test " + err.Error()) // bug } prms := url.Values{} prms["q"] = []string{queryString} // any value will do ctx := service.Context goaCtx := goa.NewContext(goa.WithAction(ctx, "SearchTest"), rw, req, prms) showCtx, err := app.NewShowSearchContext(goaCtx, service) if err != nil { panic("invalid test data " + err.Error()) // bug } ctrl := NewSearchController(service, gormapplication.NewGormDB(DB)) // Perform action err = ctrl.Show(showCtx) // Validate response if err != nil { t.Fatalf("controller returned %s", err) } if rw.Code != 200 { t.Fatalf("invalid response status code: got %+v, expected 200", rw.Code) } mt, ok := resp.(*app.SearchWorkItemList) if !ok { t.Fatalf("invalid response media: got %+v, expected instance of app.SearchWorkItemList", resp) } return mt }
// This test ensures that List does not return NIL items. // refer : https://github.com/almighty/almighty-core/issues/191 func TestTrackerListItemsNotNil(t *testing.T) { resource.Require(t, resource.Database) defer cleaner.DeleteCreatedEntities(DB)() controller := TrackerController{Controller: nil, db: gormapplication.NewGormDB(DB), scheduler: RwiScheduler} payload := app.CreateTrackerAlternatePayload{ URL: "http://issues.jboss.com", Type: "jira", } test.CreateTrackerCreated(t, nil, nil, &controller, &payload) test.CreateTrackerCreated(t, nil, nil, &controller, &payload) _, list := test.ListTrackerOK(t, nil, nil, &controller, nil, nil) for _, tracker := range list { if tracker == nil { t.Error("Returned Tracker found nil") } } }
func newTestKeycloakOAuthProvider() *login.KeycloakOAuthProvider { oauth := &oauth2.Config{ ClientID: configuration.GetKeycloakClientID(), ClientSecret: configuration.GetKeycloakSecret(), Scopes: []string{"user:email"}, Endpoint: oauth2.Endpoint{ AuthURL: "http://sso.demo.almighty.io/auth/realms/demo/protocol/openid-connect/auth", TokenURL: "http://sso.demo.almighty.io/auth/realms/demo/protocol/openid-connect/token", }, } publicKey, err := token.ParsePublicKey([]byte(token.RSAPublicKey)) if err != nil { panic(err) } tokenManager := token.NewManager(publicKey) userRepository := account.NewUserRepository(DB) identityRepository := account.NewIdentityRepository(DB) app := gormapplication.NewGormDB(DB) return login.NewKeycloakOAuthProvider(oauth, identityRepository, userRepository, tokenManager, app) }
func main() { // -------------------------------------------------------------------- // Parse flags // -------------------------------------------------------------------- var configFilePath string var printConfig bool var migrateDB bool var scheduler *remoteworkitem.Scheduler flag.StringVar(&configFilePath, "config", "", "Path to the config file to read") flag.BoolVar(&printConfig, "printConfig", false, "Prints the config (including merged environment variables) and exits") flag.BoolVar(&migrateDB, "migrateDatabase", false, "Migrates the database to the newest version and exits.") flag.Parse() // Override default -config switch with environment variable only if -config switch was // not explicitly given via the command line. configSwitchIsSet := false flag.Visit(func(f *flag.Flag) { if f.Name == "config" { configSwitchIsSet = true } }) if !configSwitchIsSet { if envConfigPath, ok := os.LookupEnv("ALMIGHTY_CONFIG_FILE_PATH"); ok { configFilePath = envConfigPath } } var err error if err = configuration.Setup(configFilePath); err != nil { logrus.Panic(nil, map[string]interface{}{ "configFilePath": configFilePath, "err": err, }, "failed to setup the configuration") } if printConfig { os.Exit(0) } // Initialized developer mode flag for the logger log.InitializeLogger(configuration.IsPostgresDeveloperModeEnabled()) printUserInfo() var db *gorm.DB for { db, err = gorm.Open("postgres", configuration.GetPostgresConfigString()) if err != nil { db.Close() log.Logger().Errorf("ERROR: Unable to open connection to database %v\n", err) log.Logger().Infof("Retrying to connect in %v...\n", configuration.GetPostgresConnectionRetrySleep()) time.Sleep(configuration.GetPostgresConnectionRetrySleep()) } else { defer db.Close() break } } if configuration.IsPostgresDeveloperModeEnabled() { db = db.Debug() } // Migrate the schema err = migration.Migrate(db.DB()) if err != nil { log.Panic(nil, map[string]interface{}{ "err": fmt.Sprintf("%+v", err), }, "failed migration") } // Nothing to here except exit, since the migration is already performed. if migrateDB { os.Exit(0) } // Make sure the database is populated with the correct types (e.g. bug etc.) if configuration.GetPopulateCommonTypes() { // set a random request ID for the context ctx, req_id := client.ContextWithRequestID(context.Background()) log.Debug(ctx, nil, "Initializing the population of the database... Request ID: %v", req_id) if err := models.Transactional(db, func(tx *gorm.DB) error { return migration.PopulateCommonTypes(ctx, tx, workitem.NewWorkItemTypeRepository(tx)) }); err != nil { log.Panic(ctx, map[string]interface{}{ "err": fmt.Sprintf("%+v", err), }, "failed to populate common types") } if err := models.Transactional(db, func(tx *gorm.DB) error { return migration.BootstrapWorkItemLinking(ctx, link.NewWorkItemLinkCategoryRepository(tx), link.NewWorkItemLinkTypeRepository(tx)) }); err != nil { log.Panic(ctx, map[string]interface{}{ "err": fmt.Sprintf("%+v", err), }, "failed to bootstap work item linking") } } // Scheduler to fetch and import remote tracker items scheduler = remoteworkitem.NewScheduler(db) defer scheduler.Stop() scheduler.ScheduleAllQueries() // Create service service := goa.New("alm") // Mount middleware service.Use(middleware.RequestID()) service.Use(middleware.LogRequest(configuration.IsPostgresDeveloperModeEnabled())) service.Use(gzip.Middleware(9)) service.Use(jsonapi.ErrorHandler(service, true)) service.Use(middleware.Recover()) service.WithLogger(goalogrus.New(log.Logger())) publicKey, err := token.ParsePublicKey(configuration.GetTokenPublicKey()) if err != nil { log.Panic(nil, map[string]interface{}{ "err": fmt.Sprintf("%+v", err), }, "failed to parse public token") } // Setup Account/Login/Security identityRepository := account.NewIdentityRepository(db) userRepository := account.NewUserRepository(db) tokenManager := token.NewManager(publicKey) app.UseJWTMiddleware(service, jwt.New(publicKey, nil, app.NewJWTSecurity())) service.Use(login.InjectTokenManager(tokenManager)) // Mount "login" controller oauth := &oauth2.Config{ ClientID: configuration.GetKeycloakClientID(), ClientSecret: configuration.GetKeycloakSecret(), Scopes: []string{"user:email"}, Endpoint: oauth2.Endpoint{ AuthURL: configuration.GetKeycloakEndpointAuth(), TokenURL: configuration.GetKeycloakEndpointToken(), }, } appDB := gormapplication.NewGormDB(db) loginService := login.NewKeycloakOAuthProvider(oauth, identityRepository, userRepository, tokenManager, appDB) loginCtrl := NewLoginController(service, loginService, tokenManager) app.MountLoginController(service, loginCtrl) // Mount "status" controller statusCtrl := NewStatusController(service, db) app.MountStatusController(service, statusCtrl) // Mount "workitem" controller workitemCtrl := NewWorkitemController(service, appDB) app.MountWorkitemController(service, workitemCtrl) // Mount "workitemtype" controller workitemtypeCtrl := NewWorkitemtypeController(service, appDB) app.MountWorkitemtypeController(service, workitemtypeCtrl) // Mount "work item link category" controller workItemLinkCategoryCtrl := NewWorkItemLinkCategoryController(service, appDB) app.MountWorkItemLinkCategoryController(service, workItemLinkCategoryCtrl) // Mount "work item link type" controller workItemLinkTypeCtrl := NewWorkItemLinkTypeController(service, appDB) app.MountWorkItemLinkTypeController(service, workItemLinkTypeCtrl) // Mount "work item link" controller workItemLinkCtrl := NewWorkItemLinkController(service, appDB) app.MountWorkItemLinkController(service, workItemLinkCtrl) // Mount "work item comments" controller workItemCommentsCtrl := NewWorkItemCommentsController(service, appDB) app.MountWorkItemCommentsController(service, workItemCommentsCtrl) // Mount "work item relationships links" controller workItemRelationshipsLinksCtrl := NewWorkItemRelationshipsLinksController(service, appDB) app.MountWorkItemRelationshipsLinksController(service, workItemRelationshipsLinksCtrl) // Mount "comments" controller commentsCtrl := NewCommentsController(service, appDB) app.MountCommentsController(service, commentsCtrl) // Mount "tracker" controller c5 := NewTrackerController(service, appDB, scheduler) app.MountTrackerController(service, c5) // Mount "trackerquery" controller c6 := NewTrackerqueryController(service, appDB, scheduler) app.MountTrackerqueryController(service, c6) // Mount "space" controller spaceCtrl := NewSpaceController(service, appDB) app.MountSpaceController(service, spaceCtrl) // Mount "user" controller userCtrl := NewUserController(service, appDB, tokenManager) app.MountUserController(service, userCtrl) // Mount "search" controller searchCtrl := NewSearchController(service, appDB) app.MountSearchController(service, searchCtrl) // Mount "indentity" controller identityCtrl := NewIdentityController(service, appDB) app.MountIdentityController(service, identityCtrl) // Mount "users" controller usersCtrl := NewUsersController(service, appDB) app.MountUsersController(service, usersCtrl) // Mount "iterations" controller iterationCtrl := NewIterationController(service, appDB) app.MountIterationController(service, iterationCtrl) // Mount "spaceiterations" controller spaceIterationCtrl := NewSpaceIterationsController(service, appDB) app.MountSpaceIterationsController(service, spaceIterationCtrl) // Mount "userspace" controller userspaceCtrl := NewUserspaceController(service, db) app.MountUserspaceController(service, userspaceCtrl) // Mount "render" controller renderCtrl := NewRenderController(service) app.MountRenderController(service, renderCtrl) // Mount "areas" controller areaCtrl := NewAreaController(service, appDB) app.MountAreaController(service, areaCtrl) spaceAreaCtrl := NewSpaceAreasController(service, appDB) app.MountSpaceAreasController(service, spaceAreaCtrl) log.Logger().Infoln("Git Commit SHA: ", Commit) log.Logger().Infoln("UTC Build Time: ", BuildTime) log.Logger().Infoln("UTC Start Time: ", StartTime) log.Logger().Infoln("Dev mode: ", configuration.IsPostgresDeveloperModeEnabled()) http.Handle("/api/", service.Mux) http.Handle("/", http.FileServer(assetFS())) http.Handle("/favicon.ico", http.NotFoundHandler()) // Start http if err := http.ListenAndServe(configuration.GetHTTPAddress(), nil); err != nil { log.Error(nil, map[string]interface{}{ "addr": configuration.GetHTTPAddress(), "err": err, }, "unable to connect to server") service.LogError("startup", "err", err) } }
func (rest *TestSpaceAreaREST) SetupTest() { rest.db = gormapplication.NewGormDB(rest.DB) rest.clean = cleaner.DeleteCreatedEntities(rest.DB) }