Skip to content

Commit

Permalink
fix: test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
aarmam committed May 11, 2022
1 parent bf0e1aa commit 8fe10c9
Show file tree
Hide file tree
Showing 5 changed files with 864 additions and 77 deletions.
7 changes: 1 addition & 6 deletions consent/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,12 +214,7 @@ func (h *Handler) GetConsentSessions(w http.ResponseWriter, r *http.Request, ps
func (h *Handler) DeleteLoginSessionBySessionId(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
var loginSessionId = ps.ByName("id")

if loginSessionId == "" {
h.r.Writer().WriteError(w, r, errorsx.WithStack(fosite.ErrInvalidRequest.WithHint(`Path parameter 'id' is not defined but should have been.`)))
return
}

if err := h.r.ConsentManager().DeleteLoginSession(r.Context(), loginSessionId); err != nil && !errors.Is(err, x.ErrNotFound) {
if err := h.r.ConsentManager().DeleteLoginSession(r.Context(), loginSessionId); err != nil {
h.r.Writer().WriteError(w, r, err)
return
}
Expand Down
208 changes: 137 additions & 71 deletions consent/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ import (
"testing"
"time"

"github.com/golang/mock/gomock"
"github.com/pkg/errors"

"github.com/pborman/uuid"

"github.com/ory/x/sqlxx"
Expand Down Expand Up @@ -222,80 +225,143 @@ func TestGetConsentRequest(t *testing.T) {
func TestDeleteLoginSessionBySessionId(t *testing.T) {
conf := internal.NewConfigurationWithDefaults()
reg := internal.NewRegistryMemory(t, conf)
loginSession1 := uuid.NewUUID().String()
require.NoError(t, reg.ConsentManager().CreateLoginSession(context.Background(), &LoginSession{
ID: loginSession1,
AuthenticatedAt: sqlxx.NullTime(time.Now().Round(time.Second).UTC()),
Subject: "subject1",
Remember: true,
}))
loginSession2 := uuid.NewUUID().String()
require.NoError(t, reg.ConsentManager().CreateLoginSession(context.Background(), &LoginSession{
ID: loginSession2,
AuthenticatedAt: sqlxx.NullTime(time.Now().Round(time.Second).UTC()),
Subject: "subject1",
Remember: true,
}))
h := NewHandler(reg, conf)
r := x.NewRouterAdmin()
h.SetRoutes(r)
ts := httptest.NewServer(r)
defer ts.Close()
_, err := reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession1)
require.NoError(t, err)
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession2)
require.NoError(t, err)
c := &http.Client{}

req, err := http.NewRequest("DELETE", ts.URL+SessionsPath+"/login/"+loginSession1, nil)

require.NoError(t, err)
resp, err := c.Do(req)
require.NoError(t, err)
require.EqualValues(t, http.StatusNoContent, resp.StatusCode)
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession1)
require.EqualError(t, err, x.ErrNotFound.Error())
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession2)
require.NoError(t, err)

t.Run("case=should pass when deleted by session id", func(t *testing.T) {
loginSession1 := uuid.NewUUID().String()
require.NoError(t, reg.ConsentManager().CreateLoginSession(context.Background(), &LoginSession{
ID: loginSession1,
AuthenticatedAt: sqlxx.NullTime(time.Now().Round(time.Second).UTC()),
Subject: "subject1",
Remember: true,
}))
loginSession2 := uuid.NewUUID().String()
require.NoError(t, reg.ConsentManager().CreateLoginSession(context.Background(), &LoginSession{
ID: loginSession2,
AuthenticatedAt: sqlxx.NullTime(time.Now().Round(time.Second).UTC()),
Subject: "subject1",
Remember: true,
}))
h := NewHandler(reg, conf)
r := x.NewRouterAdmin()
h.SetRoutes(r)
ts := httptest.NewServer(r)
defer ts.Close()
_, err := reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession1)
require.NoError(t, err)
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession2)
require.NoError(t, err)
c := &http.Client{}

req, err := http.NewRequest("DELETE", ts.URL+SessionsPath+"/login/"+loginSession1, nil)

require.NoError(t, err)
resp, err := c.Do(req)
require.NoError(t, err)
require.EqualValues(t, http.StatusNoContent, resp.StatusCode)
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession1)
require.EqualError(t, err, x.ErrNotFound.Error())
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession2)
require.NoError(t, err)
})

t.Run("case=should fail with internal server error when delete fails", func(t *testing.T) {
ctrl := gomock.NewController(t)
mockPersister := NewMockManager(ctrl)
reg.WithPersister(mockPersister)
defer ctrl.Finish()
mockPersister.EXPECT().DeleteLoginSession(gomock.Any(), gomock.Any()).Return(errors.New("SqlError"))
h := NewHandler(reg, conf)
r := x.NewRouterAdmin()
h.SetRoutes(r)
ts := httptest.NewServer(r)
defer ts.Close()
c := &http.Client{}

req, err := http.NewRequest("DELETE", ts.URL+SessionsPath+"/login/session-1", nil)

require.NoError(t, err)
resp, err := c.Do(req)
require.NoError(t, err)
require.EqualValues(t, http.StatusInternalServerError, resp.StatusCode)
})
}

func TestDeleteLoginSessionBySubject(t *testing.T) {
conf := internal.NewConfigurationWithDefaults()
reg := internal.NewRegistryMemory(t, conf)
subject := "subject1"
loginSession1 := uuid.NewUUID().String()
require.NoError(t, reg.ConsentManager().CreateLoginSession(context.Background(), &LoginSession{
ID: loginSession1,
AuthenticatedAt: sqlxx.NullTime(time.Now().Round(time.Second).UTC()),
Subject: subject,
Remember: true,
}))
loginSession2 := uuid.NewUUID().String()
require.NoError(t, reg.ConsentManager().CreateLoginSession(context.Background(), &LoginSession{
ID: loginSession2,
AuthenticatedAt: sqlxx.NullTime(time.Now().Round(time.Second).UTC()),
Subject: subject,
Remember: true,
}))
h := NewHandler(reg, conf)
r := x.NewRouterAdmin()
h.SetRoutes(r)
ts := httptest.NewServer(r)
defer ts.Close()
_, err := reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession1)
require.NoError(t, err)
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession2)
require.NoError(t, err)
c := &http.Client{}

req, err := http.NewRequest("DELETE", ts.URL+SessionsPath+"/login?subject="+subject, nil)

require.NoError(t, err)
resp, err := c.Do(req)
require.NoError(t, err)
require.EqualValues(t, http.StatusNoContent, resp.StatusCode)
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession1)
require.EqualError(t, err, x.ErrNotFound.Error())
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession2)
require.EqualError(t, err, x.ErrNotFound.Error())

t.Run("case=should pass when deleted by subject", func(t *testing.T) {
subject := "subject1"
loginSession1 := uuid.NewUUID().String()
require.NoError(t, reg.ConsentManager().CreateLoginSession(context.Background(), &LoginSession{
ID: loginSession1,
AuthenticatedAt: sqlxx.NullTime(time.Now().Round(time.Second).UTC()),
Subject: subject,
Remember: true,
}))
loginSession2 := uuid.NewUUID().String()
require.NoError(t, reg.ConsentManager().CreateLoginSession(context.Background(), &LoginSession{
ID: loginSession2,
AuthenticatedAt: sqlxx.NullTime(time.Now().Round(time.Second).UTC()),
Subject: subject,
Remember: true,
}))
h := NewHandler(reg, conf)
r := x.NewRouterAdmin()
h.SetRoutes(r)
ts := httptest.NewServer(r)
defer ts.Close()
_, err := reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession1)
require.NoError(t, err)
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession2)
require.NoError(t, err)
c := &http.Client{}

req, err := http.NewRequest("DELETE", ts.URL+SessionsPath+"/login?subject="+subject, nil)

require.NoError(t, err)
resp, err := c.Do(req)
require.NoError(t, err)
require.EqualValues(t, http.StatusNoContent, resp.StatusCode)
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession1)
require.EqualError(t, err, x.ErrNotFound.Error())
_, err = reg.ConsentManager().GetRememberedLoginSession(context.Background(), loginSession2)
require.EqualError(t, err, x.ErrNotFound.Error())
})

t.Run("case=should fail when missing subject parameter", func(t *testing.T) {
h := NewHandler(reg, conf)
r := x.NewRouterAdmin()
h.SetRoutes(r)
ts := httptest.NewServer(r)
defer ts.Close()
c := &http.Client{}

req, err := http.NewRequest("DELETE", ts.URL+SessionsPath+"/login?subject=", nil)

require.NoError(t, err)
resp, err := c.Do(req)
require.EqualValues(t, 400, resp.StatusCode)
})

t.Run("case=should fail with internal server error when delete fails", func(t *testing.T) {
ctrl := gomock.NewController(t)
mockPersister := NewMockManager(ctrl)
reg.WithPersister(mockPersister)
defer ctrl.Finish()
mockPersister.EXPECT().RevokeSubjectLoginSession(gomock.Any(), gomock.Any()).Return(errors.New("SqlError"))
h := NewHandler(reg, conf)
r := x.NewRouterAdmin()
h.SetRoutes(r)
ts := httptest.NewServer(r)
defer ts.Close()
c := &http.Client{}

req, err := http.NewRequest("DELETE", ts.URL+SessionsPath+"/login?subject=subject-1", nil)

require.NoError(t, err)
resp, err := c.Do(req)
require.NoError(t, err)
require.EqualValues(t, http.StatusInternalServerError, resp.StatusCode)
})
}
Loading

0 comments on commit 8fe10c9

Please sign in to comment.