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