diff --git a/pkg/collections/collection.go b/pkg/collections/collection.go index ddb73ecad0151b3f185f069ed503f0b4ba4d9165..7af47c90b809bcc307e4f364a1d24ca5837e0043 100644 --- a/pkg/collections/collection.go +++ b/pkg/collections/collection.go @@ -86,6 +86,14 @@ type View struct { Filter string `json:"filter" bson:"filter,omitempty"` // Правила фильтрации записей оригинальной коллекции } +func (v *View) Equal(v1 *View) bool { + return v == v1 || v != nil && v1 != nil && + v.SpaceID == v1.SpaceID && + v.EnvID == v1.EnvID && + v.CollectionID == v1.CollectionID && + v.Filter == v1.Filter +} + type StateInfo struct { State State `json:"state" bson:"state"` Info string `json:"info" bson:"info"` diff --git a/pkg/collections/collection_test.go b/pkg/collections/collection_test.go new file mode 100644 index 0000000000000000000000000000000000000000..79e16a8e6a397418ef2418979bf0e38947b730c8 --- /dev/null +++ b/pkg/collections/collection_test.go @@ -0,0 +1,102 @@ +package collections + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestView_Equal(t *testing.T) { + testCases := []struct { + name string + view1 *View + view2 *View + want bool + }{ + { + name: "Both views are nil", + view1: nil, + view2: nil, + want: true, + }, + { + name: "View1 is nil", + view1: nil, + view2: &View{}, + want: false, + }, + { + name: "View2 is nil", + view1: &View{}, + view2: nil, + want: false, + }, + { + name: "Different views", + view1: &View{ + SpaceID: "spaceID1", + EnvID: "envID1", + CollectionID: "collectionID1", + Filter: "filter1", + }, + view2: &View{ + SpaceID: "spaceID2", + EnvID: "envID2", + CollectionID: "collectionID2", + Filter: "filter2", + }, + want: false, + }, + { + name: "Equal views", + view1: &View{ + SpaceID: "spaceID", + EnvID: "envID", + CollectionID: "collectionID", + Filter: "filter", + }, + view2: &View{ + SpaceID: "spaceID", + EnvID: "envID", + CollectionID: "collectionID", + Filter: "filter", + }, + want: true, + }, + { + name: "Empty view1 and non-empty view2", + view1: &View{}, + view2: &View{ + SpaceID: "spaceID", + EnvID: "envID", + CollectionID: "collectionID", + Filter: "filter", + }, + want: false, + }, + { + name: "Empty view2 and non-empty view1", + view1: &View{ + SpaceID: "spaceID", + EnvID: "envID", + CollectionID: "collectionID", + Filter: "filter", + }, + view2: &View{}, + want: false, + }, + { + name: "Empty view1 and view2", + view1: &View{}, + view2: &View{}, + want: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + output := tc.view1.Equal(tc.view2) + require.Equal(t, tc.want, output) + }) + } +}