Files
oc-lib/models/utils/tests/abstracts_test.go

264 lines
7.6 KiB
Go
Raw Normal View History

2026-02-18 12:24:19 +01:00
package utils_test
2025-06-16 11:24:39 +02:00
import (
"testing"
"cloud.o-forge.io/core/oc-lib/models/utils"
"cloud.o-forge.io/core/oc-lib/tools"
"github.com/stretchr/testify/assert"
)
2026-02-18 12:24:19 +01:00
// ---- AbstractObject ----
func TestAbstractObject_GetID(t *testing.T) {
obj := &utils.AbstractObject{UUID: "abc-123"}
assert.Equal(t, "abc-123", obj.GetID())
}
func TestAbstractObject_GetName(t *testing.T) {
obj := &utils.AbstractObject{Name: "test-name"}
assert.Equal(t, "test-name", obj.GetName())
}
func TestAbstractObject_GetCreatorID(t *testing.T) {
obj := &utils.AbstractObject{CreatorID: "peer-xyz"}
assert.Equal(t, "peer-xyz", obj.GetCreatorID())
}
func TestAbstractObject_SetID(t *testing.T) {
obj := &utils.AbstractObject{}
obj.SetID("new-id")
assert.Equal(t, "new-id", obj.UUID)
}
func TestAbstractObject_SetName(t *testing.T) {
obj := &utils.AbstractObject{}
obj.SetName("hello")
assert.Equal(t, "hello", obj.Name)
}
func TestAbstractObject_GenerateID_WhenEmpty(t *testing.T) {
obj := &utils.AbstractObject{}
obj.GenerateID()
assert.NotEmpty(t, obj.UUID)
}
func TestAbstractObject_GenerateID_KeepsExisting(t *testing.T) {
obj := &utils.AbstractObject{UUID: "existing-id"}
obj.GenerateID()
assert.Equal(t, "existing-id", obj.UUID)
}
func TestAbstractObject_StoreDraftDefault(t *testing.T) {
obj := &utils.AbstractObject{IsDraft: true}
obj.StoreDraftDefault()
assert.False(t, obj.IsDraft)
}
func TestAbstractObject_IsDrafted(t *testing.T) {
obj := &utils.AbstractObject{IsDraft: true}
assert.True(t, obj.IsDrafted())
obj.IsDraft = false
assert.False(t, obj.IsDrafted())
}
func TestAbstractObject_CanDelete(t *testing.T) {
obj := &utils.AbstractObject{}
assert.True(t, obj.CanDelete())
}
func TestAbstractObject_CanUpdate(t *testing.T) {
obj := &utils.AbstractObject{UUID: "id-1"}
other := &utils.AbstractObject{UUID: "id-2"}
ok, returned := obj.CanUpdate(other)
assert.True(t, ok)
assert.Equal(t, other, returned)
}
func TestAbstractObject_Unsign(t *testing.T) {
obj := &utils.AbstractObject{Signature: []byte("sig")}
obj.Unsign()
assert.Nil(t, obj.Signature)
}
func TestAbstractObject_GetSignature(t *testing.T) {
obj := &utils.AbstractObject{Signature: []byte("sig")}
assert.Equal(t, []byte("sig"), obj.GetSignature())
}
func TestAbstractObject_DeepCopy(t *testing.T) {
obj := &utils.AbstractObject{UUID: "id-1", Name: "original"}
copy := obj.DeepCopy()
assert.NotNil(t, copy)
assert.Equal(t, obj.UUID, copy.UUID)
assert.Equal(t, obj.Name, copy.Name)
// Mutating the copy should not affect the original
copy.Name = "modified"
assert.Equal(t, "original", obj.Name)
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_UpToDate_Create(t *testing.T) {
obj := &utils.AbstractObject{CreatorID: ""}
obj.UpToDate("user1", "peer1", true)
assert.Equal(t, "peer1", obj.UpdaterID)
assert.Equal(t, "user1", obj.UserUpdaterID)
// CreatorID was empty so create branch is skipped
assert.Empty(t, obj.CreatorID)
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_UpToDate_CreateWithExistingCreator(t *testing.T) {
obj := &utils.AbstractObject{CreatorID: "existing-peer"}
obj.UpToDate("user1", "peer1", true)
assert.Equal(t, "peer1", obj.CreatorID)
assert.Equal(t, "user1", obj.UserCreatorID)
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_UpToDate_Update(t *testing.T) {
obj := &utils.AbstractObject{CreatorID: "original-peer"}
obj.UpToDate("user2", "peer2", false)
assert.Equal(t, "peer2", obj.UpdaterID)
assert.Equal(t, "original-peer", obj.CreatorID) // unchanged
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
// ---- VerifyAuth ----
func TestAbstractObject_VerifyAuth_NilRequest_GetPublic(t *testing.T) {
obj := &utils.AbstractObject{AccessMode: 1} // Public = 1
assert.True(t, obj.VerifyAuth("get", nil))
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_VerifyAuth_NilRequest_DeletePublic(t *testing.T) {
obj := &utils.AbstractObject{AccessMode: 1} // Public = 1
// non-"get" call with nil request → false
assert.False(t, obj.VerifyAuth("delete", nil))
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_VerifyAuth_NilRequest_Private(t *testing.T) {
obj := &utils.AbstractObject{AccessMode: 0} // Private
assert.False(t, obj.VerifyAuth("get", nil))
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_VerifyAuth_AdminRequest(t *testing.T) {
obj := &utils.AbstractObject{}
req := &tools.APIRequest{Admin: true}
assert.True(t, obj.VerifyAuth("get", req))
assert.True(t, obj.VerifyAuth("delete", req))
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_VerifyAuth_MatchingPeerID(t *testing.T) {
obj := &utils.AbstractObject{CreatorID: "peer-abc"}
req := &tools.APIRequest{PeerID: "peer-abc"}
assert.True(t, obj.VerifyAuth("get", req))
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_VerifyAuth_MismatchedPeerID(t *testing.T) {
obj := &utils.AbstractObject{CreatorID: "peer-abc"}
req := &tools.APIRequest{PeerID: "peer-xyz"}
assert.False(t, obj.VerifyAuth("get", req))
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_VerifyAuth_EmptyPeerID(t *testing.T) {
obj := &utils.AbstractObject{CreatorID: ""}
req := &tools.APIRequest{PeerID: ""}
// both empty → condition `ao.CreatorID == request.PeerID && request.PeerID != ""` is false
assert.False(t, obj.VerifyAuth("get", req))
}
2025-06-16 11:24:39 +02:00
2026-02-18 12:24:19 +01:00
// ---- GetObjectFilters ----
2025-06-16 11:24:39 +02:00
2026-02-18 12:24:19 +01:00
func TestAbstractObject_GetObjectFilters_Star(t *testing.T) {
obj := &utils.AbstractObject{}
f := obj.GetObjectFilters("*")
assert.NotNil(t, f)
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractObject_GetObjectFilters_Search(t *testing.T) {
obj := &utils.AbstractObject{}
f := obj.GetObjectFilters("my-search")
2025-06-16 11:24:39 +02:00
assert.NotNil(t, f)
}
2026-02-18 12:24:19 +01:00
// ---- Serialize / Deserialize ----
func TestAbstractObject_SerializeDeserialize(t *testing.T) {
obj := &utils.AbstractObject{UUID: "serial-id", Name: "serial-name"}
m := obj.Serialize(obj)
assert.NotNil(t, m)
dst := &utils.AbstractObject{}
result := obj.Deserialize(m, dst)
assert.NotNil(t, result)
assert.Equal(t, "serial-id", result.GetID())
}
// ---- GetAccessor ----
func TestAbstractObject_GetAccessor_ReturnsNil(t *testing.T) {
obj := &utils.AbstractObject{}
acc := obj.GetAccessor(nil)
assert.Nil(t, acc)
}
// ---- AbstractAccessor ----
func TestAbstractAccessor_GetUser_NilRequest(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{Request: nil}
assert.Equal(t, "", acc.GetUser())
}
func TestAbstractAccessor_GetUser_WithRequest(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{
Request: &tools.APIRequest{Username: "alice"},
}
assert.Equal(t, "alice", acc.GetUser())
}
func TestAbstractAccessor_GetPeerID_NilRequest(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{Request: nil}
assert.Equal(t, "", acc.GetPeerID())
}
func TestAbstractAccessor_GetPeerID_WithRequest(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{
Request: &tools.APIRequest{PeerID: "peer-42"},
}
assert.Equal(t, "peer-42", acc.GetPeerID())
}
func TestAbstractAccessor_GetGroups_NilRequest(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{Request: nil}
assert.Equal(t, []string{}, acc.GetGroups())
}
func TestAbstractAccessor_GetGroups_WithRequest(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{
Request: &tools.APIRequest{Groups: []string{"g1", "g2"}},
}
assert.Equal(t, []string{"g1", "g2"}, acc.GetGroups())
}
func TestAbstractAccessor_ShouldVerifyAuth(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{}
assert.True(t, acc.ShouldVerifyAuth())
}
func TestAbstractAccessor_GetType(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{
Type: tools.WORKFLOW,
}
assert.Equal(t, tools.WORKFLOW, acc.GetType())
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractAccessor_GetRequest(t *testing.T) {
req := &tools.APIRequest{Admin: true}
acc := &utils.AbstractAccessor[*utils.AbstractObject]{Request: req}
assert.Equal(t, req, acc.GetRequest())
2025-06-16 11:24:39 +02:00
}
2026-02-18 12:24:19 +01:00
func TestAbstractAccessor_GetCaller_NilRequest(t *testing.T) {
acc := &utils.AbstractAccessor[*utils.AbstractObject]{Request: nil}
assert.Nil(t, acc.GetCaller())
2025-06-16 11:24:39 +02:00
}