github.com/volatiletech/authboss@v2.4.1+incompatible/events_test.go (about) 1 package authboss 2 3 import ( 4 "net/http" 5 "testing" 6 7 "github.com/pkg/errors" 8 ) 9 10 func TestEvents(t *testing.T) { 11 t.Parallel() 12 13 ab := New() 14 afterCalled := false 15 beforeCalled := false 16 17 ab.Events.Before(EventRegister, func(http.ResponseWriter, *http.Request, bool) (bool, error) { 18 beforeCalled = true 19 return false, nil 20 }) 21 ab.Events.After(EventRegister, func(http.ResponseWriter, *http.Request, bool) (bool, error) { 22 afterCalled = true 23 return false, nil 24 }) 25 26 if beforeCalled || afterCalled { 27 t.Error("Neither should be called.") 28 } 29 30 handled, err := ab.Events.FireBefore(EventRegister, nil, nil) 31 if err != nil { 32 t.Error("Unexpected error:", err) 33 } 34 if handled { 35 t.Error("It should not have been handled.") 36 } 37 38 if !beforeCalled { 39 t.Error("Expected before to have been called.") 40 } 41 if afterCalled { 42 t.Error("Expected after not to be called.") 43 } 44 45 ab.Events.FireAfter(EventRegister, nil, nil) 46 if !afterCalled { 47 t.Error("Expected after to be called.") 48 } 49 } 50 51 func TestEventsHandled(t *testing.T) { 52 t.Parallel() 53 54 ab := New() 55 firstCalled := false 56 secondCalled := false 57 58 firstHandled := false 59 secondHandled := false 60 61 ab.Events.Before(EventRegister, func(w http.ResponseWriter, r *http.Request, handled bool) (bool, error) { 62 firstCalled = true 63 firstHandled = handled 64 return true, nil 65 }) 66 ab.Events.Before(EventRegister, func(w http.ResponseWriter, r *http.Request, handled bool) (bool, error) { 67 secondCalled = true 68 secondHandled = handled 69 return false, nil 70 }) 71 72 handled, err := ab.Events.FireBefore(EventRegister, nil, nil) 73 if err != nil { 74 t.Error("Unexpected error:", err) 75 } 76 if !handled { 77 t.Error("it should have been handled") 78 } 79 80 if !firstCalled { 81 t.Error("expected first to have been called") 82 } 83 if !secondCalled { 84 t.Error("expected second to have been called") 85 } 86 87 if firstHandled { 88 t.Error("first should not see the event as being handled") 89 } 90 if !secondHandled { 91 t.Error("second should see the event as being handled") 92 } 93 } 94 95 func TestEventsErrors(t *testing.T) { 96 t.Parallel() 97 98 ab := New() 99 firstCalled := false 100 secondCalled := false 101 102 expect := errors.New("error") 103 104 ab.Events.Before(EventRegister, func(http.ResponseWriter, *http.Request, bool) (bool, error) { 105 firstCalled = true 106 return false, expect 107 }) 108 ab.Events.Before(EventRegister, func(http.ResponseWriter, *http.Request, bool) (bool, error) { 109 secondCalled = true 110 return false, nil 111 }) 112 113 _, err := ab.Events.FireBefore(EventRegister, nil, nil) 114 if err != expect { 115 t.Error("got the wrong error back:", err) 116 } 117 118 if !firstCalled { 119 t.Error("expected first to have been called") 120 } 121 if secondCalled { 122 t.Error("expected second to not have been called") 123 } 124 } 125 126 func TestEventString(t *testing.T) { 127 t.Parallel() 128 129 tests := []struct { 130 ev Event 131 str string 132 }{ 133 {EventRegister, "EventRegister"}, 134 {EventAuth, "EventAuth"}, 135 {EventOAuth2, "EventOAuth2"}, 136 {EventAuthFail, "EventAuthFail"}, 137 {EventOAuth2Fail, "EventOAuth2Fail"}, 138 {EventRecoverStart, "EventRecoverStart"}, 139 {EventRecoverEnd, "EventRecoverEnd"}, 140 {EventGetUser, "EventGetUser"}, 141 {EventGetUserSession, "EventGetUserSession"}, 142 {EventPasswordReset, "EventPasswordReset"}, 143 } 144 145 for i, test := range tests { 146 if got := test.ev.String(); got != test.str { 147 t.Errorf("%d) Wrong string for Event(%d) expected: %v got: %s", i, test.ev, test.str, got) 148 } 149 } 150 }