2024-08-14 10:10:33 +05:30
|
|
|
package api
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"testing"
|
|
|
|
|
|
2025-05-24 19:14:29 +05:30
|
|
|
"github.com/SigNoz/signoz/pkg/types/featuretypes"
|
2024-08-14 10:10:33 +05:30
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestMergeFeatureSets(t *testing.T) {
|
|
|
|
|
tests := []struct {
|
|
|
|
|
name string
|
2025-05-24 19:14:29 +05:30
|
|
|
zeusFeatures []*featuretypes.GettableFeature
|
|
|
|
|
internalFeatures []*featuretypes.GettableFeature
|
|
|
|
|
expected []*featuretypes.GettableFeature
|
2024-08-14 10:10:33 +05:30
|
|
|
}{
|
|
|
|
|
{
|
|
|
|
|
name: "empty zeusFeatures and internalFeatures",
|
2025-05-24 19:14:29 +05:30
|
|
|
zeusFeatures: []*featuretypes.GettableFeature{},
|
|
|
|
|
internalFeatures: []*featuretypes.GettableFeature{},
|
|
|
|
|
expected: []*featuretypes.GettableFeature{},
|
2024-08-14 10:10:33 +05:30
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "non-empty zeusFeatures and empty internalFeatures",
|
2025-05-24 19:14:29 +05:30
|
|
|
zeusFeatures: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: true},
|
|
|
|
|
{Name: "Feature2", Active: false},
|
|
|
|
|
},
|
2025-05-24 19:14:29 +05:30
|
|
|
internalFeatures: []*featuretypes.GettableFeature{},
|
|
|
|
|
expected: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: true},
|
|
|
|
|
{Name: "Feature2", Active: false},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "empty zeusFeatures and non-empty internalFeatures",
|
2025-05-24 19:14:29 +05:30
|
|
|
zeusFeatures: []*featuretypes.GettableFeature{},
|
|
|
|
|
internalFeatures: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: true},
|
|
|
|
|
{Name: "Feature2", Active: false},
|
|
|
|
|
},
|
2025-05-24 19:14:29 +05:30
|
|
|
expected: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: true},
|
|
|
|
|
{Name: "Feature2", Active: false},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "non-empty zeusFeatures and non-empty internalFeatures with no conflicts",
|
2025-05-24 19:14:29 +05:30
|
|
|
zeusFeatures: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: true},
|
|
|
|
|
{Name: "Feature3", Active: false},
|
|
|
|
|
},
|
2025-05-24 19:14:29 +05:30
|
|
|
internalFeatures: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature2", Active: true},
|
|
|
|
|
{Name: "Feature4", Active: false},
|
|
|
|
|
},
|
2025-05-24 19:14:29 +05:30
|
|
|
expected: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: true},
|
|
|
|
|
{Name: "Feature2", Active: true},
|
|
|
|
|
{Name: "Feature3", Active: false},
|
|
|
|
|
{Name: "Feature4", Active: false},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "non-empty zeusFeatures and non-empty internalFeatures with conflicts",
|
2025-05-24 19:14:29 +05:30
|
|
|
zeusFeatures: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: true},
|
|
|
|
|
{Name: "Feature2", Active: false},
|
|
|
|
|
},
|
2025-05-24 19:14:29 +05:30
|
|
|
internalFeatures: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: false},
|
|
|
|
|
{Name: "Feature3", Active: true},
|
|
|
|
|
},
|
2025-05-24 19:14:29 +05:30
|
|
|
expected: []*featuretypes.GettableFeature{
|
2024-08-14 10:10:33 +05:30
|
|
|
{Name: "Feature1", Active: true},
|
|
|
|
|
{Name: "Feature2", Active: false},
|
|
|
|
|
{Name: "Feature3", Active: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, test := range tests {
|
|
|
|
|
t.Run(test.name, func(t *testing.T) {
|
|
|
|
|
actual := MergeFeatureSets(test.zeusFeatures, test.internalFeatures)
|
|
|
|
|
assert.ElementsMatch(t, test.expected, actual)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|