Ctrl K
ComunidadGuías…

model/common_test.go

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package model

import (
	"net/http/httptest"
	"reflect"
	"slices"
	"testing"

	"github.com/gin-gonic/gin"
)

func TestCommonHasPermission(t *testing.T) {
	resource := &Common{ID: 10, UserID: 100}

	t.Run("unauthenticated denied", func(t *testing.T) {
		ctx, _ := gin.CreateTestContext(httptest.NewRecorder())
		if resource.HasPermission(ctx) {
			t.Fatal("expected unauthenticated request to be denied")
		}
	})

	t.Run("owner allowed", func(t *testing.T) {
		ctx, _ := gin.CreateTestContext(httptest.NewRecorder())
		ctx.Set(CtxKeyAuthorizedUser, &User{Common: Common{ID: 100}, Role: RoleMember})
		if !resource.HasPermission(ctx) {
			t.Fatal("expected owner to be allowed")
		}
	})

	t.Run("foreign member denied", func(t *testing.T) {
		ctx, _ := gin.CreateTestContext(httptest.NewRecorder())
		ctx.Set(CtxKeyAuthorizedUser, &User{Common: Common{ID: 200}, Role: RoleMember})
		if resource.HasPermission(ctx) {
			t.Fatal("expected non-owner member to be denied")
		}
	})

	t.Run("admin allowed", func(t *testing.T) {
		ctx, _ := gin.CreateTestContext(httptest.NewRecorder())
		ctx.Set(CtxKeyAuthorizedUser, &User{Common: Common{ID: 1}, Role: RoleAdmin})
		if !resource.HasPermission(ctx) {
			t.Fatal("expected admin to be allowed")
		}
	})
}

func TestSearchByID(t *testing.T) {
	t.Run("WithoutPriorityList", func(t *testing.T) {
		list, exp := []*DDNSProfile{
			{Common: Common{ID: 1}},
			{Common: Common{ID: 2}},
			{Common: Common{ID: 3}},
			{Common: Common{ID: 4}},
			{Common: Common{ID: 5}},
		}, []*DDNSProfile{
			{Common: Common{ID: 4}},
			{Common: Common{ID: 1}},
			{Common: Common{ID: 3}},
		}

		searchList := slices.Values([]string{"4", "1", "3"})
		filtered := SearchByID(searchList, list)
		if !reflect.DeepEqual(filtered, exp) {
			t.Fatalf("expected %v, but got %v", exp, filtered)
		}
	})

	t.Run("WithPriorityTest", func(t *testing.T) {
		list, exp := []*Server{
			{Common: Common{ID: 5}, DisplayIndex: 2},
			{Common: Common{ID: 4}, DisplayIndex: 1},
			{Common: Common{ID: 1}},
			{Common: Common{ID: 2}},
			{Common: Common{ID: 3}},
		}, []*Server{
			{Common: Common{ID: 4}, DisplayIndex: 1},
			{Common: Common{ID: 5}, DisplayIndex: 2},
			{Common: Common{ID: 3}},
		}

		searchList := slices.Values([]string{"3", "4", "5"})
		filtered := SearchByID(searchList, list)
		if !reflect.DeepEqual(filtered, exp) {
			t.Fatalf("expected %v, but got %v", exp, filtered)
		}
	})
}