auth

Paddy 2014-09-18 Parent:690561c6619a Child:113ccb15b919

40:0b86c2d3ec75 Go to Latest

auth/client_test.go

Add TODOs. Add TODO comments where functionality is stubbed out or anticipated, but work is needed to implement it.

History
paddy@31 1 package auth
paddy@31 2
paddy@31 3 import (
paddy@39 4 "fmt"
paddy@31 5 "testing"
paddy@31 6
paddy@31 7 "secondbit.org/uuid"
paddy@31 8 )
paddy@31 9
paddy@39 10 const (
paddy@39 11 clientChangeSecret = 1 << iota
paddy@39 12 clientChangeRedirectURI
paddy@39 13 clientChangeOwnerID
paddy@39 14 clientChangeName
paddy@39 15 clientChangeLogo
paddy@39 16 clientChangeWebsite
paddy@39 17 )
paddy@39 18
paddy@31 19 var clientStores = []ClientStore{NewMemstore()}
paddy@31 20
paddy@33 21 func compareClients(client1, client2 Client) (success bool, field string, val1, val2 interface{}) {
paddy@33 22 if !client1.ID.Equal(client2.ID) {
paddy@33 23 return false, "ID", client1.ID, client2.ID
paddy@33 24 }
paddy@33 25 if client1.Secret != client2.Secret {
paddy@33 26 return false, "secret", client1.Secret, client2.Secret
paddy@33 27 }
paddy@33 28 if client1.RedirectURI != client2.RedirectURI {
paddy@33 29 return false, "redirect URI", client1.RedirectURI, client2.RedirectURI
paddy@33 30 }
paddy@33 31 if !client1.OwnerID.Equal(client2.OwnerID) {
paddy@33 32 return false, "owner ID", client1.OwnerID, client2.OwnerID
paddy@33 33 }
paddy@33 34 if client1.Name != client2.Name {
paddy@33 35 return false, "name", client1.Name, client2.Name
paddy@33 36 }
paddy@33 37 if client1.Logo != client2.Logo {
paddy@33 38 return false, "logo", client1.Logo, client2.Logo
paddy@33 39 }
paddy@33 40 if client1.Website != client2.Website {
paddy@33 41 return false, "website", client1.Website, client2.Website
paddy@33 42 }
paddy@33 43 return true, "", nil, nil
paddy@33 44 }
paddy@33 45
paddy@31 46 func TestClientStoreSuccess(t *testing.T) {
paddy@36 47 t.Parallel()
paddy@31 48 client := Client{
paddy@31 49 ID: uuid.NewID(),
paddy@31 50 Secret: "secret",
paddy@31 51 RedirectURI: "redirectURI",
paddy@31 52 OwnerID: uuid.NewID(),
paddy@31 53 Name: "name",
paddy@31 54 Logo: "logo",
paddy@31 55 Website: "website",
paddy@31 56 }
paddy@31 57 for _, store := range clientStores {
paddy@31 58 err := store.SaveClient(client)
paddy@31 59 if err != nil {
paddy@31 60 t.Errorf("Error saving client to %T: %s", store, err)
paddy@31 61 }
paddy@33 62 err = store.SaveClient(client)
paddy@33 63 if err != ErrClientAlreadyExists {
paddy@33 64 t.Errorf("Expected ErrClientAlreadyExists, got %v from %T", err, store)
paddy@33 65 }
paddy@31 66 retrieved, err := store.GetClient(client.ID)
paddy@31 67 if err != nil {
paddy@31 68 t.Errorf("Error retrieving client from %T: %s", store, err)
paddy@31 69 }
paddy@33 70 success, field, expectation, result := compareClients(client, retrieved)
paddy@33 71 if !success {
paddy@33 72 t.Errorf("Expected field %s to be %v, but %T returned %v", field, expectation, store, result)
paddy@33 73 }
paddy@31 74 clients, err := store.ListClientsByOwner(client.OwnerID, 25, 0)
paddy@31 75 if err != nil {
paddy@31 76 t.Errorf("Error retrieving clients by owner from %T: %s", store, err)
paddy@31 77 }
paddy@31 78 if len(clients) != 1 {
paddy@31 79 t.Errorf("Expected 1 client in response from %T, got %+v", store, clients)
paddy@31 80 }
paddy@33 81 success, field, expectation, result = compareClients(client, clients[0])
paddy@33 82 if !success {
paddy@33 83 t.Errorf("Expected field %s to be %v, but %T returned %v", field, expectation, store, result)
paddy@33 84 }
paddy@31 85 err = store.DeleteClient(client.ID)
paddy@31 86 if err != nil {
paddy@31 87 t.Errorf("Error deleting client from %T: %s", store, err)
paddy@31 88 }
paddy@33 89 err = store.DeleteClient(client.ID)
paddy@33 90 if err != ErrClientNotFound {
paddy@33 91 t.Errorf("Expected ErrClientNotFound, got %s from %T", err, store)
paddy@33 92 }
paddy@31 93 retrieved, err = store.GetClient(client.ID)
paddy@31 94 if err != ErrClientNotFound {
paddy@31 95 t.Errorf("Expected ErrClientNotFound from %T, got %+v and %s", store, retrieved, err)
paddy@31 96 }
paddy@31 97 clients, err = store.ListClientsByOwner(client.OwnerID, 25, 0)
paddy@31 98 if err != nil {
paddy@31 99 t.Errorf("Error listing clients by owner from %T: %s", store, err)
paddy@31 100 }
paddy@31 101 if len(clients) != 0 {
paddy@31 102 t.Errorf("Expected 0 clients in response from %T, got %+v", store, clients)
paddy@31 103 }
paddy@31 104 }
paddy@31 105 }
paddy@39 106
paddy@39 107 func TestClientUpdates(t *testing.T) {
paddy@39 108 t.Parallel()
paddy@39 109 variations := 1 << 10
paddy@39 110 client := Client{
paddy@39 111 ID: uuid.NewID(),
paddy@39 112 Secret: "secret",
paddy@39 113 RedirectURI: "redirectURI",
paddy@39 114 OwnerID: uuid.NewID(),
paddy@39 115 Name: "name",
paddy@39 116 Logo: "logo",
paddy@39 117 Website: "website",
paddy@39 118 }
paddy@39 119 for i := 0; i < variations; i++ {
paddy@39 120 var secret, redirectURI, name, logo, website string
paddy@39 121 change := ClientChange{}
paddy@39 122 expectation := client
paddy@39 123 result := client
paddy@39 124 if i&clientChangeSecret != 0 {
paddy@39 125 secret = fmt.Sprintf("secret-%d", i)
paddy@39 126 change.Secret = &secret
paddy@39 127 expectation.Secret = secret
paddy@39 128 }
paddy@39 129 if i&clientChangeRedirectURI != 0 {
paddy@39 130 redirectURI = fmt.Sprintf("redirect-uri-%d", i)
paddy@39 131 change.RedirectURI = &redirectURI
paddy@39 132 expectation.RedirectURI = redirectURI
paddy@39 133 }
paddy@39 134 if i&clientChangeOwnerID != 0 {
paddy@39 135 change.OwnerID = uuid.NewID()
paddy@39 136 expectation.OwnerID = change.OwnerID
paddy@39 137 }
paddy@39 138 if i&clientChangeName != 0 {
paddy@39 139 name = fmt.Sprintf("name-%d", i)
paddy@39 140 change.Name = &name
paddy@39 141 expectation.Name = name
paddy@39 142 }
paddy@39 143 if i&clientChangeLogo != 0 {
paddy@39 144 logo = fmt.Sprintf("logo-%d", i)
paddy@39 145 change.Logo = &logo
paddy@39 146 expectation.Logo = logo
paddy@39 147 }
paddy@39 148 if i&clientChangeWebsite != 0 {
paddy@39 149 website = fmt.Sprintf("website-%d", i)
paddy@39 150 change.Website = &website
paddy@39 151 expectation.Website = website
paddy@39 152 }
paddy@39 153 result.ApplyChange(change)
paddy@39 154 match, field, expected, got := compareClients(expectation, result)
paddy@39 155 if !match {
paddy@39 156 t.Errorf("Expected field `%s` to be `%v`, got `%v`", field, expected, got)
paddy@39 157 }
paddy@39 158 for _, store := range clientStores {
paddy@39 159 err := store.SaveClient(client)
paddy@39 160 if err != nil {
paddy@39 161 t.Errorf("Error saving client in %T: %s", store, err)
paddy@39 162 }
paddy@39 163 err = store.UpdateClient(client.ID, change)
paddy@39 164 if err != nil {
paddy@39 165 t.Errorf("Error updating client in %T: %s", store, err)
paddy@39 166 }
paddy@39 167 retrieved, err := store.GetClient(client.ID)
paddy@39 168 if err != nil {
paddy@39 169 t.Errorf("Error getting profile from %T: %s", store, err)
paddy@39 170 }
paddy@39 171 match, field, expected, got = compareClients(expectation, retrieved)
paddy@39 172 if !match {
paddy@39 173 t.Errorf("Expected field `%s` to be `%v`, got `%v` from %T", field, expected, got, store)
paddy@39 174 }
paddy@39 175 err = store.DeleteClient(client.ID)
paddy@39 176 if err != nil {
paddy@39 177 t.Errorf("Error deleting client from %T: %s", store, err)
paddy@39 178 }
paddy@39 179 err = store.UpdateClient(client.ID, change)
paddy@39 180 if err != ErrClientNotFound {
paddy@39 181 t.Errorf("Expected ErrClientNotFound, got %v from %T", err, store)
paddy@39 182 }
paddy@39 183 }
paddy@39 184 }
paddy@39 185 }