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  }