Select Git revision
extension_test.go
extension_test.go 4.07 KiB
package extension
import (
"testing"
"git.perx.ru/perxis/perxis-go/pkg/collections"
"git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/schema"
"git.perx.ru/perxis/perxis-go/pkg/schema/field"
"git.perx.ru/perxis/perxis-go/pkg/setup"
"github.com/stretchr/testify/assert"
)
func Test_isMetadataEqual(t *testing.T) {
tests := []struct {
name string
s1 *schema.Schema
s2 *schema.Schema
want bool
}{
{
"Not equal #1 (no metadata)",
schema.New("name", field.String()).WithMetadata(MetadataKey, "test"),
schema.New("name", field.String()),
false,
},
{
"Not equal #2 (different metadata)",
schema.New("name", field.String()).WithMetadata(MetadataKey, "test"),
schema.New("name", field.String()).WithMetadata("test", "test"),
false,
},
{
"Equal #1 (no metadata)",
schema.New("name", field.String()),
schema.New("name", field.String()),
true,
},
{
"Equal #2 (equal metadata)",
schema.New("name", field.String()).WithMetadata(MetadataKey, "test"),
schema.New("name", field.String()).WithMetadata(MetadataKey, "test"),
true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equalf(t, tt.want, isMetadataEqual(tt.s1, tt.s2), "isMetadataExtensionEqual(%v, %v)", tt.s1, tt.s2)
})
}
}
func TestDefaultUpdateCollectionStrategyFn(t *testing.T) {
tests := []struct {
name string
exist *collections.Collection
collection *collections.Collection
force bool
wantErr func(err error)
}{
{
name: "collection belongs to extension",
exist: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env",
Schema: schema.New("name", field.String()).WithMetadata("extension", "extension-1")},
collection: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Name: "new name",
Schema: schema.New("name", field.String()).WithMetadata("extension", "extension-1")},
wantErr: nil,
},
{
name: "collection belongs to another extension",
exist: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env",
Schema: schema.New("name", field.String()).WithMetadata("extension", "extension-1")},
collection: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Name: "new name",
Schema: schema.New("name", field.String()).WithMetadata("extension", "extension-2")},
wantErr: func(err error) {
assert.ErrorIs(t, err, collections.ErrAlreadyExists)
assert.Equal(t, "Коллекция с идентификатором 'coll' уже существует. Удалите ее или "+
"вызовите установку расширения с флагом Force", errors.GetDetail(err))
},
},
{
name: "collection was created by user",
exist: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env",
Schema: schema.New("name", field.String())},
collection: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Name: "new name",
Schema: schema.New("name", field.String()).WithMetadata("extension", "extension-1")},
wantErr: func(err error) {
assert.ErrorIs(t, err, collections.ErrAlreadyExists)
assert.Equal(t, "Коллекция с идентификатором 'coll' уже существует. Удалите ее или "+
"вызовите установку расширения с флагом Force", errors.GetDetail(err))
},
},
{
name: "collection was created by user with force",
exist: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env",
Schema: schema.New("name", field.String()).WithMetadata("extension", "extension-1")},
collection: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Name: "new name",
Schema: schema.New("name", field.String()).WithMetadata("extension", "extension-1")},
force: true,
wantErr: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
set := setup.NewSetup(nil, "sp", "env", nil).WithForce(tt.force)
_, _, _, err := UpdateCollectionStrategy(set, tt.exist, tt.collection)
if tt.wantErr != nil {
tt.wantErr(err)
return
}
})
}
}