github.com/resonatecoop/user-api@v1.0.0-13.0.20220915120639-05dc9c04014a/server/user_test.go (about) 1 package server_test 2 3 import ( 4 "fmt" 5 6 "github.com/resonatecoop/user-api/model" 7 8 _ "github.com/jackc/pgx/v4/stdlib" 9 pbUser "github.com/resonatecoop/user-api/proto/user" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 // type UserApiTestSuite struct { 14 // suite.Suite 15 // db *bun.DB 16 // ctx context.Context 17 // } 18 19 // func (suite *UserApiTestSuite) SetupTest() { 20 // //TODO 21 // } 22 23 func getIntPointer(value int32) *int32 { 24 return &value 25 } 26 27 func (suite *UserApiTestSuite) TestAddUser() { 28 ctx := suite.ctx 29 30 // When attempting to add a user with admin access, 31 // the user is created but limited to default user role 32 newuser := pbUser.UserAddRequest{ 33 Username: "joe@bloggs.com", 34 FullName: "Joe Bloggs", 35 RoleId: getIntPointer(1), 36 } 37 38 _, err := suite.server.AddUser(ctx, &newuser) 39 if err != nil { 40 panic(err) 41 } 42 43 user := new(model.User) 44 45 err = suite.db.NewSelect(). 46 Model(user). 47 Where("username = ?", "joe@bloggs.com"). 48 Limit(1). 49 Scan(ctx) 50 51 // the record exists 52 assert.Nil(suite.T(), err) 53 54 // but the role has been limited to default 55 assert.Equal(suite.T(), int32(model.UserRole), user.RoleID) 56 } 57 58 func (suite *UserApiTestSuite) TestDeleteUser() { 59 60 ctx := suite.ctx 61 62 type cases []pbUser.UserRequest 63 64 users := cases{ 65 {Id: "243b4178-6f98-4bf1-bbb1-46b57a901816"}, 66 {Id: "5253747c-2b8c-40e2-8a70-bab91348a9bd"}, 67 {Id: "86a72db9-eb16-45ae-8003-ac37d8dc5cbb"}, 68 } 69 70 var response *pbUser.UserListResponse 71 var empty *pbUser.Empty 72 73 response, err := suite.server.ListUsers(ctx, empty) 74 if err != nil { 75 panic(err) 76 } 77 78 assert.Equal(suite.T(), 5, len(response.User)) 79 80 _, err = suite.server.DeleteUser(ctx, &users[0]) 81 if err != nil { 82 panic(err) 83 } 84 85 response, err = suite.server.ListUsers(ctx, empty) 86 if err != nil { 87 panic(err) 88 } 89 assert.Equal(suite.T(), 4, len(response.User)) 90 91 newuser := pbUser.UserAddRequest{ 92 Username: "joe@bloggs.com", 93 FullName: "Joe Bloggs", 94 } 95 96 _, err = suite.server.AddUser(ctx, &newuser) 97 if err != nil { 98 panic(err) 99 } 100 101 response, err = suite.server.ListUsers(ctx, empty) 102 if err != nil { 103 panic(err) 104 } 105 assert.Equal(suite.T(), 5, len(response.User)) 106 107 user := new(model.User) 108 109 if err = suite.db.NewSelect(). 110 Model(user). 111 Where("id = ?", "80b26113-37e0-456a-9f75-01db0eb550f8"). 112 Limit(1). 113 Scan(ctx); err != nil { 114 fmt.Printf("No such user returned!") 115 } 116 } 117 118 // func (db *bun.DB, ctx context.Context) RunUserTests() { 119 // testrun := new(UserApiTestSuite) 120 // testrun.db = db 121 // testrun.ctx = ctx 122 123 // suite.Run(nil, testrun) 124 // } 125 126 // func (suite *OauthTestSuite) TestUserExistsFindsValidUser() { 127 // validUsername := suite.users[0].Username 128 // assert.True(suite.T(), suite.service.UserExists(validUsername)) 129 // } 130 131 // func (suite *OauthTestSuite) TestUserExistsDoesntFindInvalidUser() { 132 // invalidUsername := "bogus_name" 133 // assert.False(suite.T(), suite.service.UserExists(invalidUsername)) 134 // } 135 136 // func (suite *OauthTestSuite) TestUpdateUsernameWorksWithValidEntry() { 137 // user, err := suite.service.CreateUser( 138 // model.UserRole, // role ID 139 // "test@newuser", // username 140 // "test_password", // password 141 // ) 142 143 // assert.NoError(suite.T(), err) 144 // assert.NotNil(suite.T(), user) 145 // assert.Equal(suite.T(), "test@newuser", user.Username) 146 147 // newUsername := "mynew@email" 148 149 // err = suite.service.UpdateUsername(user, newUsername) 150 151 // assert.NoError(suite.T(), err) 152 153 // assert.Equal(suite.T(), newUsername, user.Username) 154 // } 155 156 // func (suite *OauthTestSuite) TestUpdateUsernameTxWorksWithValidEntry() { 157 // user, err := suite.service.CreateUser( 158 // roles.User, // role ID 159 // "test@newuser", // username 160 // "test_password", // password 161 // ) 162 163 // assert.NoError(suite.T(), err) 164 // assert.NotNil(suite.T(), user) 165 // assert.Equal(suite.T(), "test@newuser", user.Username) 166 167 // newUsername := "mynew@email" 168 169 // err = suite.service.UpdateUsernameTx(suite.db, user, newUsername) 170 171 // assert.NoError(suite.T(), err) 172 173 // assert.Equal(suite.T(), newUsername, user.Username) 174 // } 175 176 // func (suite *OauthTestSuite) TestUpdateUsernameFailsWithABlankEntry() { 177 // user, err := suite.service.CreateUser( 178 // roles.User, // role ID 179 // "test@newuser", // username 180 // "test_password", // password 181 // ) 182 183 // assert.NoError(suite.T(), err) 184 // assert.NotNil(suite.T(), user) 185 // assert.Equal(suite.T(), "test@newuser", user.Username) 186 187 // newUsername := "" 188 189 // err = suite.service.UpdateUsername(user, newUsername) 190 191 // assert.EqualError(suite.T(), err, oauth.ErrCannotSetEmptyUsername.Error()) 192 193 // assert.NotEqual(suite.T(), newUsername, user.Username) 194 // } 195 196 // func (suite *OauthTestSuite) TestFindUserByUsername() { 197 // var ( 198 // user *model.User 199 // err error 200 // ) 201 202 // // When we try to find a user with a bogus username 203 // user, err = suite.service.FindUserByUsername("bogus") 204 205 // // User object should be nil 206 // assert.Nil(suite.T(), user) 207 208 // // Correct error should be returned 209 // if assert.NotNil(suite.T(), err) { 210 // assert.Equal(suite.T(), oauth.ErrUserNotFound, err) 211 // } 212 213 // // When we try to find a user with a valid username 214 // user, err = suite.service.FindUserByUsername("test@user") 215 216 // // Error should be nil 217 // assert.Nil(suite.T(), err) 218 219 // // Correct user object should be returned 220 // if assert.NotNil(suite.T(), user) { 221 // assert.Equal(suite.T(), "test@user", user.Username) 222 // } 223 224 // // Test username case insensitiviness 225 // user, err = suite.service.FindUserByUsername("TeSt@UsEr") 226 227 // // Error should be nil 228 // assert.Nil(suite.T(), err) 229 230 // // Correct user object should be returned 231 // if assert.NotNil(suite.T(), user) { 232 // assert.Equal(suite.T(), "test@user", user.Username) 233 // } 234 // } 235 236 // func (suite *OauthTestSuite) TestCreateUser() { 237 // var ( 238 // user *model.User 239 // err error 240 // ) 241 242 // // We try to insert a non unique user 243 // user, err = suite.service.CreateUser( 244 // roles.User, // role ID 245 // "test@user", // username 246 // "test_password", // password 247 // ) 248 249 // // User object should be nil 250 // assert.Nil(suite.T(), user) 251 252 // // Correct error should be returned 253 // if assert.NotNil(suite.T(), err) { 254 // assert.Equal(suite.T(), oauth.ErrUsernameTaken.Error(), err.Error()) 255 // } 256 257 // // We try to insert a unique user 258 // user, err = suite.service.CreateUser( 259 // roles.User, // role ID 260 // "test@newuser", // username 261 // "test_password", // password 262 // ) 263 264 // // Error should be nil 265 // assert.Nil(suite.T(), err) 266 267 // // Correct user object should be returned 268 // if assert.NotNil(suite.T(), user) { 269 // assert.Equal(suite.T(), "test@newuser", user.Username) 270 // } 271 272 // // Test username case insensitivity 273 // user, err = suite.service.CreateUser( 274 // roles.User, // role ID 275 // "TeSt@NeWuSeR2", // username 276 // "test_password", // password 277 // ) 278 279 // // Error should be nil 280 // assert.Nil(suite.T(), err) 281 282 // // Correct user object should be returned 283 // if assert.NotNil(suite.T(), user) { 284 // assert.Equal(suite.T(), "test@newuser2", user.Username) 285 // } 286 // } 287 288 // func (suite *OauthTestSuite) TestSetPassword() { 289 // var ( 290 // user *model.User 291 // err error 292 // ) 293 294 // // Insert a test user without a password 295 // user = &model.User{ 296 // MyGormModel: model.MyGormModel{ 297 // ID: uuid.New(), 298 // CreatedAt: time.Now().UTC(), 299 // }, 300 // RoleID: util.StringOrNull(roles.User), 301 // Username: "test@user_nopass", 302 // Password: util.StringOrNull(""), 303 // } 304 // err = suite.suite.db.Create(user).Error 305 // assert.NoError(suite.T(), err, "Inserting test data failed") 306 307 // // Try to set an empty password 308 // err = suite.service.SetPassword(user, "") 309 310 // // Correct error should be returned 311 // if assert.NotNil(suite.T(), err) { 312 // assert.Equal(suite.T(), oauth.ErrPasswordTooShort, err) 313 // } 314 315 // // Try changing the password 316 // err = suite.service.SetPassword(user, "test_password") 317 318 // // Error should be nil 319 // assert.Nil(suite.T(), err) 320 321 // // User object should have been updated 322 // assert.Equal(suite.T(), "test@user_nopass", user.Username) 323 // assert.Nil(suite.T(), pass.VerifyPassword(user.Password.String, "test_password")) 324 // } 325 326 // func (suite *OauthTestSuite) TestAuthUser() { 327 // var ( 328 // user *model.User 329 // err error 330 // ) 331 332 // // Insert a test user without a password 333 // err = suite.suite.db.Create(&model.User{ 334 // MyGormModel: model.MyGormModel{ 335 // ID: uuid.New(), 336 // CreatedAt: time.Now().UTC(), 337 // }, 338 // RoleID: util.StringOrNull(roles.User), 339 // Username: "test@user_nopass", 340 // Password: util.StringOrNull(""), 341 // }).Error 342 // assert.NoError(suite.T(), err, "Inserting test data failed") 343 344 // // When we try to authenticate a user without a password 345 // user, err = suite.service.AuthUser("test@user_nopass", "bogus") 346 347 // // User object should be nil 348 // assert.Nil(suite.T(), user) 349 350 // // Correct error should be returned 351 // if assert.NotNil(suite.T(), err) { 352 // assert.Equal(suite.T(), oauth.ErrUserPasswordNotSet, err) 353 // } 354 355 // // When we try to authenticate with a bogus username 356 // user, err = suite.service.AuthUser("bogus", "test_password") 357 358 // // User object should be nil 359 // assert.Nil(suite.T(), user) 360 361 // // Correct error should be returned 362 // if assert.NotNil(suite.T(), err) { 363 // assert.Equal(suite.T(), oauth.ErrUserNotFound, err) 364 // } 365 366 // // When we try to authenticate with an invalid password 367 // user, err = suite.service.AuthUser("test@user", "bogus") 368 369 // // User object should be nil 370 // assert.Nil(suite.T(), user) 371 372 // // Correct error should be returned 373 // if assert.NotNil(suite.T(), err) { 374 // assert.Equal(suite.T(), oauth.ErrInvalidUserPassword, err) 375 // } 376 377 // // When we try to authenticate with valid username and password 378 // user, err = suite.service.AuthUser("test@user", "test_password") 379 380 // // Error should be nil 381 // assert.Nil(suite.T(), err) 382 383 // // Correct user object should be returned 384 // if assert.NotNil(suite.T(), user) { 385 // assert.Equal(suite.T(), "test@user", user.Username) 386 // } 387 388 // // Test username case insensitivity 389 // user, err = suite.service.AuthUser("TeSt@UsEr", "test_password") 390 391 // // Error should be nil 392 // assert.Nil(suite.T(), err) 393 394 // // Correct user object should be returned 395 // if assert.NotNil(suite.T(), user) { 396 // assert.Equal(suite.T(), "test@user", user.Username) 397 // } 398 // } 399 400 // func (suite *OauthTestSuite) TestBlankPassword() { 401 // var ( 402 // user *model.User 403 // err error 404 // ) 405 406 // user, err = suite.service.CreateUser( 407 // roles.User, // role ID 408 // "test@user_nopass", // username 409 // "", // password, 410 // ) 411 412 // // Error should be nil 413 // assert.Nil(suite.T(), err) 414 415 // // Correct user object should be returned 416 // if assert.NotNil(suite.T(), user) { 417 // assert.Equal(suite.T(), "test@user_nopass", user.Username) 418 // } 419 420 // // When we try to authenticate 421 // user, err = suite.service.AuthUser("test@user_nopass", "") 422 423 // // User object should be nil 424 // assert.Nil(suite.T(), user) 425 426 // // Correct error should be returned 427 // if assert.NotNil(suite.T(), err) { 428 // assert.Equal(suite.T(), oauth.ErrUserPasswordNotSet, err) 429 // } 430 // }