func (s *S) TestServicesHandlerShoudGetAllServicesFromUsersTeam(c *C) { srv := service.Service{Name: "mongodb", OwnerTeams: []string{s.team.Name}} srv.Create() defer db.Session.Services().Remove(bson.M{"_id": srv.Name}) si := service.ServiceInstance{Name: "my_nosql", ServiceName: srv.Name, Teams: []string{s.team.Name}} si.Create() defer si.Delete() recorder, request := s.makeRequestToServicesHandler(c) err := ServicesHandler(recorder, request, s.user) c.Assert(err, IsNil) b, err := ioutil.ReadAll(recorder.Body) c.Assert(err, IsNil) services := make([]service.ServiceModel, 1) err = json.Unmarshal(b, &services) expected := []service.ServiceModel{ {Service: "mongodb", Instances: []string{"my_nosql"}}, } c.Assert(services, DeepEquals, expected) }
func (s *S) TestDeleteHandlerReturns403WhenTheServiceHasInstance(c *C) { se := service.Service{Name: "mysql", OwnerTeams: []string{s.team.Name}} err := se.Create() c.Assert(err, IsNil) defer db.Session.Services().Remove(bson.M{"_id": se.Name}) instance := service.ServiceInstance{Name: "my-mysql", ServiceName: se.Name} err = instance.Create() c.Assert(err, IsNil) defer instance.Delete() request, err := http.NewRequest("DELETE", fmt.Sprintf("/services/%s?:name=%s", se.Name, se.Name), nil) c.Assert(err, IsNil) recorder := httptest.NewRecorder() err = DeleteHandler(recorder, request, s.user) c.Assert(err, NotNil) e, ok := err.(*errors.Http) c.Assert(ok, Equals, true) c.Assert(e.Code, Equals, http.StatusForbidden) c.Assert(e, ErrorMatches, "^This service cannot be removed because it has instances.\nPlease remove these instances before removing the service.$") }
func (s *S) TestServiceInstanceStatusHandler(c *C) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNoContent) w.Write([]byte(`Service instance "my_nosql" is up`)) })) defer ts.Close() srv := service.Service{Name: "mongodb", OwnerTeams: []string{s.team.Name}, Endpoint: map[string]string{"production": ts.URL}} err := srv.Create() c.Assert(err, IsNil) defer srv.Delete() si := service.ServiceInstance{Name: "my_nosql", ServiceName: srv.Name} err = si.Create() c.Assert(err, IsNil) defer si.Delete() recorder, request := makeRequestToStatusHandler("my_nosql", c) err = ServiceInstanceStatusHandler(recorder, request, s.user) c.Assert(err, IsNil) b, err := ioutil.ReadAll(recorder.Body) c.Assert(string(b), Equals, "Service instance \"my_nosql\" is up") }
func (s *S) TestServiceInfoHandlerShouldReturnOnlyInstancesOfTheSameTeamOfTheUser(c *C) { srv := service.Service{Name: "mongodb", Teams: []string{s.team.Name}} err := srv.Create() c.Assert(err, IsNil) defer srv.Delete() si1 := service.ServiceInstance{ Name: "my_nosql", ServiceName: srv.Name, Apps: []string{}, Teams: []string{s.team.Name}, } err = si1.Create() c.Assert(err, IsNil) defer si1.Delete() si2 := service.ServiceInstance{ Name: "your_nosql", ServiceName: srv.Name, Apps: []string{"wordpress"}, Teams: []string{}, } err = si2.Create() c.Assert(err, IsNil) defer si2.Delete() request, err := http.NewRequest("GET", fmt.Sprintf("/services/%s?:name=%s", "mongodb", "mongodb"), nil) c.Assert(err, IsNil) recorder := httptest.NewRecorder() err = ServiceInfoHandler(recorder, request, s.user) c.Assert(err, IsNil) body, err := ioutil.ReadAll(recorder.Body) c.Assert(err, IsNil) var instances []service.ServiceInstance err = json.Unmarshal(body, &instances) c.Assert(err, IsNil) expected := []service.ServiceInstance{si1} c.Assert(instances, DeepEquals, expected) }