auth
auth/grant_test.go
Add basic test for retrieving profiles by login. Add a basic test for retrieving profiles from ProfileStores by a passed login. The test is very basic, in that it doesn't test for deleted logins, deleted profiles, etc. But it at least tests that in ordinary circumstances, things work as they're supposed to.
| paddy@29 | 1 package auth |
| paddy@29 | 2 |
| paddy@29 | 3 import ( |
| paddy@29 | 4 "testing" |
| paddy@29 | 5 "time" |
| paddy@29 | 6 |
| paddy@45 | 7 "code.secondbit.org/uuid" |
| paddy@29 | 8 ) |
| paddy@29 | 9 |
| paddy@29 | 10 var grantStores = []GrantStore{NewMemstore()} |
| paddy@29 | 11 |
| paddy@34 | 12 func compareGrants(grant1, grant2 Grant) (success bool, field string, grant1val, grant2val interface{}) { |
| paddy@34 | 13 if grant1.Code != grant2.Code { |
| paddy@34 | 14 return false, "code", grant1.Code, grant2.Code |
| paddy@34 | 15 } |
| paddy@34 | 16 if !grant1.Created.Equal(grant2.Created) { |
| paddy@34 | 17 return false, "created", grant1.Created, grant2.Created |
| paddy@34 | 18 } |
| paddy@34 | 19 if grant1.ExpiresIn != grant2.ExpiresIn { |
| paddy@34 | 20 return false, "expires in", grant1.ExpiresIn, grant2.ExpiresIn |
| paddy@34 | 21 } |
| paddy@34 | 22 if !grant1.ClientID.Equal(grant2.ClientID) { |
| paddy@34 | 23 return false, "client ID", grant1.ClientID, grant2.ClientID |
| paddy@34 | 24 } |
| paddy@34 | 25 if grant1.Scope != grant2.Scope { |
| paddy@34 | 26 return false, "scope", grant1.Scope, grant2.Scope |
| paddy@34 | 27 } |
| paddy@34 | 28 if grant1.RedirectURI != grant2.RedirectURI { |
| paddy@34 | 29 return false, "redirect URI", grant1.RedirectURI, grant2.RedirectURI |
| paddy@34 | 30 } |
| paddy@34 | 31 if grant1.State != grant2.State { |
| paddy@34 | 32 return false, "state", grant1.State, grant2.State |
| paddy@34 | 33 } |
| paddy@34 | 34 return true, "", nil, nil |
| paddy@34 | 35 } |
| paddy@34 | 36 |
| paddy@29 | 37 func TestGrantStoreSuccess(t *testing.T) { |
| paddy@36 | 38 t.Parallel() |
| paddy@29 | 39 grant := Grant{ |
| paddy@29 | 40 Code: "code", |
| paddy@29 | 41 Created: time.Now(), |
| paddy@29 | 42 ExpiresIn: 180, |
| paddy@29 | 43 ClientID: uuid.NewID(), |
| paddy@29 | 44 Scope: "scope", |
| paddy@29 | 45 RedirectURI: "redirectURI", |
| paddy@29 | 46 State: "state", |
| paddy@29 | 47 } |
| paddy@34 | 48 for _, store := range grantStores { |
| paddy@29 | 49 err := store.SaveGrant(grant) |
| paddy@29 | 50 if err != nil { |
| paddy@34 | 51 t.Errorf("Error saving grant to %T: %s", store, err) |
| paddy@34 | 52 } |
| paddy@34 | 53 err = store.SaveGrant(grant) |
| paddy@34 | 54 if err != ErrGrantAlreadyExists { |
| paddy@34 | 55 t.Errorf("Expected ErrGrantAlreadyExists from %T, got %+v", store, err) |
| paddy@29 | 56 } |
| paddy@29 | 57 retrieved, err := store.GetGrant(grant.Code) |
| paddy@29 | 58 if err != nil { |
| paddy@34 | 59 t.Errorf("Error retrieving grant from %T: %s", store, err) |
| paddy@29 | 60 } |
| paddy@34 | 61 match, field, expectation, result := compareGrants(grant, retrieved) |
| paddy@34 | 62 if !match { |
| paddy@34 | 63 t.Errorf("Expected `%v` in the `%s` field of grant retrieved from %T, got `%v`", expectation, field, store, result) |
| paddy@34 | 64 } |
| paddy@29 | 65 err = store.DeleteGrant(grant.Code) |
| paddy@29 | 66 if err != nil { |
| paddy@34 | 67 t.Errorf("Error removing grant from %T: %s", store, err) |
| paddy@29 | 68 } |
| paddy@29 | 69 retrieved, err = store.GetGrant(grant.Code) |
| paddy@29 | 70 if err != ErrGrantNotFound { |
| paddy@34 | 71 t.Errorf("Expected ErrGrantNotFound from %T, got %+v and %+v", store, retrieved, err) |
| paddy@34 | 72 } |
| paddy@34 | 73 err = store.DeleteGrant(grant.Code) |
| paddy@34 | 74 if err != ErrGrantNotFound { |
| paddy@34 | 75 t.Errorf("Expected ErrGrantNotFound from %T, got %+v", store, err) |
| paddy@29 | 76 } |
| paddy@29 | 77 } |
| paddy@29 | 78 } |