package handler import ( "testing" "modelRT/constants" "github.com/redis/go-redis/v9" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestDataObjectRedisAliasKeys(t *testing.T) { parameterKeys, err := dataObjectRedisAliasKeys( constants.DataObjectTypeParameter, "grid.zone.station.nspath.component.rated.voltage", "nspath.component.rated.voltage", ) require.NoError(t, err) assert.Equal(t, []string{ "grid.zone.station.nspath.component.rated.voltage", "nspath.component.rated.voltage", }, parameterKeys) measurementKeys, err := dataObjectRedisAliasKeys( constants.DataObjectTypeMeasurement, "grid.zone.station.nspath.component.bay.current", "nspath.current", ) require.NoError(t, err) assert.Equal(t, []string{ "grid.zone.station.nspath.component.bay.current", "nspath.component.bay.current", "nspath.current", }, measurementKeys) } func TestDataObjectRedisAliasKeysRejectsInvalidMetadata(t *testing.T) { _, err := dataObjectRedisAliasKeys(constants.DataObjectTypeParameter, "short.id", "short.name") require.Error(t, err) _, err = dataObjectRedisAliasKeys(constants.DataObjectTypeMeasurement, "short.id", "short.name") require.Error(t, err) } func TestRedisChangeStringUsesCacheRepresentations(t *testing.T) { tests := []struct { name string value any want string }{ {name: "string", value: "15.2", want: "15.2"}, {name: "integer", value: int64(15), want: "15"}, {name: "decimal", value: 15.2, want: "15.2"}, {name: "boolean", value: true, want: "true"}, {name: "object", value: map[string]any{"enabled": true}, want: `{"enabled":true}`}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { got, err := redisChangeString(test.value) require.NoError(t, err) assert.Equal(t, test.want, got) }) } } func TestMergeRedisZValuesReplacesDuplicateMemberAndSorts(t *testing.T) { values := mergeRedisZValues( []redis.Z{ {Score: 20, Member: "2"}, {Score: 10, Member: "1"}, }, redis.Z{Score: 30, Member: "1"}, ) assert.Equal(t, []redis.Z{ {Score: 20, Member: "2"}, {Score: 30, Member: "1"}, }, values) }