mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-05 03:40:01 -06:00
Fix naming of school membership endpoints
It's /education/school/{id}/users not members
This commit is contained in:
committed by
Ralf Haferkamp
parent
336f128e71
commit
5095b35822
@@ -42,12 +42,12 @@ type EducationBackend interface {
|
||||
GetEducationSchool(ctx context.Context, nameOrID string, queryParam url.Values) (*libregraph.EducationSchool, error)
|
||||
// GetEducationSchools lists all schools
|
||||
GetEducationSchools(ctx context.Context, queryParam url.Values) ([]*libregraph.EducationSchool, error)
|
||||
// GetEducationSchoolMembers lists all members of a school
|
||||
GetEducationSchoolMembers(ctx context.Context, id string) ([]*libregraph.EducationUser, error)
|
||||
// AddMembersToEducationSchool adds new members (reference by a slice of IDs) to supplied school in the identity backend.
|
||||
AddMembersToEducationSchool(ctx context.Context, schoolID string, memberID []string) error
|
||||
// RemoveMemberFromEducationSchool removes a single member (by ID) from a school
|
||||
RemoveMemberFromEducationSchool(ctx context.Context, schoolID string, memberID string) error
|
||||
// GetEducationSchoolUsers lists all members of a school
|
||||
GetEducationSchoolUsers(ctx context.Context, id string) ([]*libregraph.EducationUser, error)
|
||||
// AddUsersToEducationSchool adds new members (reference by a slice of IDs) to supplied school in the identity backend.
|
||||
AddUsersToEducationSchool(ctx context.Context, schoolID string, memberID []string) error
|
||||
// RemoveUserFromEducationSchool removes a single member (by ID) from a school
|
||||
RemoveUserFromEducationSchool(ctx context.Context, schoolID string, memberID string) error
|
||||
|
||||
// CreateEducationUser creates a given education user in the identity backend.
|
||||
CreateEducationUser(ctx context.Context, user libregraph.EducationUser) (*libregraph.EducationUser, error)
|
||||
|
||||
@@ -30,18 +30,18 @@ func (i *ErrEducationBackend) GetEducationSchools(ctx context.Context, queryPara
|
||||
return nil, errNotImplemented
|
||||
}
|
||||
|
||||
// GetEducationSchoolMembers implements the EducationBackend interface for the ErrEducationBackend backend.
|
||||
func (i *ErrEducationBackend) GetEducationSchoolMembers(ctx context.Context, id string) ([]*libregraph.EducationUser, error) {
|
||||
// GetEducationSchoolUsers implements the EducationBackend interface for the ErrEducationBackend backend.
|
||||
func (i *ErrEducationBackend) GetEducationSchoolUsers(ctx context.Context, id string) ([]*libregraph.EducationUser, error) {
|
||||
return nil, errNotImplemented
|
||||
}
|
||||
|
||||
// AddMembersToEducationSchool adds new members (reference by a slice of IDs) to supplied school in the identity backend.
|
||||
func (i *ErrEducationBackend) AddMembersToEducationSchool(ctx context.Context, schoolID string, memberID []string) error {
|
||||
// AddUsersToEducationSchool adds new members (reference by a slice of IDs) to supplied school in the identity backend.
|
||||
func (i *ErrEducationBackend) AddUsersToEducationSchool(ctx context.Context, schoolID string, memberID []string) error {
|
||||
return errNotImplemented
|
||||
}
|
||||
|
||||
// RemoveMemberFromEducationSchool removes a single member (by ID) from a school
|
||||
func (i *ErrEducationBackend) RemoveMemberFromEducationSchool(ctx context.Context, schoolID string, memberID string) error {
|
||||
// RemoveUserFromEducationSchool removes a single member (by ID) from a school
|
||||
func (i *ErrEducationBackend) RemoveUserFromEducationSchool(ctx context.Context, schoolID string, memberID string) error {
|
||||
return errNotImplemented
|
||||
}
|
||||
|
||||
|
||||
@@ -206,15 +206,15 @@ func (i *LDAP) GetEducationSchools(ctx context.Context, queryParam url.Values) (
|
||||
return schools, nil
|
||||
}
|
||||
|
||||
// GetEducationSchoolMembers implements the EducationBackend interface for the LDAP backend.
|
||||
func (i *LDAP) GetEducationSchoolMembers(ctx context.Context, id string) ([]*libregraph.EducationUser, error) {
|
||||
// GetEducationSchoolUsers implements the EducationBackend interface for the LDAP backend.
|
||||
func (i *LDAP) GetEducationSchoolUsers(ctx context.Context, id string) ([]*libregraph.EducationUser, error) {
|
||||
return nil, errNotImplemented
|
||||
}
|
||||
|
||||
// AddMembersToEducationSchool adds new members (reference by a slice of IDs) to supplied school in the identity backend.
|
||||
func (i *LDAP) AddMembersToEducationSchool(ctx context.Context, schoolID string, memberIDs []string) error {
|
||||
// AddUsersToEducationSchool adds new members (reference by a slice of IDs) to supplied school in the identity backend.
|
||||
func (i *LDAP) AddUsersToEducationSchool(ctx context.Context, schoolID string, memberIDs []string) error {
|
||||
logger := i.logger.SubloggerWithRequestID(ctx)
|
||||
logger.Debug().Str("backend", "ldap").Msg("AddMembersToEducationSchool")
|
||||
logger.Debug().Str("backend", "ldap").Msg("AddUsersToEducationSchool")
|
||||
|
||||
schoolEntry, err := i.getSchoolByID(schoolID)
|
||||
if err != nil {
|
||||
|
||||
@@ -17,8 +17,8 @@ type EducationBackend struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// AddMembersToEducationSchool provides a mock function with given fields: ctx, schoolID, memberID
|
||||
func (_m *EducationBackend) AddMembersToEducationSchool(ctx context.Context, schoolID string, memberID []string) error {
|
||||
// AddUsersToEducationSchool provides a mock function with given fields: ctx, schoolID, memberID
|
||||
func (_m *EducationBackend) AddUsersToEducationSchool(ctx context.Context, schoolID string, memberID []string) error {
|
||||
ret := _m.Called(ctx, schoolID, memberID)
|
||||
|
||||
var r0 error
|
||||
@@ -128,8 +128,8 @@ func (_m *EducationBackend) GetEducationSchool(ctx context.Context, nameOrID str
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetEducationSchoolMembers provides a mock function with given fields: ctx, id
|
||||
func (_m *EducationBackend) GetEducationSchoolMembers(ctx context.Context, id string) ([]*libregraph.EducationUser, error) {
|
||||
// GetEducationSchoolUsers provides a mock function with given fields: ctx, id
|
||||
func (_m *EducationBackend) GetEducationSchoolUsers(ctx context.Context, id string) ([]*libregraph.EducationUser, error) {
|
||||
ret := _m.Called(ctx, id)
|
||||
|
||||
var r0 []*libregraph.EducationUser
|
||||
@@ -220,8 +220,8 @@ func (_m *EducationBackend) GetEducationUsers(ctx context.Context, queryParam ur
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// RemoveMemberFromEducationSchool provides a mock function with given fields: ctx, schoolID, memberID
|
||||
func (_m *EducationBackend) RemoveMemberFromEducationSchool(ctx context.Context, schoolID string, memberID string) error {
|
||||
// RemoveUserFromEducationSchool provides a mock function with given fields: ctx, schoolID, memberID
|
||||
func (_m *EducationBackend) RemoveUserFromEducationSchool(ctx context.Context, schoolID string, memberID string) error {
|
||||
ret := _m.Called(ctx, schoolID, memberID)
|
||||
|
||||
var r0 error
|
||||
|
||||
@@ -221,28 +221,28 @@ func (g Graph) DeleteEducationSchool(w http.ResponseWriter, r *http.Request) {
|
||||
render.NoContent(w, r)
|
||||
}
|
||||
|
||||
// GetEducationSchoolMembers implements the Service interface.
|
||||
func (g Graph) GetEducationSchoolMembers(w http.ResponseWriter, r *http.Request) {
|
||||
// GetEducationSchoolUsers implements the Service interface.
|
||||
func (g Graph) GetEducationSchoolUsers(w http.ResponseWriter, r *http.Request) {
|
||||
logger := g.logger.SubloggerWithRequestID(r.Context())
|
||||
logger.Info().Msg("calling get school members")
|
||||
logger.Info().Msg("calling get school users")
|
||||
schoolID := chi.URLParam(r, "schoolID")
|
||||
schoolID, err := url.PathUnescape(schoolID)
|
||||
if err != nil {
|
||||
logger.Debug().Str("id", schoolID).Msg("could not get school members: unescaping school id failed")
|
||||
logger.Debug().Str("id", schoolID).Msg("could not get school users: unescaping school id failed")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "unescaping school id failed")
|
||||
return
|
||||
}
|
||||
|
||||
if schoolID == "" {
|
||||
logger.Debug().Msg("could not get school members: missing school id")
|
||||
logger.Debug().Msg("could not get school users: missing school id")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "missing school id")
|
||||
return
|
||||
}
|
||||
|
||||
logger.Debug().Str("id", schoolID).Msg("calling get school members on backend")
|
||||
members, err := g.identityEducationBackend.GetEducationSchoolMembers(r.Context(), schoolID)
|
||||
logger.Debug().Str("id", schoolID).Msg("calling get school users on backend")
|
||||
users, err := g.identityEducationBackend.GetEducationSchoolUsers(r.Context(), schoolID)
|
||||
if err != nil {
|
||||
logger.Debug().Err(err).Msg("could not get school members: backend error")
|
||||
logger.Debug().Err(err).Msg("could not get school users: backend error")
|
||||
var errcode errorcode.Error
|
||||
if errors.As(err, &errcode) {
|
||||
errcode.Render(w, r)
|
||||
@@ -253,13 +253,13 @@ func (g Graph) GetEducationSchoolMembers(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
render.Status(r, http.StatusOK)
|
||||
render.JSON(w, r, members)
|
||||
render.JSON(w, r, users)
|
||||
}
|
||||
|
||||
// PostEducationSchoolMember implements the Service interface.
|
||||
func (g Graph) PostEducationSchoolMember(w http.ResponseWriter, r *http.Request) {
|
||||
// PostEducationSchoolUser implements the Service interface.
|
||||
func (g Graph) PostEducationSchoolUser(w http.ResponseWriter, r *http.Request) {
|
||||
logger := g.logger.SubloggerWithRequestID(r.Context())
|
||||
logger.Info().Msg("Calling post school member")
|
||||
logger.Info().Msg("Calling post school user")
|
||||
|
||||
schoolID := chi.URLParam(r, "schoolID")
|
||||
schoolID, err := url.PathUnescape(schoolID)
|
||||
@@ -267,13 +267,13 @@ func (g Graph) PostEducationSchoolMember(w http.ResponseWriter, r *http.Request)
|
||||
logger.Debug().
|
||||
Err(err).
|
||||
Str("id", schoolID).
|
||||
Msg("could not add member to school: unescaping school id failed")
|
||||
Msg("could not add user to school: unescaping school id failed")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "unescaping school id failed")
|
||||
return
|
||||
}
|
||||
|
||||
if schoolID == "" {
|
||||
logger.Debug().Msg("could not add school member: missing school id")
|
||||
logger.Debug().Msg("could not add school user: missing school id")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "missing school id")
|
||||
return
|
||||
}
|
||||
@@ -283,35 +283,35 @@ func (g Graph) PostEducationSchoolMember(w http.ResponseWriter, r *http.Request)
|
||||
logger.Debug().
|
||||
Err(err).
|
||||
Interface("body", r.Body).
|
||||
Msg("could not add school member: invalid request body")
|
||||
Msg("could not add school user: invalid request body")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, fmt.Sprintf("invalid request body: %s", err.Error()))
|
||||
return
|
||||
}
|
||||
memberRefURL, ok := memberRef.GetOdataIdOk()
|
||||
if !ok {
|
||||
logger.Debug().Msg("could not add school member: @odata.id reference is missing")
|
||||
logger.Debug().Msg("could not add school user: @odata.id reference is missing")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "@odata.id reference is missing")
|
||||
return
|
||||
}
|
||||
memberType, id, err := g.parseMemberRef(*memberRefURL)
|
||||
if err != nil {
|
||||
logger.Debug().Err(err).Msg("could not add school member: error parsing @odata.id url")
|
||||
logger.Debug().Err(err).Msg("could not add school user: error parsing @odata.id url")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "Error parsing @odata.id url")
|
||||
return
|
||||
}
|
||||
// The MS Graph spec allows "directoryObject", "user", "school" and "organizational Contact"
|
||||
// we restrict this to users for now. Might add Schools as members later
|
||||
if memberType != "users" {
|
||||
logger.Debug().Str("type", memberType).Msg("could not add school member: Only users are allowed as school members")
|
||||
logger.Debug().Str("type", memberType).Msg("could not add school user: Only users are allowed as school members")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "Only users are allowed as school members")
|
||||
return
|
||||
}
|
||||
|
||||
logger.Debug().Str("memberType", memberType).Str("id", id).Msg("calling add member on backend")
|
||||
err = g.identityEducationBackend.AddMembersToEducationSchool(r.Context(), schoolID, []string{id})
|
||||
logger.Debug().Str("memberType", memberType).Str("id", id).Msg("calling add user on backend")
|
||||
err = g.identityEducationBackend.AddUsersToEducationSchool(r.Context(), schoolID, []string{id})
|
||||
|
||||
if err != nil {
|
||||
logger.Debug().Err(err).Msg("could not add school member: backend error")
|
||||
logger.Debug().Err(err).Msg("could not add school user: backend error")
|
||||
var errcode errorcode.Error
|
||||
if errors.As(err, &errcode) {
|
||||
errcode.Render(w, r)
|
||||
@@ -333,8 +333,8 @@ func (g Graph) PostEducationSchoolMember(w http.ResponseWriter, r *http.Request)
|
||||
render.NoContent(w, r)
|
||||
}
|
||||
|
||||
// DeleteEducationSchoolMember implements the Service interface.
|
||||
func (g Graph) DeleteEducationSchoolMember(w http.ResponseWriter, r *http.Request) {
|
||||
// DeleteEducationSchoolUser implements the Service interface.
|
||||
func (g Graph) DeleteEducationSchoolUser(w http.ResponseWriter, r *http.Request) {
|
||||
logger := g.logger.SubloggerWithRequestID(r.Context())
|
||||
logger.Info().Msg("calling delete school member")
|
||||
|
||||
@@ -352,21 +352,21 @@ func (g Graph) DeleteEducationSchoolMember(w http.ResponseWriter, r *http.Reques
|
||||
return
|
||||
}
|
||||
|
||||
memberID := chi.URLParam(r, "memberID")
|
||||
memberID, err = url.PathUnescape(memberID)
|
||||
userID := chi.URLParam(r, "userID")
|
||||
userID, err = url.PathUnescape(userID)
|
||||
if err != nil {
|
||||
logger.Debug().Err(err).Str("id", memberID).Msg("could not delete school member: unescaping member id failed")
|
||||
logger.Debug().Err(err).Str("id", userID).Msg("could not delete school member: unescaping member id failed")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "unescaping member id failed")
|
||||
return
|
||||
}
|
||||
|
||||
if memberID == "" {
|
||||
if userID == "" {
|
||||
logger.Debug().Msg("could not delete school member: missing member id")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "missing member id")
|
||||
return
|
||||
}
|
||||
logger.Debug().Str("schoolID", schoolID).Str("memberID", memberID).Msg("calling delete member on backend")
|
||||
err = g.identityEducationBackend.RemoveMemberFromEducationSchool(r.Context(), schoolID, memberID)
|
||||
logger.Debug().Str("schoolID", schoolID).Str("userID", userID).Msg("calling delete member on backend")
|
||||
err = g.identityEducationBackend.RemoveUserFromEducationSchool(r.Context(), schoolID, userID)
|
||||
|
||||
if err != nil {
|
||||
logger.Debug().Err(err).Msg("could not delete school member: backend error")
|
||||
@@ -380,7 +380,7 @@ func (g Graph) DeleteEducationSchoolMember(w http.ResponseWriter, r *http.Reques
|
||||
}
|
||||
|
||||
/* TODO requires reva changes
|
||||
e := events.SchoolMemberRemoved{SchoolID: schoolID, UserID: memberID}
|
||||
e := events.SchoolMemberRemoved{SchoolID: schoolID, UserID: userID}
|
||||
if currentUser, ok := ctxpkg.ContextGetUser(r.Context()); ok {
|
||||
e.Executant = currentUser.GetId()
|
||||
}
|
||||
|
||||
@@ -347,17 +347,17 @@ var _ = Describe("Schools", func() {
|
||||
})
|
||||
})
|
||||
|
||||
Describe("GetEducationSchoolMembers", func() {
|
||||
Describe("GetEducationSchoolUsers", func() {
|
||||
It("gets the list of members", func() {
|
||||
user := libregraph.NewEducationUser()
|
||||
user.SetId("user")
|
||||
identityEducationBackend.On("GetEducationSchoolMembers", mock.Anything, mock.Anything, mock.Anything).Return([]*libregraph.EducationUser{user}, nil)
|
||||
identityEducationBackend.On("GetEducationSchoolUsers", mock.Anything, mock.Anything, mock.Anything).Return([]*libregraph.EducationUser{user}, nil)
|
||||
|
||||
r := httptest.NewRequest(http.MethodGet, "/graph/v1.0/education/schools/{schoolID}/members", nil)
|
||||
r := httptest.NewRequest(http.MethodGet, "/graph/v1.0/education/schools/{schoolID}/users", nil)
|
||||
rctx := chi.NewRouteContext()
|
||||
rctx.URLParams.Add("schoolID", *newSchool.Id)
|
||||
r = r.WithContext(context.WithValue(ctxpkg.ContextSetUser(ctx, currentUser), chi.RouteCtxKey, rctx))
|
||||
svc.GetEducationSchoolMembers(rr, r)
|
||||
svc.GetEducationSchoolUsers(rr, r)
|
||||
Expect(rr.Code).To(Equal(http.StatusOK))
|
||||
|
||||
data, err := io.ReadAll(rr.Body)
|
||||
@@ -372,13 +372,13 @@ var _ = Describe("Schools", func() {
|
||||
})
|
||||
})
|
||||
|
||||
Describe("PostEducationSchoolMembers", func() {
|
||||
Describe("PostEducationSchoolUsers", func() {
|
||||
It("fails on invalid body", func() {
|
||||
r := httptest.NewRequest(http.MethodPost, "/graph/v1.0/education/schools/{schoolID}/members", bytes.NewBufferString("{invalid"))
|
||||
rctx := chi.NewRouteContext()
|
||||
rctx.URLParams.Add("schoolID", *newSchool.Id)
|
||||
r = r.WithContext(context.WithValue(ctxpkg.ContextSetUser(ctx, currentUser), chi.RouteCtxKey, rctx))
|
||||
svc.PostEducationSchoolMember(rr, r)
|
||||
svc.PostEducationSchoolUser(rr, r)
|
||||
Expect(rr.Code).To(Equal(http.StatusBadRequest))
|
||||
})
|
||||
|
||||
@@ -391,7 +391,7 @@ var _ = Describe("Schools", func() {
|
||||
rctx := chi.NewRouteContext()
|
||||
rctx.URLParams.Add("schoolID", *newSchool.Id)
|
||||
r = r.WithContext(context.WithValue(ctxpkg.ContextSetUser(ctx, currentUser), chi.RouteCtxKey, rctx))
|
||||
svc.PostEducationSchoolMember(rr, r)
|
||||
svc.PostEducationSchoolUser(rr, r)
|
||||
Expect(rr.Code).To(Equal(http.StatusBadRequest))
|
||||
})
|
||||
|
||||
@@ -405,7 +405,7 @@ var _ = Describe("Schools", func() {
|
||||
rctx := chi.NewRouteContext()
|
||||
rctx.URLParams.Add("schoolID", *newSchool.Id)
|
||||
r = r.WithContext(context.WithValue(ctxpkg.ContextSetUser(ctx, currentUser), chi.RouteCtxKey, rctx))
|
||||
svc.PostEducationSchoolMember(rr, r)
|
||||
svc.PostEducationSchoolUser(rr, r)
|
||||
Expect(rr.Code).To(Equal(http.StatusBadRequest))
|
||||
})
|
||||
|
||||
@@ -414,49 +414,49 @@ var _ = Describe("Schools", func() {
|
||||
member.SetOdataId("/users/user")
|
||||
data, err := json.Marshal(member)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
identityEducationBackend.On("AddMembersToEducationSchool", mock.Anything, mock.Anything, mock.Anything).Return(nil)
|
||||
identityEducationBackend.On("AddUsersToEducationSchool", mock.Anything, mock.Anything, mock.Anything).Return(nil)
|
||||
|
||||
r := httptest.NewRequest(http.MethodPost, "/graph/v1.0/education/schools/{schoolID}/members", bytes.NewBuffer(data))
|
||||
rctx := chi.NewRouteContext()
|
||||
rctx.URLParams.Add("schoolID", *newSchool.Id)
|
||||
r = r.WithContext(context.WithValue(ctxpkg.ContextSetUser(ctx, currentUser), chi.RouteCtxKey, rctx))
|
||||
svc.PostEducationSchoolMember(rr, r)
|
||||
svc.PostEducationSchoolUser(rr, r)
|
||||
Expect(rr.Code).To(Equal(http.StatusNoContent))
|
||||
|
||||
identityEducationBackend.AssertNumberOfCalls(GinkgoT(), "AddMembersToEducationSchool", 1)
|
||||
identityEducationBackend.AssertNumberOfCalls(GinkgoT(), "AddUsersToEducationSchool", 1)
|
||||
})
|
||||
})
|
||||
|
||||
Describe("DeleteEducationSchoolMembers", func() {
|
||||
Describe("DeleteEducationSchoolUsers", func() {
|
||||
It("handles missing or empty member id", func() {
|
||||
r := httptest.NewRequest(http.MethodDelete, "/graph/v1.0/education/schools/{schoolID}/members/{memberID}/$ref", nil)
|
||||
r := httptest.NewRequest(http.MethodDelete, "/graph/v1.0/education/schools/{schoolID}/members/{userID}/$ref", nil)
|
||||
rctx := chi.NewRouteContext()
|
||||
rctx.URLParams.Add("schoolID", *newSchool.Id)
|
||||
r = r.WithContext(context.WithValue(ctxpkg.ContextSetUser(ctx, currentUser), chi.RouteCtxKey, rctx))
|
||||
svc.DeleteEducationSchoolMember(rr, r)
|
||||
svc.DeleteEducationSchoolUser(rr, r)
|
||||
Expect(rr.Code).To(Equal(http.StatusBadRequest))
|
||||
})
|
||||
It("handles missing or empty member id", func() {
|
||||
r := httptest.NewRequest(http.MethodDelete, "/graph/v1.0/education/schools/{schoolID}/members/{memberID}/$ref", nil)
|
||||
r := httptest.NewRequest(http.MethodDelete, "/graph/v1.0/education/schools/{schoolID}/members/{userID}/$ref", nil)
|
||||
rctx := chi.NewRouteContext()
|
||||
rctx.URLParams.Add("memberID", "/users/user")
|
||||
rctx.URLParams.Add("userID", "/users/user")
|
||||
r = r.WithContext(context.WithValue(ctxpkg.ContextSetUser(ctx, currentUser), chi.RouteCtxKey, rctx))
|
||||
svc.DeleteEducationSchoolMember(rr, r)
|
||||
svc.DeleteEducationSchoolUser(rr, r)
|
||||
Expect(rr.Code).To(Equal(http.StatusBadRequest))
|
||||
})
|
||||
|
||||
It("deletes members", func() {
|
||||
identityEducationBackend.On("RemoveMemberFromEducationSchool", mock.Anything, mock.Anything, mock.Anything).Return(nil)
|
||||
identityEducationBackend.On("RemoveUserFromEducationSchool", mock.Anything, mock.Anything, mock.Anything).Return(nil)
|
||||
|
||||
r := httptest.NewRequest(http.MethodDelete, "/graph/v1.0/education/schools/{schoolID}/members/{memberID}/$ref", nil)
|
||||
r := httptest.NewRequest(http.MethodDelete, "/graph/v1.0/education/schools/{schoolID}/members/{userID}/$ref", nil)
|
||||
rctx := chi.NewRouteContext()
|
||||
rctx.URLParams.Add("schoolID", *newSchool.Id)
|
||||
rctx.URLParams.Add("memberID", "/users/user1")
|
||||
rctx.URLParams.Add("userID", "/users/user1")
|
||||
r = r.WithContext(context.WithValue(ctxpkg.ContextSetUser(ctx, currentUser), chi.RouteCtxKey, rctx))
|
||||
svc.DeleteEducationSchoolMember(rr, r)
|
||||
svc.DeleteEducationSchoolUser(rr, r)
|
||||
Expect(rr.Code).To(Equal(http.StatusNoContent))
|
||||
|
||||
identityEducationBackend.AssertNumberOfCalls(GinkgoT(), "RemoveMemberFromEducationSchool", 1)
|
||||
identityEducationBackend.AssertNumberOfCalls(GinkgoT(), "RemoveUserFromEducationSchool", 1)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -124,19 +124,19 @@ func (i instrument) DeleteEducationSchool(w http.ResponseWriter, r *http.Request
|
||||
i.next.DeleteEducationSchool(w, r)
|
||||
}
|
||||
|
||||
// GetEducationSchoolMembers implements the Service interface.
|
||||
func (i instrument) GetEducationSchoolMembers(w http.ResponseWriter, r *http.Request) {
|
||||
i.next.GetEducationSchoolMembers(w, r)
|
||||
// GetEducationSchoolUsers implements the Service interface.
|
||||
func (i instrument) GetEducationSchoolUsers(w http.ResponseWriter, r *http.Request) {
|
||||
i.next.GetEducationSchoolUsers(w, r)
|
||||
}
|
||||
|
||||
// PostEducationSchoolMember implements the Service interface.
|
||||
func (i instrument) PostEducationSchoolMember(w http.ResponseWriter, r *http.Request) {
|
||||
i.next.PostEducationSchoolMember(w, r)
|
||||
// PostEducationSchoolUser implements the Service interface.
|
||||
func (i instrument) PostEducationSchoolUser(w http.ResponseWriter, r *http.Request) {
|
||||
i.next.PostEducationSchoolUser(w, r)
|
||||
}
|
||||
|
||||
// DeleteEducationSchoolMember implements the Service interface.
|
||||
func (i instrument) DeleteEducationSchoolMember(w http.ResponseWriter, r *http.Request) {
|
||||
i.next.DeleteEducationSchoolMember(w, r)
|
||||
// DeleteEducationSchoolUser implements the Service interface.
|
||||
func (i instrument) DeleteEducationSchoolUser(w http.ResponseWriter, r *http.Request) {
|
||||
i.next.DeleteEducationSchoolUser(w, r)
|
||||
}
|
||||
|
||||
// GetEducationUsers implements the Service interface.
|
||||
|
||||
@@ -124,19 +124,19 @@ func (l logging) DeleteEducationSchool(w http.ResponseWriter, r *http.Request) {
|
||||
l.next.DeleteEducationSchool(w, r)
|
||||
}
|
||||
|
||||
// GetEducationSchoolMembers implements the Service interface.
|
||||
func (l logging) GetEducationSchoolMembers(w http.ResponseWriter, r *http.Request) {
|
||||
l.next.GetEducationSchoolMembers(w, r)
|
||||
// GetEducationSchoolUsers implements the Service interface.
|
||||
func (l logging) GetEducationSchoolUsers(w http.ResponseWriter, r *http.Request) {
|
||||
l.next.GetEducationSchoolUsers(w, r)
|
||||
}
|
||||
|
||||
// PostEducationSchoolMember implements the Service interface.
|
||||
func (l logging) PostEducationSchoolMember(w http.ResponseWriter, r *http.Request) {
|
||||
l.next.PostEducationSchoolMember(w, r)
|
||||
// PostEducationSchoolUser implements the Service interface.
|
||||
func (l logging) PostEducationSchoolUser(w http.ResponseWriter, r *http.Request) {
|
||||
l.next.PostEducationSchoolUser(w, r)
|
||||
}
|
||||
|
||||
// DeleteEducationSchoolMember implements the Service interface.
|
||||
func (l logging) DeleteEducationSchoolMember(w http.ResponseWriter, r *http.Request) {
|
||||
l.next.DeleteEducationSchoolMember(w, r)
|
||||
// DeleteEducationSchoolUser implements the Service interface.
|
||||
func (l logging) DeleteEducationSchoolUser(w http.ResponseWriter, r *http.Request) {
|
||||
l.next.DeleteEducationSchoolUser(w, r)
|
||||
}
|
||||
|
||||
// GetEducationUsers implements the Service interface.
|
||||
|
||||
@@ -52,9 +52,9 @@ type Service interface {
|
||||
PostEducationSchool(http.ResponseWriter, *http.Request)
|
||||
PatchEducationSchool(http.ResponseWriter, *http.Request)
|
||||
DeleteEducationSchool(http.ResponseWriter, *http.Request)
|
||||
GetEducationSchoolMembers(http.ResponseWriter, *http.Request)
|
||||
PostEducationSchoolMember(http.ResponseWriter, *http.Request)
|
||||
DeleteEducationSchoolMember(http.ResponseWriter, *http.Request)
|
||||
GetEducationSchoolUsers(http.ResponseWriter, *http.Request)
|
||||
PostEducationSchoolUser(http.ResponseWriter, *http.Request)
|
||||
DeleteEducationSchoolUser(http.ResponseWriter, *http.Request)
|
||||
|
||||
GetEducationUsers(http.ResponseWriter, *http.Request)
|
||||
GetEducationUser(http.ResponseWriter, *http.Request)
|
||||
@@ -250,10 +250,10 @@ func NewService(opts ...Option) Service {
|
||||
r.Get("/", svc.GetEducationSchool)
|
||||
r.Delete("/", svc.DeleteEducationSchool)
|
||||
r.Patch("/", svc.PatchEducationSchool)
|
||||
r.Route("/members", func(r chi.Router) {
|
||||
r.Get("/", svc.GetEducationSchoolMembers)
|
||||
r.Post("/$ref", svc.PostEducationSchoolMember)
|
||||
r.Delete("/{memberID}/$ref", svc.DeleteEducationSchoolMember)
|
||||
r.Route("/users", func(r chi.Router) {
|
||||
r.Get("/", svc.GetEducationSchoolUsers)
|
||||
r.Post("/$ref", svc.PostEducationSchoolUser)
|
||||
r.Delete("/{userID}/$ref", svc.DeleteEducationSchoolUser)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -120,19 +120,19 @@ func (t tracing) DeleteEducationSchool(w http.ResponseWriter, r *http.Request) {
|
||||
t.next.DeleteEducationSchool(w, r)
|
||||
}
|
||||
|
||||
// GetEducationSchoolMembers implements the Service interface.
|
||||
func (t tracing) GetEducationSchoolMembers(w http.ResponseWriter, r *http.Request) {
|
||||
t.next.GetEducationSchoolMembers(w, r)
|
||||
// GetEducationSchoolUsers implements the Service interface.
|
||||
func (t tracing) GetEducationSchoolUsers(w http.ResponseWriter, r *http.Request) {
|
||||
t.next.GetEducationSchoolUsers(w, r)
|
||||
}
|
||||
|
||||
// PostEducationSchoolMember implements the Service interface.
|
||||
func (t tracing) PostEducationSchoolMember(w http.ResponseWriter, r *http.Request) {
|
||||
t.next.PostEducationSchoolMember(w, r)
|
||||
// PostEducationSchoolUser implements the Service interface.
|
||||
func (t tracing) PostEducationSchoolUser(w http.ResponseWriter, r *http.Request) {
|
||||
t.next.PostEducationSchoolUser(w, r)
|
||||
}
|
||||
|
||||
// DeleteEducationSchoolMember implements the Service interface.
|
||||
func (t tracing) DeleteEducationSchoolMember(w http.ResponseWriter, r *http.Request) {
|
||||
t.next.DeleteEducationSchoolMember(w, r)
|
||||
// DeleteEducationSchoolUser implements the Service interface.
|
||||
func (t tracing) DeleteEducationSchoolUser(w http.ResponseWriter, r *http.Request) {
|
||||
t.next.DeleteEducationSchoolUser(w, r)
|
||||
}
|
||||
|
||||
// GetEducationUsers implements the Service interface.
|
||||
|
||||
Reference in New Issue
Block a user