Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
userFileSystemStore_test.go 5.50 KiB
package rbac

import (
	"context"
	"reflect"
	"testing"

	"code.fbi.h-da.de/danet/gosdn/controller/conflict"
	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
	"code.fbi.h-da.de/danet/gosdn/controller/store"
	"github.com/google/uuid"
	"go.mongodb.org/mongo-driver/mongo"
)

func TestFileSystemUserStore_Add(t *testing.T) {
	defer ensureStoreFileForTestsIsRemoved(store.UserFilename)

	type args struct {
		UserToAdd rbac.User
	}
	var idtest uuid.UUID
	var role map[string]string
	tokens := []string{"svsvsfbdwbwbev"}
	testingUser := NewUser(idtest, "testUser", role, "xyz", tokens, "svswvasfbw", conflict.Metadata{})
	tests := []struct {
		name    string
		args    args
		wantErr bool
	}{
		{
			"testUser",
			args{testingUser},
			false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			s := NewUserStore(&mongo.Database{})

			if err := s.Add(context.TODO(), tt.args.UserToAdd); (err != nil) != tt.wantErr {
				t.Errorf("FileSystemUserStore.Add() error = %v, wantErr %v", err, tt.wantErr)
			}
		})
	}
}

func TestFileSystemUserStore_Delete(t *testing.T) {
	defer ensureStoreFileForTestsIsRemoved(store.UserFilename)

	type args struct {
		UserToDelete rbac.User
	}
	var idtest uuid.UUID
	var role map[string]string
	tokens := []string{"svsvsfbdwbwbev"}
	testingUser := NewUser(idtest, "", role, "xyz", tokens, "svswvasfbw", conflict.Metadata{})
	tests := []struct {
		name    string
		args    args
		wantErr bool
	}{
		{
			"testUser",
			args{testingUser},
			false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			s := NewUserStore(&mongo.Database{})
			if err := s.Add(context.TODO(), testingUser); err != nil {
				t.Error(err)
			}
			if err := s.Delete(context.TODO(), tt.args.UserToDelete); (err != nil) != tt.wantErr {
				t.Errorf("FileSystemUserStore.Delete() error = %v, wantErr %v", err, tt.wantErr)
			}
		})
	}
}

func TestFileSystemUserStore_Get(t *testing.T) {
	defer ensureStoreFileForTestsIsRemoved(store.UserFilename)

	type args struct {
		query store.Query
	}
	var idtest uuid.UUID
	var role map[string]string
	tokens := []string{"svsvsfbdwbwbev"}
	testingUser := NewUser(idtest, "", role, "xyz", tokens, "svswvasfbw", conflict.Metadata{})
	tests := []struct {
		name    string
		args    args
		want    rbac.LoadedUser
		wantErr bool
	}{
		{
			"testUser",
			args{
				store.Query{ID: idtest, Name: "test"},
			},
			rbac.LoadedUser{ID: idtest.String(), UserName: "", Roles: role, Password: "xyz", Tokens: tokens, Salt: "svswvasfbw"},
			false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			s := NewUserStore(&mongo.Database{})
			if err := s.Add(context.TODO(), testingUser); err != nil {
				t.Error(err)
			}
			got, err := s.Get(context.TODO(), tt.args.query)
			if (err != nil) != tt.wantErr {
				t.Errorf("FileSystemUserStore.Get() error = %v, wantErr %v", err, tt.wantErr)
				return
			}
			if !reflect.DeepEqual(got, tt.want) {
				t.Errorf("FileSystemUserStore.Get() = %v, want %v", got, tt.want)
			}
		})
	}
}

func TestFileSystemUserStore_GetAll(t *testing.T) {
	defer ensureStoreFileForTestsIsRemoved(store.UserFilename)

	var idtest uuid.UUID
	var role map[string]string
	tokens := []string{"svsvsfbdwbwbev"}
	testingUser1 := NewUser(idtest, "", role, "xyz", tokens, "svswvasfbwasv", conflict.Metadata{})
	testingUser2 := NewUser(idtest, "", role, "abc", tokens, "svswvasfbwadf", conflict.Metadata{})
	testingUser3 := NewUser(idtest, "", role, "lmn", tokens, "svswvasfbwasd", conflict.Metadata{})
	tests := []struct {
		name    string
		want    []rbac.LoadedUser
		wantErr bool
	}{
		{
			"testUser",
			[]rbac.LoadedUser{{ID: idtest.String(), UserName: "", Roles: role, Password: "xyz", Tokens: tokens, Salt: "svswvasfbwasv"}, {ID: idtest.String(), UserName: "", Roles: role, Password: "abc", Tokens: tokens, Salt: "svswvasfbwadf"}, {ID: idtest.String(), UserName: "", Roles: role, Password: "lmn", Tokens: tokens, Salt: "svswvasfbwasd"}},
			false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			var errs []error
			s := NewUserStore(&mongo.Database{})
			if err := s.Add(context.TODO(), testingUser1); err != nil {
				errs = append(errs, err)
			}
			if err := s.Add(context.TODO(), testingUser2); err != nil {
				errs = append(errs, err)
			}
			if err := s.Add(context.TODO(), testingUser3); err != nil {
				errs = append(errs, err)
			}

			if len(errs) > 0 {
				t.Error(errs)
			}

			got, err := s.GetAll(context.TODO())
			if (err != nil) != tt.wantErr {
				t.Errorf("FileSystemUserStore.GetAll() error = %v, wantErr %v", err, tt.wantErr)
				return
			}
			if !reflect.DeepEqual(got, tt.want) {
				t.Errorf("FileSystemUserStore.GetAll() = %v, want %v", got, tt.want)
			}
		})
	}
}

func TestFileSystemUserStore_Update(t *testing.T) {
	defer ensureStoreFileForTestsIsRemoved(store.UserFilename)

	type args struct {
		userToUpdate rbac.User
	}
	var idtest uuid.UUID
	var role map[string]string
	tokens := []string{"svsvsfbdwbwbev"}
	testingUser := NewUser(idtest, "", role, "xyz", tokens, "svswvasfbw", conflict.Metadata{})
	tests := []struct {
		name    string
		args    args
		wantErr bool
	}{
		{
			"testUser",
			args{
				testingUser,
			},
			false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			s := NewUserStore(&mongo.Database{})
			if err := s.Add(context.TODO(), testingUser); err != nil {
				t.Error(err)
			}
			if err := s.Update(context.TODO(), tt.args.userToUpdate); (err != nil) != tt.wantErr {
				t.Errorf("FileSystemUserStore.Update() error = %v, wantErr %v", err, tt.wantErr)
			}
		})
	}
}