129 lines
3.5 KiB
Go
129 lines
3.5 KiB
Go
|
package models_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)
|
||
|
}
|
||
|
|
||
|
func TestStoreDraftDefault(t *testing.T) {
|
||
|
ao := &utils.AbstractObject{IsDraft: true}
|
||
|
ao.StoreDraftDefault()
|
||
|
assert.False(t, ao.IsDraft)
|
||
|
}
|
||
|
|
||
|
func TestCanUpdate(t *testing.T) {
|
||
|
ao := &utils.AbstractObject{}
|
||
|
res, set := ao.CanUpdate(nil)
|
||
|
assert.True(t, res)
|
||
|
assert.Nil(t, set)
|
||
|
}
|
||
|
|
||
|
func TestCanDelete(t *testing.T) {
|
||
|
ao := &utils.AbstractObject{}
|
||
|
assert.True(t, ao.CanDelete())
|
||
|
}
|
||
|
|
||
|
func TestIsDrafted(t *testing.T) {
|
||
|
ao := &utils.AbstractObject{IsDraft: true}
|
||
|
assert.True(t, ao.IsDrafted())
|
||
|
}
|
||
|
|
||
|
func TestGetID(t *testing.T) {
|
||
|
u := uuid.New().String()
|
||
|
ao := &utils.AbstractObject{UUID: u}
|
||
|
assert.Equal(t, u, ao.GetID())
|
||
|
}
|
||
|
|
||
|
func TestGetName(t *testing.T) {
|
||
|
name := "MyObject"
|
||
|
ao := &utils.AbstractObject{Name: name}
|
||
|
assert.Equal(t, name, ao.GetName())
|
||
|
}
|
||
|
|
||
|
func TestGetCreatorID(t *testing.T) {
|
||
|
id := "creator-123"
|
||
|
ao := &utils.AbstractObject{CreatorID: id}
|
||
|
assert.Equal(t, id, ao.GetCreatorID())
|
||
|
}
|
||
|
|
||
|
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 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 TestVerifyAuth(t *testing.T) {
|
||
|
request := &tools.APIRequest{PeerID: "peer123"}
|
||
|
ao := &utils.AbstractObject{CreatorID: "peer123"}
|
||
|
assert.True(t, ao.VerifyAuth(request))
|
||
|
|
||
|
ao = &utils.AbstractObject{AccessMode: utils.Public}
|
||
|
assert.True(t, ao.VerifyAuth(nil))
|
||
|
|
||
|
ao = &utils.AbstractObject{AccessMode: utils.Private, CreatorID: "peer123"}
|
||
|
request = &tools.APIRequest{PeerID: "wrong"}
|
||
|
assert.False(t, ao.VerifyAuth(request))
|
||
|
}
|
||
|
|
||
|
func TestGetObjectFilters(t *testing.T) {
|
||
|
ao := &utils.AbstractObject{}
|
||
|
f := ao.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 TestSerialize(t *testing.T) {
|
||
|
ao := &utils.AbstractObject{Name: "test", UUID: uuid.New().String()}
|
||
|
m := ao.Serialize(ao)
|
||
|
assert.Equal(t, "test", m["name"])
|
||
|
}
|
||
|
|
||
|
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())
|
||
|
}
|