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  }