mirror of
https://github.com/volatiletech/authboss.git
synced 2024-12-12 10:45:11 +02:00
192 lines
4.1 KiB
Go
192 lines
4.1 KiB
Go
|
package authboss
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"errors"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestEvents(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
ab := New()
|
||
|
afterCalled := false
|
||
|
beforeCalled := false
|
||
|
|
||
|
ab.Events.Before(EventRegister, func(ctx context.Context) (Interrupt, error) {
|
||
|
beforeCalled = true
|
||
|
return InterruptNone, nil
|
||
|
})
|
||
|
ab.Events.After(EventRegister, func(ctx context.Context) error {
|
||
|
afterCalled = true
|
||
|
return nil
|
||
|
})
|
||
|
|
||
|
if beforeCalled || afterCalled {
|
||
|
t.Error("Neither should be called.")
|
||
|
}
|
||
|
|
||
|
interrupt, err := ab.Events.FireBefore(context.Background(), EventRegister)
|
||
|
if err != nil {
|
||
|
t.Error("Unexpected error:", err)
|
||
|
}
|
||
|
if interrupt != InterruptNone {
|
||
|
t.Error("It should not have been stopped.")
|
||
|
}
|
||
|
|
||
|
if !beforeCalled {
|
||
|
t.Error("Expected before to have been called.")
|
||
|
}
|
||
|
if afterCalled {
|
||
|
t.Error("Expected after not to be called.")
|
||
|
}
|
||
|
|
||
|
ab.Events.FireAfter(context.Background(), EventRegister)
|
||
|
if !afterCalled {
|
||
|
t.Error("Expected after to be called.")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestCallbacksInterrupt(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
ev := NewEvents()
|
||
|
before1 := false
|
||
|
before2 := false
|
||
|
|
||
|
ev.Before(EventRegister, func(ctx context.Context) (Interrupt, error) {
|
||
|
before1 = true
|
||
|
return InterruptAccountLocked, nil
|
||
|
})
|
||
|
ev.Before(EventRegister, func(ctx context.Context) (Interrupt, error) {
|
||
|
before2 = true
|
||
|
return InterruptNone, nil
|
||
|
})
|
||
|
|
||
|
interrupt, err := ev.FireBefore(context.Background(), EventRegister)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
if interrupt != InterruptAccountLocked {
|
||
|
t.Error("The interrupt signal was not account locked:", interrupt)
|
||
|
}
|
||
|
|
||
|
if !before1 {
|
||
|
t.Error("Before1 should have been called.")
|
||
|
}
|
||
|
if before2 {
|
||
|
t.Error("Before2 should not have been called.")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestCallbacksBeforeErrors(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
ev := NewEvents()
|
||
|
before1 := false
|
||
|
before2 := false
|
||
|
|
||
|
errValue := errors.New("Problem occured")
|
||
|
|
||
|
ev.Before(EventRegister, func(ctx context.Context) (Interrupt, error) {
|
||
|
before1 = true
|
||
|
return InterruptNone, errValue
|
||
|
})
|
||
|
ev.Before(EventRegister, func(ctx context.Context) (Interrupt, error) {
|
||
|
before2 = true
|
||
|
return InterruptNone, nil
|
||
|
})
|
||
|
|
||
|
interrupt, err := ev.FireBefore(context.Background(), EventRegister)
|
||
|
if err != errValue {
|
||
|
t.Error("Expected an error to come back.")
|
||
|
}
|
||
|
if interrupt != InterruptNone {
|
||
|
t.Error("It should not have been stopped.")
|
||
|
}
|
||
|
|
||
|
if !before1 {
|
||
|
t.Error("Before1 should have been called.")
|
||
|
}
|
||
|
if before2 {
|
||
|
t.Error("Before2 should not have been called.")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestCallbacksAfterErrors(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
ev := NewEvents()
|
||
|
after1 := false
|
||
|
after2 := false
|
||
|
|
||
|
errValue := errors.New("Problem occured")
|
||
|
|
||
|
ev.After(EventRegister, func(ctx context.Context) error {
|
||
|
after1 = true
|
||
|
return errValue
|
||
|
})
|
||
|
ev.After(EventRegister, func(ctx context.Context) error {
|
||
|
after2 = true
|
||
|
return nil
|
||
|
})
|
||
|
|
||
|
err := ev.FireAfter(context.Background(), EventRegister)
|
||
|
if err != errValue {
|
||
|
t.Error("Expected an error to come back.")
|
||
|
}
|
||
|
|
||
|
if !after1 {
|
||
|
t.Error("After1 should have been called.")
|
||
|
}
|
||
|
if after2 {
|
||
|
t.Error("After2 should not have been called.")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestEventString(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
tests := []struct {
|
||
|
ev Event
|
||
|
str string
|
||
|
}{
|
||
|
{EventRegister, "EventRegister"},
|
||
|
{EventAuth, "EventAuth"},
|
||
|
{EventOAuth, "EventOAuth"},
|
||
|
{EventAuthFail, "EventAuthFail"},
|
||
|
{EventOAuthFail, "EventOAuthFail"},
|
||
|
{EventRecoverStart, "EventRecoverStart"},
|
||
|
{EventRecoverEnd, "EventRecoverEnd"},
|
||
|
{EventGetUser, "EventGetUser"},
|
||
|
{EventGetUserSession, "EventGetUserSession"},
|
||
|
{EventPasswordReset, "EventPasswordReset"},
|
||
|
}
|
||
|
|
||
|
for i, test := range tests {
|
||
|
if got := test.ev.String(); got != test.str {
|
||
|
t.Errorf("%d) Wrong string for Event(%d) expected: %v got: %s", i, test.ev, test.str, got)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestInterruptString(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
tests := []struct {
|
||
|
in Interrupt
|
||
|
str string
|
||
|
}{
|
||
|
{InterruptNone, "InterruptNone"},
|
||
|
{InterruptAccountLocked, "InterruptAccountLocked"},
|
||
|
{InterruptAccountNotConfirmed, "InterruptAccountNotConfirmed"},
|
||
|
{InterruptSessionExpired, "InterruptSessionExpired"},
|
||
|
}
|
||
|
|
||
|
for i, test := range tests {
|
||
|
if got := test.in.String(); got != test.str {
|
||
|
t.Errorf("%d) Wrong string for Event(%d) expected: %v got: %s", i, test.in, test.str, got)
|
||
|
}
|
||
|
}
|
||
|
}
|