func TestAddAndRetrieveApp(t *testing.T) { app := new(roll.Application) app.ApplicationName = "an app" app.ClientID = "123" app.ClientSecret = "hush" app.DeveloperEmail = "*****@*****.**" app.DeveloperID = "foo" app.LoginProvider = "auth0" app.RedirectURI = "neither here nor there" appRepo := NewMBDAppRepo() err := appRepo.CreateApplication(app) if assert.Nil(t, err) { defer appRepo.delete(app) } retapp, err := appRepo.RetrieveAppByNameAndDevEmail("an app", "*****@*****.**") assert.Nil(t, err) if assert.NotNil(t, app) { assert.Equal(t, app.ApplicationName, retapp.ApplicationName) assert.Equal(t, app.ClientID, retapp.ClientID) assert.Equal(t, app.ClientSecret, retapp.ClientSecret) assert.Equal(t, app.DeveloperEmail, retapp.DeveloperEmail) assert.Equal(t, app.DeveloperID, retapp.DeveloperID) assert.Equal(t, app.LoginProvider, retapp.LoginProvider) assert.Equal(t, app.RedirectURI, retapp.RedirectURI) } retapp, err = appRepo.RetrieveApplication(app.ClientID, app.DeveloperID, false) assert.Nil(t, err) if assert.NotNil(t, app) { assert.Equal(t, app.ApplicationName, retapp.ApplicationName) assert.Equal(t, app.ClientID, retapp.ClientID) assert.Equal(t, app.ClientSecret, retapp.ClientSecret) assert.Equal(t, app.DeveloperEmail, retapp.DeveloperEmail) assert.Equal(t, app.DeveloperID, retapp.DeveloperID) assert.Equal(t, app.LoginProvider, retapp.LoginProvider) assert.Equal(t, app.RedirectURI, retapp.RedirectURI) } retapp, err = appRepo.RetrieveApplication(app.ClientID, "huh", true) assert.Nil(t, err) if assert.NotNil(t, app) { assert.Equal(t, app.ApplicationName, retapp.ApplicationName) assert.Equal(t, app.ClientID, retapp.ClientID) assert.Equal(t, app.ClientSecret, retapp.ClientSecret) assert.Equal(t, app.DeveloperEmail, retapp.DeveloperEmail) assert.Equal(t, app.DeveloperID, retapp.DeveloperID) assert.Equal(t, app.LoginProvider, retapp.LoginProvider) assert.Equal(t, app.RedirectURI, retapp.RedirectURI) } retapp, err = appRepo.SystemRetrieveApplication(app.ClientID) assert.Nil(t, err) assert.Equal(t, app.ClientID, retapp.ClientID) retapp, err = appRepo.RetrieveApplication(app.ClientID, "huh", false) assert.NotNil(t, err) assert.Nil(t, retapp) }
func TestUpdateNoSuchApp(t *testing.T) { appRepo := NewMBDAppRepo() //Specify an app app := new(roll.Application) app.ApplicationName = "an app" app.ClientID = "123" app.DeveloperEmail = "*****@*****.**" app.DeveloperID = "foo" app.LoginProvider = "auth0" app.RedirectURI = "neither here nor there" err := appRepo.UpdateApplication(app, app.DeveloperID) assert.NotNil(t, err) }
func TestDuplicateAppCreateGeneratesError(t *testing.T) { app := new(roll.Application) app.ApplicationName = "an app" app.ClientID = "123" app.DeveloperEmail = "*****@*****.**" app.DeveloperID = "foo" app.LoginProvider = "auth0" app.RedirectURI = "neither here nor there" appRepo := NewMBDAppRepo() err := appRepo.CreateApplication(app) if assert.Nil(t, err) { defer appRepo.delete(app) } err = appRepo.CreateApplication(app) assert.NotNil(t, err) }
func TestSecretGeneratedWhenNeede(t *testing.T) { app := new(roll.Application) app.ApplicationName = "an app" app.ClientID = "123" app.DeveloperEmail = "*****@*****.**" app.DeveloperID = "foo" app.LoginProvider = "auth0" app.RedirectURI = "neither here nor there" appRepo := NewMBDAppRepo() err := appRepo.CreateApplication(app) if assert.Nil(t, err) { defer appRepo.delete(app) } retapp, err := appRepo.RetrieveAppByNameAndDevEmail("an app", "*****@*****.**") assert.Nil(t, err) assert.NotEqual(t, "", retapp.ClientSecret) }
func init() { var dev roll.Developer var app roll.Application var retrievedApp roll.Application var clientId string var reRegisterStatus int var duplicationErrorMessage string Before("@apptests", func() { testutils.URLGuard("http://localhost:3000/v1/developers") }) Given(`^a developer registered with the portal$`, func() { dev = testutils.CreateNewTestDev() resp := rollhttp.TestHTTPPutWithRollSubject(T, "http://localhost:3000/v1/developers/"+dev.Email, dev) println("resp is", resp) assert.Equal(T, http.StatusNoContent, resp.StatusCode) }) And(`^they have a new application they wish to register$`, func() { app = roll.Application{ ApplicationName: "int test app name", DeveloperEmail: dev.Email, RedirectURI: "http://localhost:3000/ab", LoginProvider: "xtrac://localhost:9000", } }) Then(`^the application should be successfully registered$`, func() { resp := rollhttp.TestHTTPPostWithRollSubject(T, "http://localhost:3000/v1/applications", app) assert.Equal(T, http.StatusOK, resp.StatusCode) var appCreatedResponse rollhttp.ApplicationCreatedResponse dec := json.NewDecoder(resp.Body) err := dec.Decode(&appCreatedResponse) assert.Nil(T, err) assert.True(T, len(appCreatedResponse.ClientID) > 0) clientId = appCreatedResponse.ClientID }) Given(`^a registered application$`, func() { retrieveAppDefinition(clientId, &retrievedApp) }) Then(`^the details associated with the application can be retrieved$`, func() { assert.Equal(T, app.ApplicationName, retrievedApp.ApplicationName) assert.Equal(T, app.DeveloperEmail, retrievedApp.DeveloperEmail) assert.Equal(T, app.RedirectURI, retrievedApp.RedirectURI) assert.Equal(T, app.LoginProvider, retrievedApp.LoginProvider) assert.Equal(T, clientId, retrievedApp.ClientID) assert.True(T, len(retrievedApp.ClientSecret) > 0) assert.Equal(T, retrievedApp.JWTFlowPublicKey, "") }) Given(`^an application has already been registered$`, func() { assert.True(T, len(clientId) > 0) }) And(`^a developer attempts to register an application with the same name$`, func() { resp := rollhttp.TestHTTPPostWithRollSubject(T, "http://localhost:3000/v1/applications", app) reRegisterStatus = resp.StatusCode defer resp.Body.Close() bodyBytes, err := ioutil.ReadAll(resp.Body) assert.Nil(T, err) duplicationErrorMessage = string(bodyBytes) }) Then(`^an error is returned with status code StatusConflict$`, func() { assert.Equal(T, http.StatusConflict, reRegisterStatus) }) And(`^the error message indicates a duplicate registration was attempted$`, func() { assert.True(T, strings.Contains(duplicationErrorMessage, "definition exists for application")) }) Given(`^a registered application to update$`, func() { assert.True(T, len(clientId) > 0) }) And(`^there are updates to make to the application defnition$`, func() { app.RedirectURI = "http://localhost:3000/son_of_callback" }) Then(`^the application can be updated$`, func() { resp := rollhttp.TestHTTPPutWithRollSubject(T, "http://localhost:3000/v1/applications/"+clientId, app) assert.Equal(T, http.StatusNoContent, resp.StatusCode) }) And(`^the updates are reflected when retrieving the application definition anew$`, func() { retrieveAppDefinition(clientId, &retrievedApp) assert.Equal(T, "http://localhost:3000/son_of_callback", retrievedApp.RedirectURI) }) }
func TestUpdateApp(t *testing.T) { appRepo := NewMBDAppRepo() //Count the apps prior to creating one apps, err := appRepo.ListApplications("foo", true) assert.Nil(t, err) adminCount := len(apps) //No apps see with a user id of not foo and not an admin apps, err = appRepo.ListApplications("not foo", false) assert.Nil(t, err) assert.Equal(t, 0, len(apps)) //Create an app app := new(roll.Application) app.ApplicationName = "an app" app.ClientID = "123" app.DeveloperEmail = "*****@*****.**" app.DeveloperID = "foo" app.LoginProvider = "auth0" app.RedirectURI = "neither here nor there" err = appRepo.CreateApplication(app) if assert.Nil(t, err) { defer appRepo.delete(app) } err = appRepo.UpdateApplication(app, "no way jose") assert.NotNil(t, err) err = appRepo.UpdateApplication(app, app.DeveloperID) assert.Nil(t, err) app.JWTFlowAudience = "aud" app.JWTFlowIssuer = "iss" app.JWTFlowPublicKey = "key to the city" appRepo.UpdateApplication(app, app.DeveloperID) retapp, err := appRepo.SystemRetrieveApplicationByJWTFlowAudience("aud") assert.Nil(t, err) if assert.NotNil(t, app) { assert.Equal(t, app.ApplicationName, retapp.ApplicationName) assert.Equal(t, app.ClientID, retapp.ClientID) assert.Equal(t, app.ClientSecret, retapp.ClientSecret) assert.Equal(t, app.DeveloperEmail, retapp.DeveloperEmail) assert.Equal(t, app.DeveloperID, retapp.DeveloperID) assert.Equal(t, app.LoginProvider, retapp.LoginProvider) assert.Equal(t, app.RedirectURI, retapp.RedirectURI) assert.Equal(t, app.JWTFlowAudience, retapp.JWTFlowAudience) assert.Equal(t, app.JWTFlowIssuer, retapp.JWTFlowIssuer) assert.Equal(t, app.JWTFlowPublicKey, retapp.JWTFlowPublicKey) } //Admin user should see an additional app in the list apps, err = appRepo.ListApplications("foo", true) assert.Nil(t, err) assert.Equal(t, adminCount+1, len(apps)) //User adding the app should see a list with 1 entry apps, err = appRepo.ListApplications("foo", false) assert.Nil(t, err) assert.Equal(t, 1, len(apps)) }