Skip to content

Commit

Permalink
api: update handler to handle the owner parameter
Browse files Browse the repository at this point in the history
Related to #698.
  • Loading branch information
Francisco Souza committed Aug 1, 2014
1 parent b220f4e commit d0d8392
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 41 deletions.
8 changes: 6 additions & 2 deletions api/service_consumption.go
Expand Up @@ -38,8 +38,12 @@ func createServiceInstance(w http.ResponseWriter, r *http.Request, t auth.Token)
if err != nil {
return &errors.HTTP{Code: http.StatusNotFound, Message: err.Error()}
}
planName := body["plan"]
return service.CreateServiceInstance(body["name"], &srv, planName, user)
instance := service.ServiceInstance{
Name: body["name"],
PlanName: body["plan"],
TeamOwner: body["owner"],
}
return service.CreateServiceInstance(instance, &srv, user)
}

func removeServiceInstance(w http.ResponseWriter, r *http.Request, t auth.Token) error {
Expand Down
97 changes: 58 additions & 39 deletions api/service_consumption_test.go
Expand Up @@ -37,7 +37,14 @@ func (s *ConsumptionSuite) SetUpSuite(c *gocheck.C) {
config.Set("auth:hash-cost", 4)
s.conn, err = db.Conn()
c.Assert(err, gocheck.IsNil)
s.createUserAndTeam(c)
s.user = &auth.User{Email: "whydidifall@thewho.com", Password: "123456"}
_, err = nativeScheme.Create(s.user)
c.Assert(err, gocheck.IsNil)
s.team = &auth.Team{Name: "tsuruteam", Users: []string{s.user.Email}}
err = s.conn.Teams().Insert(s.team)
c.Assert(err, gocheck.IsNil)
s.token, err = nativeScheme.Login(map[string]string{"email": s.user.Email, "password": "123456"})
c.Assert(err, gocheck.IsNil)
}

func (s *ConsumptionSuite) TearDownSuite(c *gocheck.C) {
Expand All @@ -51,20 +58,11 @@ func (s *ConsumptionSuite) TearDownTest(c *gocheck.C) {
c.Assert(err, gocheck.IsNil)
}

func (s *ConsumptionSuite) createUserAndTeam(c *gocheck.C) {
s.user = &auth.User{Email: "whydidifall@thewho.com", Password: "123456"}
_, err := nativeScheme.Create(s.user)
c.Assert(err, gocheck.IsNil)
s.team = &auth.Team{Name: "tsuruteam", Users: []string{s.user.Email}}
err = s.conn.Teams().Insert(s.team)
c.Assert(err, gocheck.IsNil)
s.token, err = nativeScheme.Login(map[string]string{"email": s.user.Email, "password": "123456"})
func makeRequestToCreateInstanceHandler(params map[string]string, c *gocheck.C) (*httptest.ResponseRecorder, *http.Request) {
var buf bytes.Buffer
err := json.NewEncoder(&buf).Encode(params)
c.Assert(err, gocheck.IsNil)
}

func makeRequestToCreateInstanceHandler(c *gocheck.C) (*httptest.ResponseRecorder, *http.Request) {
b := bytes.NewBufferString(`{"name":"brainSQL","service_name":"mysql"}`)
request, err := http.NewRequest("POST", "/services/instances", b)
request, err := http.NewRequest("POST", "/services/instances", &buf)
c.Assert(err, gocheck.IsNil)
request.Header.Set("Content-Type", "application/json")
recorder := httptest.NewRecorder()
Expand All @@ -83,13 +81,15 @@ func (s *ConsumptionSuite) TestCreateInstanceWithPlan(c *gocheck.C) {
}
se.Create()
defer s.conn.Services().Remove(bson.M{"_id": se.Name})
data := `{"name":"brainSQL","service_name":"mysql","plan":"small"}`
b := bytes.NewBufferString(data)
request, err := http.NewRequest("POST", "/services/instances", b)
c.Assert(err, gocheck.IsNil)
params := map[string]string{
"name": "brainSQL",
"service_name": "mysql",
"plan": "small",
"owner": s.team.Name,
}
recorder, request := makeRequestToCreateInstanceHandler(params, c)
request.Header.Set("Content-Type", "application/json")
recorder := httptest.NewRecorder()
err = createServiceInstance(recorder, request, s.token)
err := createServiceInstance(recorder, request, s.token)
c.Assert(err, gocheck.IsNil)
var si service.ServiceInstance
err = s.conn.ServiceInstances().Find(bson.M{
Expand All @@ -101,12 +101,6 @@ func (s *ConsumptionSuite) TestCreateInstanceWithPlan(c *gocheck.C) {
s.conn.ServiceInstances().Update(bson.M{"name": si.Name}, si)
c.Assert(si.Name, gocheck.Equals, "brainSQL")
c.Assert(si.ServiceName, gocheck.Equals, "mysql")
action := testing.Action{
Action: "create-service-instance",
User: s.user.Email,
Extra: []interface{}{data},
}
c.Assert(action, testing.IsRecorded)
}

func (s *ConsumptionSuite) TestCreateInstanceHandlerSavesServiceInstanceInDb(c *gocheck.C) {
Expand All @@ -121,7 +115,12 @@ func (s *ConsumptionSuite) TestCreateInstanceHandlerSavesServiceInstanceInDb(c *
}
se.Create()
defer s.conn.Services().Remove(bson.M{"_id": se.Name})
recorder, request := makeRequestToCreateInstanceHandler(c)
params := map[string]string{
"name": "brainSQL",
"service_name": "mysql",
"owner": s.team.Name,
}
recorder, request := makeRequestToCreateInstanceHandler(params, c)
err := createServiceInstance(recorder, request, s.token)
c.Assert(err, gocheck.IsNil)
var si service.ServiceInstance
Expand All @@ -130,12 +129,7 @@ func (s *ConsumptionSuite) TestCreateInstanceHandlerSavesServiceInstanceInDb(c *
s.conn.ServiceInstances().Update(bson.M{"name": si.Name}, si)
c.Assert(si.Name, gocheck.Equals, "brainSQL")
c.Assert(si.ServiceName, gocheck.Equals, "mysql")
action := testing.Action{
Action: "create-service-instance",
User: s.user.Email,
Extra: []interface{}{`{"name":"brainSQL","service_name":"mysql"}`},
}
c.Assert(action, testing.IsRecorded)
c.Assert(si.TeamOwner, gocheck.Equals, s.team.Name)
}

func (s *ConsumptionSuite) TestCreateInstanceHandlerSavesAllTeamsThatTheGivenUserIsMemberAndHasAccessToTheServiceInTheInstance(c *gocheck.C) {
Expand All @@ -149,7 +143,12 @@ func (s *ConsumptionSuite) TestCreateInstanceHandlerSavesAllTeamsThatTheGivenUse
srv := service.Service{Name: "mysql", Teams: []string{s.team.Name}, IsRestricted: true, Endpoint: map[string]string{"production": ts.URL}}
err = srv.Create()
c.Assert(err, gocheck.IsNil)
recorder, request := makeRequestToCreateInstanceHandler(c)
params := map[string]string{
"name": "brainSQL",
"service_name": "mysql",
"owner": s.team.Name,
}
recorder, request := makeRequestToCreateInstanceHandler(params, c)
err = createServiceInstance(recorder, request, s.token)
c.Assert(err, gocheck.IsNil)
var si service.ServiceInstance
Expand All @@ -162,7 +161,12 @@ func (s *ConsumptionSuite) TestCreateInstanceHandlerSavesAllTeamsThatTheGivenUse
func (s *ConsumptionSuite) TestCreateInstanceHandlerReturnsErrorWhenUserCannotUseService(c *gocheck.C) {
service := service.Service{Name: "mysql", IsRestricted: true}
service.Create()
recorder, request := makeRequestToCreateInstanceHandler(c)
params := map[string]string{
"name": "brainSQL",
"service_name": "mysql",
"owner": s.team.Name,
}
recorder, request := makeRequestToCreateInstanceHandler(params, c)
err := createServiceInstance(recorder, request, s.token)
c.Assert(err, gocheck.ErrorMatches, "^This user does not have access to this service$")
}
Expand All @@ -176,7 +180,12 @@ func (s *ConsumptionSuite) TestCreateInstanceHandlerIgnoresTeamAuthIfServiceIsNo
err := srvc.Create()
c.Assert(err, gocheck.IsNil)
defer s.conn.Services().Remove(bson.M{"_id": "mysql"})
recorder, request := makeRequestToCreateInstanceHandler(c)
params := map[string]string{
"name": "brainSQL",
"service_name": "mysql",
"owner": s.team.Name,
}
recorder, request := makeRequestToCreateInstanceHandler(params, c)
err = createServiceInstance(recorder, request, s.token)
c.Assert(err, gocheck.IsNil)
var si service.ServiceInstance
Expand All @@ -187,7 +196,12 @@ func (s *ConsumptionSuite) TestCreateInstanceHandlerIgnoresTeamAuthIfServiceIsNo
}

func (s *ConsumptionSuite) TestCreateInstanceHandlerReturnsErrorWhenServiceDoesntExists(c *gocheck.C) {
recorder, request := makeRequestToCreateInstanceHandler(c)
params := map[string]string{
"name": "brainSQL",
"service_name": "mysql",
"owner": s.team.Name,
}
recorder, request := makeRequestToCreateInstanceHandler(params, c)
err := createServiceInstance(recorder, request, s.token)
c.Assert(err.Error(), gocheck.Equals, "Service not found")
}
Expand All @@ -201,7 +215,12 @@ func (s *ConsumptionSuite) TestCreateInstanceHandlerReturnErrorIfTheServiceAPICa
err := srvc.Create()
c.Assert(err, gocheck.IsNil)
defer s.conn.Services().Remove(bson.M{"_id": "mysql"})
recorder, request := makeRequestToCreateInstanceHandler(c)
params := map[string]string{
"name": "brainSQL",
"service_name": "mysql",
"owner": s.team.Name,
}
recorder, request := makeRequestToCreateInstanceHandler(params, c)
err = createServiceInstance(recorder, request, s.token)
c.Assert(err, gocheck.NotNil)
}
Expand Down Expand Up @@ -439,7 +458,7 @@ func (s *ConsumptionSuite) TestServiceInstanceStatusHandler(c *gocheck.C) {
func (s *ConsumptionSuite) TestServiceInstanceStatusHandlerShouldReturnErrorWhenServiceInstanceNotExists(c *gocheck.C) {
recorder, request := makeRequestToStatusHandler("inexistent-instance", c)
err := serviceInstanceStatus(recorder, request, s.token)
c.Assert(err, gocheck.ErrorMatches, "^Service instance not found$")
c.Assert(err, gocheck.ErrorMatches, "^service instance not found$")
}

func (s *ConsumptionSuite) TestServiceInstanceStatusHandlerShouldReturnForbiddenWhenUserDontHaveAccess(c *gocheck.C) {
Expand Down

0 comments on commit d0d8392

Please sign in to comment.