Files
photoprism/internal/entity/auth_session_delete_test.go
Michael Mayer 1ee04c3017 Backend: Move unix package to /pkg/time/unix
Signed-off-by: Michael Mayer <michael@photoprism.app>
2024-07-03 09:31:27 +02:00

105 lines
3.0 KiB
Go

package entity
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/photoprism/photoprism/pkg/authn"
"github.com/photoprism/photoprism/pkg/rnd"
"github.com/photoprism/photoprism/pkg/time/unix"
)
func TestDeleteSession(t *testing.T) {
t.Run("Success", func(t *testing.T) {
id := rnd.SessionID("77be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac1")
m := &Session{ID: id, DownloadToken: "download123", PreviewToken: "preview123"}
CacheSession(m, time.Hour)
r, _ := sessionCache.Get(id)
assert.NotEmpty(t, r)
err := DeleteSession(m)
if err != nil {
t.Fatal(err)
}
r2, _ := sessionCache.Get(id)
assert.Empty(t, r2)
})
t.Run("invalidID", func(t *testing.T) {
m := &Session{ID: "123-invalid", DownloadToken: "download123", PreviewToken: "preview123"}
CacheSession(m, time.Hour)
err := DeleteSession(m)
assert.Error(t, err)
})
}
func TestDeleteChildSessions(t *testing.T) {
t.Run("New", func(t *testing.T) {
s := NewSession(3600, 0)
assert.Equal(t, 0, DeleteChildSessions(s))
})
}
func TestDeleteClientSessions(t *testing.T) {
// Test client UID.
clientUID := "cs5gfen1bgx00000"
// Create new test client.
client := NewClient()
client.ClientUID = clientUID
// Make sure no sessions exist yet and test missing arguments.
assert.Equal(t, 0, DeleteClientSessions(&Client{}, authn.MethodUndefined, -1))
assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodOAuth2, -1))
assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodOAuth2, 0))
assert.Equal(t, 0, DeleteClientSessions(&Client{}, authn.MethodDefault, 0))
// Create 10 test client sessions.
for i := 0; i < 10; i++ {
sess := NewSession(3600, 0)
sess.SetClient(client)
if err := sess.Save(); err != nil {
t.Fatal(err)
}
}
// Check if the expected number of sessions is deleted until none are left.
assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodOAuth2, -1))
assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodDefault, 1))
assert.Equal(t, 9, DeleteClientSessions(client, authn.MethodOAuth2, 1))
assert.Equal(t, 1, DeleteClientSessions(client, authn.MethodOAuth2, 0))
assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodOAuth2, 0))
assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodUndefined, 0))
}
func TestDeleteExpiredSessions(t *testing.T) {
assert.Equal(t, 0, DeleteExpiredSessions())
m := NewSession(unix.Day, unix.Hour)
m.Expires(time.Date(2000, 01, 15, 12, 30, 0, 0, time.UTC))
if err := m.Save(); err != nil {
t.Fatal(err)
}
assert.Equal(t, 1, DeleteExpiredSessions())
}
func TestDeleteFromSessionCache(t *testing.T) {
id := rnd.SessionID("69be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac1")
sessionCache.Flush()
bob := FindSessionByRefID("sessxkkcabce")
CacheSession(bob, time.Hour)
r, b := sessionCache.Get(id)
assert.NotEmpty(t, r)
assert.True(t, b)
DeleteFromSessionCache("")
r2, b2 := sessionCache.Get(id)
assert.NotEmpty(t, r2)
assert.True(t, b2)
DeleteFromSessionCache(id)
r3, b3 := sessionCache.Get(id)
assert.Empty(t, r3)
assert.False(t, b3)
}