Adjust + Test
This commit is contained in:
@@ -1,128 +1,263 @@
|
||||
package models_test
|
||||
package utils_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||
"cloud.o-forge.io/core/oc-lib/tools"
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestGenerateID(t *testing.T) {
|
||||
ao := &utils.AbstractObject{}
|
||||
ao.GenerateID()
|
||||
assert.NotEmpty(t, ao.UUID)
|
||||
_, err := uuid.Parse(ao.UUID)
|
||||
assert.NoError(t, err)
|
||||
// ---- AbstractObject ----
|
||||
|
||||
func TestAbstractObject_GetID(t *testing.T) {
|
||||
obj := &utils.AbstractObject{UUID: "abc-123"}
|
||||
assert.Equal(t, "abc-123", obj.GetID())
|
||||
}
|
||||
|
||||
func TestStoreDraftDefault(t *testing.T) {
|
||||
ao := &utils.AbstractObject{IsDraft: true}
|
||||
ao.StoreDraftDefault()
|
||||
assert.False(t, ao.IsDraft)
|
||||
func TestAbstractObject_GetName(t *testing.T) {
|
||||
obj := &utils.AbstractObject{Name: "test-name"}
|
||||
assert.Equal(t, "test-name", obj.GetName())
|
||||
}
|
||||
|
||||
func TestCanUpdate(t *testing.T) {
|
||||
ao := &utils.AbstractObject{}
|
||||
res, set := ao.CanUpdate(nil)
|
||||
assert.True(t, res)
|
||||
assert.Nil(t, set)
|
||||
func TestAbstractObject_GetCreatorID(t *testing.T) {
|
||||
obj := &utils.AbstractObject{CreatorID: "peer-xyz"}
|
||||
assert.Equal(t, "peer-xyz", obj.GetCreatorID())
|
||||
}
|
||||
|
||||
func TestCanDelete(t *testing.T) {
|
||||
ao := &utils.AbstractObject{}
|
||||
assert.True(t, ao.CanDelete())
|
||||
func TestAbstractObject_SetID(t *testing.T) {
|
||||
obj := &utils.AbstractObject{}
|
||||
obj.SetID("new-id")
|
||||
assert.Equal(t, "new-id", obj.UUID)
|
||||
}
|
||||
|
||||
func TestIsDrafted(t *testing.T) {
|
||||
ao := &utils.AbstractObject{IsDraft: true}
|
||||
assert.True(t, ao.IsDrafted())
|
||||
func TestAbstractObject_SetName(t *testing.T) {
|
||||
obj := &utils.AbstractObject{}
|
||||
obj.SetName("hello")
|
||||
assert.Equal(t, "hello", obj.Name)
|
||||
}
|
||||
|
||||
func TestGetID(t *testing.T) {
|
||||
u := uuid.New().String()
|
||||
ao := &utils.AbstractObject{UUID: u}
|
||||
assert.Equal(t, u, ao.GetID())
|
||||
func TestAbstractObject_GenerateID_WhenEmpty(t *testing.T) {
|
||||
obj := &utils.AbstractObject{}
|
||||
obj.GenerateID()
|
||||
assert.NotEmpty(t, obj.UUID)
|
||||
}
|
||||
|
||||
func TestGetName(t *testing.T) {
|
||||
name := "MyObject"
|
||||
ao := &utils.AbstractObject{Name: name}
|
||||
assert.Equal(t, name, ao.GetName())
|
||||
func TestAbstractObject_GenerateID_KeepsExisting(t *testing.T) {
|
||||
obj := &utils.AbstractObject{UUID: "existing-id"}
|
||||
obj.GenerateID()
|
||||
assert.Equal(t, "existing-id", obj.UUID)
|
||||
}
|
||||
|
||||
func TestGetCreatorID(t *testing.T) {
|
||||
id := "creator-123"
|
||||
ao := &utils.AbstractObject{CreatorID: id}
|
||||
assert.Equal(t, id, ao.GetCreatorID())
|
||||
func TestAbstractObject_StoreDraftDefault(t *testing.T) {
|
||||
obj := &utils.AbstractObject{IsDraft: true}
|
||||
obj.StoreDraftDefault()
|
||||
assert.False(t, obj.IsDraft)
|
||||
}
|
||||
|
||||
func TestUpToDate_CreateFalse(t *testing.T) {
|
||||
ao := &utils.AbstractObject{}
|
||||
now := time.Now()
|
||||
time.Sleep(time.Millisecond) // ensure time difference
|
||||
ao.UpToDate("user123", "peer456", false)
|
||||
assert.WithinDuration(t, now, ao.UpdateDate, time.Second)
|
||||
assert.Equal(t, "peer456", ao.UpdaterID)
|
||||
assert.Equal(t, "user123", ao.UserUpdaterID)
|
||||
assert.True(t, ao.CreationDate.IsZero())
|
||||
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 TestUpToDate_CreateTrue(t *testing.T) {
|
||||
ao := &utils.AbstractObject{}
|
||||
now := time.Now()
|
||||
time.Sleep(time.Millisecond)
|
||||
ao.UpToDate("user123", "peer456", true)
|
||||
assert.WithinDuration(t, now, ao.UpdateDate, time.Second)
|
||||
assert.WithinDuration(t, now, ao.CreationDate, time.Second)
|
||||
assert.Equal(t, "peer456", ao.UpdaterID)
|
||||
assert.Equal(t, "peer456", ao.CreatorID)
|
||||
assert.Equal(t, "user123", ao.UserUpdaterID)
|
||||
assert.Equal(t, "user123", ao.UserCreatorID)
|
||||
func TestAbstractObject_CanDelete(t *testing.T) {
|
||||
obj := &utils.AbstractObject{}
|
||||
assert.True(t, obj.CanDelete())
|
||||
}
|
||||
|
||||
func TestVerifyAuth(t *testing.T) {
|
||||
request := &tools.APIRequest{PeerID: "peer123"}
|
||||
ao := &utils.AbstractObject{CreatorID: "peer123"}
|
||||
assert.True(t, ao.VerifyAuth("get", request))
|
||||
|
||||
ao = &utils.AbstractObject{AccessMode: utils.Public}
|
||||
assert.True(t, ao.VerifyAuth("get", nil))
|
||||
|
||||
ao = &utils.AbstractObject{AccessMode: utils.Private, CreatorID: "peer123"}
|
||||
request = &tools.APIRequest{PeerID: "wrong"}
|
||||
assert.False(t, ao.VerifyAuth("get", request))
|
||||
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 TestGetObjectFilters(t *testing.T) {
|
||||
ao := &utils.AbstractObject{}
|
||||
f := ao.GetObjectFilters("*")
|
||||
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)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
// ---- VerifyAuth ----
|
||||
|
||||
func TestAbstractObject_VerifyAuth_NilRequest_GetPublic(t *testing.T) {
|
||||
obj := &utils.AbstractObject{AccessMode: 1} // Public = 1
|
||||
assert.True(t, obj.VerifyAuth("get", nil))
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
||||
|
||||
func TestAbstractObject_VerifyAuth_NilRequest_Private(t *testing.T) {
|
||||
obj := &utils.AbstractObject{AccessMode: 0} // Private
|
||||
assert.False(t, obj.VerifyAuth("get", nil))
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
||||
|
||||
// ---- GetObjectFilters ----
|
||||
|
||||
func TestAbstractObject_GetObjectFilters_Star(t *testing.T) {
|
||||
obj := &utils.AbstractObject{}
|
||||
f := obj.GetObjectFilters("*")
|
||||
assert.NotNil(t, f)
|
||||
assert.Contains(t, f.Or, "abstractobject.name")
|
||||
assert.Equal(t, dbs.LIKE.String(), f.Or["abstractobject.name"][0].Operator)
|
||||
}
|
||||
|
||||
func TestDeserialize(t *testing.T) {
|
||||
ao := &utils.AbstractObject{}
|
||||
input := map[string]interface{}{"name": "test", "id": uuid.New().String()}
|
||||
res := ao.Deserialize(input, &utils.AbstractObject{})
|
||||
assert.NotNil(t, res)
|
||||
func TestAbstractObject_GetObjectFilters_Search(t *testing.T) {
|
||||
obj := &utils.AbstractObject{}
|
||||
f := obj.GetObjectFilters("my-search")
|
||||
assert.NotNil(t, f)
|
||||
}
|
||||
|
||||
func TestSerialize(t *testing.T) {
|
||||
ao := &utils.AbstractObject{Name: "test", UUID: uuid.New().String()}
|
||||
m := ao.Serialize(ao)
|
||||
assert.Equal(t, "test", m["name"])
|
||||
// ---- 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())
|
||||
}
|
||||
|
||||
func TestAbstractAccessorMethods(t *testing.T) {
|
||||
r := &utils.AbstractAccessor{Request: &tools.APIRequest{Username: "alice", PeerID: "peer1", Groups: []string{"dev"}}}
|
||||
assert.True(t, r.ShouldVerifyAuth())
|
||||
assert.Equal(t, "alice", r.GetUser())
|
||||
assert.Equal(t, "peer1", r.GetPeerID())
|
||||
assert.Equal(t, []string{"dev"}, r.GetGroups())
|
||||
assert.Equal(t, r.Request.Caller, r.GetCaller())
|
||||
// ---- 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())
|
||||
}
|
||||
|
||||
func TestAbstractAccessor_GetRequest(t *testing.T) {
|
||||
req := &tools.APIRequest{Admin: true}
|
||||
acc := &utils.AbstractAccessor[*utils.AbstractObject]{Request: req}
|
||||
assert.Equal(t, req, acc.GetRequest())
|
||||
}
|
||||
|
||||
func TestAbstractAccessor_GetCaller_NilRequest(t *testing.T) {
|
||||
acc := &utils.AbstractAccessor[*utils.AbstractObject]{Request: nil}
|
||||
assert.Nil(t, acc.GetCaller())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user