github.com/condensat/bank-core@v0.1.0/database/query/userrole_test.go (about) 1 // Copyright 2020 Condensat Tech. All rights reserved. 2 // Use of this source code is governed by a MIT 3 // license that can be found in the LICENSE file. 4 5 package query 6 7 import ( 8 "testing" 9 10 "github.com/condensat/bank-core/database" 11 "github.com/condensat/bank-core/database/model" 12 "github.com/condensat/bank-core/database/query/tests" 13 14 "github.com/jinzhu/gorm" 15 ) 16 17 func TestUserHasRole(t *testing.T) { 18 const databaseName = "TestUserHasRole" 19 t.Parallel() 20 21 db := tests.Setup(databaseName, UserModel()) 22 defer tests.Teardown(db, databaseName) 23 24 user, err := FindOrCreateUser(db, model.User{ 25 Name: "test", 26 Email: "test@condensat.tech", 27 }) 28 if err != nil { 29 t.Errorf("Unable to add user") 30 return 31 } 32 // check 1..N relation 33 addUserRole(db, user.ID, model.RoleName("foo")) 34 addUserRole(db, user.ID, model.RoleName("bar")) 35 36 admin, err := FindOrCreateUser(db, model.User{ 37 Name: "admin", 38 Email: "admin@condensat.tech", 39 }) 40 if err != nil { 41 t.Errorf("Unable to add admin") 42 return 43 } 44 // check 1..N relation for multiple users 45 addUserRole(db, admin.ID, model.RoleName("foo")) 46 addUserRole(db, admin.ID, model.RoleName("bar")) 47 addUserRole(db, admin.ID, model.RoleNameAdmin) 48 49 type args struct { 50 userID model.UserID 51 role model.RoleName 52 } 53 tests := []struct { 54 name string 55 args args 56 want bool 57 wantErr bool 58 }{ 59 {"default", args{}, false, true}, 60 61 {"valid", args{user.ID, model.RoleNameDefault}, true, false}, 62 63 {"foo", args{user.ID, model.RoleName("foo")}, true, false}, 64 {"bar", args{user.ID, model.RoleName("bar")}, true, false}, 65 {"foobar", args{user.ID, model.RoleName("foobar")}, false, false}, 66 67 {"user", args{user.ID, model.RoleNameAdmin}, false, false}, 68 {"admin", args{admin.ID, model.RoleNameAdmin}, true, false}, 69 } 70 for _, tt := range tests { 71 tt := tt // capture range variable 72 t.Run(tt.name, func(t *testing.T) { 73 got, err := UserHasRole(db, tt.args.userID, tt.args.role) 74 if (err != nil) != tt.wantErr { 75 t.Errorf("UserHasRole() error = %v, wantErr %v", err, tt.wantErr) 76 return 77 } 78 if got != tt.want { 79 t.Errorf("UserHasRole() = %v, want %v", got, tt.want) 80 } 81 }) 82 } 83 } 84 85 func addUserRole(db database.Context, userID model.UserID, role model.RoleName) { 86 gdb := db.DB().(*gorm.DB) 87 88 err := gdb.Create(&model.UserRole{ 89 UserID: userID, 90 Role: role, 91 }).Error 92 if err != nil { 93 panic(err) 94 } 95 }