Files
upstream-ory-kratos/selfservice/hook/session_destroyer_test.go
upstream-mirror c60cc7ca75
Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
snapshot of https://github.com/ory/kratos.git (master, 2026-09-15; blobs > 131072B omitted)
2026-09-15 21:19:12 +05:00

120 lines
2.9 KiB
Go

// Copyright © 2023 Ory Corp
// SPDX-License-Identifier: Apache-2.0
package hook_test
import (
"context"
"net/http"
"testing"
"github.com/ory/kratos/pkg/testhelpers"
"github.com/ory/kratos/corpx"
"github.com/ory/kratos/ui/node"
"github.com/go-faker/faker/v4"
"github.com/gobuffalo/httptest"
"github.com/gofrs/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/ory/kratos/driver/config"
"github.com/ory/kratos/identity"
"github.com/ory/kratos/pkg"
"github.com/ory/kratos/selfservice/flow/settings"
"github.com/ory/kratos/selfservice/hook"
"github.com/ory/kratos/session"
)
func init() {
corpx.RegisterFakes()
}
func TestSessionDestroyer(t *testing.T) {
ctx := context.Background()
conf, reg := pkg.NewFastRegistryWithMocks(t)
conf.MustSet(ctx, config.ViperKeyPublicBaseURL, "http://localhost/")
testhelpers.SetDefaultIdentitySchema(conf, "file://./stub/stub.schema.json")
h := hook.NewSessionDestroyer(reg)
for _, tc := range []struct {
name string
hook func(*identity.Identity) error
}{
{
name: "ExecuteLoginPostHook",
hook: func(i *identity.Identity) error {
return h.ExecuteLoginPostHook(
httptest.NewRecorder(),
new(http.Request),
node.DefaultGroup,
nil,
&session.Session{Identity: i},
)
},
},
{
name: "ExecutePostRecoveryHook",
hook: func(i *identity.Identity) error {
return h.ExecutePostRecoveryHook(
httptest.NewRecorder(),
new(http.Request),
nil,
&session.Session{Identity: i},
)
},
},
{
name: "ExecuteSettingsPostPersistHook",
hook: func(i *identity.Identity) error {
return h.ExecuteSettingsPostPersistHook(
httptest.NewRecorder(),
new(http.Request),
settings.PostHookPostPersistExecutorParams{
Flow: nil,
Previous: i,
Updated: i,
Session: &session.Session{Identity: i},
},
)
},
},
} {
t.Run(tc.name, func(t *testing.T) {
var i identity.Identity
require.NoError(t, faker.FakeData(&i))
require.NoError(t, reg.PrivilegedIdentityPool().CreateIdentity(context.Background(), &i))
sessions := make([]session.Session, 5)
for k := range sessions {
s := sessions[k] // keep this for pointers' sake ;)
require.NoError(t, faker.FakeData(&s))
s.IdentityID = uuid.Nil
s.Identity = &i
s.Active = true
require.NoError(t, reg.SessionPersister().UpsertSession(context.Background(), &s))
sessions[k] = s
}
for k := range sessions {
sess, err := reg.SessionPersister().GetSession(context.Background(), sessions[k].ID, session.ExpandNothing)
require.NoError(t, err)
assert.True(t, sess.IsActive())
}
// Should revoke all the sessions.
require.NoError(t, tc.hook(&i))
for k := range sessions {
sess, err := reg.SessionPersister().GetSession(context.Background(), sessions[k].ID, session.ExpandNothing)
require.NoError(t, err)
assert.False(t, sess.IsActive())
}
})
}
}