mirror of
https://github.com/safing/portbase
synced 2025-09-01 18:19:57 +00:00
108 lines
2.5 KiB
Go
108 lines
2.5 KiB
Go
// Copyright Safing ICS Technologies GmbH. Use of this source code is governed by the AGPL license that can be found in the LICENSE file.
|
|
|
|
package database
|
|
|
|
import (
|
|
"testing"
|
|
|
|
datastore "github.com/ipfs/go-datastore"
|
|
)
|
|
|
|
type TestingModel struct {
|
|
Base
|
|
Name string
|
|
Value string
|
|
}
|
|
|
|
var testingModel *TestingModel
|
|
|
|
func init() {
|
|
RegisterModel(testingModel, func() Model { return new(TestingModel) })
|
|
}
|
|
|
|
func (m *TestingModel) Create(name string) error {
|
|
return m.CreateObject(&Tests, name, m)
|
|
}
|
|
|
|
func (m *TestingModel) CreateInNamespace(namespace string, name string) error {
|
|
testsNamescace := Tests.ChildString(namespace)
|
|
return m.CreateObject(&testsNamescace, name, m)
|
|
}
|
|
|
|
func (m *TestingModel) CreateWithTypeName(namespace string, typeName string, name string) error {
|
|
customNamespace := Tests.ChildString(namespace).ChildString(typeName).Instance(name)
|
|
|
|
m.dbKey = &customNamespace
|
|
handleCreateSubscriptions(m)
|
|
return Create(*m.dbKey, m)
|
|
}
|
|
|
|
func (m *TestingModel) Save() error {
|
|
return m.SaveObject(m)
|
|
}
|
|
|
|
func GetTestingModel(name string) (*TestingModel, error) {
|
|
return GetTestingModelFromNamespace(&Tests, name)
|
|
}
|
|
|
|
func GetTestingModelFromNamespace(namespace *datastore.Key, name string) (*TestingModel, error) {
|
|
object, err := GetAndEnsureModel(namespace, name, testingModel)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
model, ok := object.(*TestingModel)
|
|
if !ok {
|
|
return nil, NewMismatchError(object, testingModel)
|
|
}
|
|
return model, nil
|
|
}
|
|
|
|
func TestModel(t *testing.T) {
|
|
|
|
// create
|
|
m := TestingModel{
|
|
Name: "a",
|
|
Value: "b",
|
|
}
|
|
// newKey := datastore.NewKey("/Tests/TestingModel:test")
|
|
// m.dbKey = &newKey
|
|
// err := Put(*m.dbKey, m)
|
|
err := m.Create("")
|
|
if err != nil {
|
|
t.Errorf("database test: could not create object: %s", err)
|
|
}
|
|
|
|
// get
|
|
o, err := GetTestingModel(m.dbKey.Name())
|
|
if err != nil {
|
|
t.Errorf("database test: failed to get model: %s (%s)", err, m.dbKey.Name())
|
|
}
|
|
|
|
// check fetched object
|
|
if o.Name != "a" || o.Value != "b" {
|
|
t.Errorf("database test: values do not match: got Name=%s and Value=%s", o.Name, o.Value)
|
|
}
|
|
|
|
// o, err := Get(*m.dbKey)
|
|
// if err != nil {
|
|
// t.Errorf("database: could not get object: %s", err)
|
|
// }
|
|
// n, ok := o.(*TestingModel)
|
|
// if !ok {
|
|
// t.Errorf("database: wrong type, got type %T from %s", o, m.dbKey.String())
|
|
// }
|
|
|
|
// save
|
|
o.Value = "c"
|
|
err = o.Save()
|
|
if err != nil {
|
|
t.Errorf("database test: could not save object: %s", err)
|
|
}
|
|
|
|
// delete
|
|
err = o.Delete()
|
|
if err != nil {
|
|
t.Errorf("database test: could not delete object: %s", err)
|
|
}
|
|
|
|
}
|