github.com/enbility/spine-go@v0.7.0/spine/function_data_factory_test.go (about)

     1  package spine
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/enbility/spine-go/api"
     7  	"github.com/enbility/spine-go/model"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestFunctionDataFactory_FunctionData(t *testing.T) {
    12  	result := CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeBill)
    13  	assert.Equal(t, 3, len(result))
    14  	assert.IsType(t, &FunctionData[model.BillDescriptionListDataType]{}, result[0])
    15  	assert.IsType(t, &FunctionData[model.BillConstraintsListDataType]{}, result[1])
    16  	assert.IsType(t, &FunctionData[model.BillListDataType]{}, result[2])
    17  
    18  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeDeviceClassification)
    19  	assert.Equal(t, 2, len(result))
    20  	assert.IsType(t, &FunctionData[model.DeviceClassificationManufacturerDataType]{}, result[0])
    21  	assert.IsType(t, &FunctionData[model.DeviceClassificationUserDataType]{}, result[1])
    22  
    23  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeDeviceConfiguration)
    24  	assert.Equal(t, 3, len(result))
    25  	assert.IsType(t, &FunctionData[model.DeviceConfigurationKeyValueConstraintsListDataType]{}, result[0])
    26  	assert.IsType(t, &FunctionData[model.DeviceConfigurationKeyValueDescriptionListDataType]{}, result[1])
    27  	assert.IsType(t, &FunctionData[model.DeviceConfigurationKeyValueListDataType]{}, result[2])
    28  
    29  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeDeviceDiagnosis)
    30  	assert.Equal(t, 3, len(result))
    31  	assert.IsType(t, &FunctionData[model.DeviceDiagnosisStateDataType]{}, result[0])
    32  	assert.IsType(t, &FunctionData[model.DeviceDiagnosisHeartbeatDataType]{}, result[1])
    33  
    34  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeElectricalConnection)
    35  	assert.Equal(t, 6, len(result))
    36  	assert.IsType(t, &FunctionData[model.ElectricalConnectionDescriptionListDataType]{}, result[0])
    37  	assert.IsType(t, &FunctionData[model.ElectricalConnectionParameterDescriptionListDataType]{}, result[1])
    38  	assert.IsType(t, &FunctionData[model.ElectricalConnectionPermittedValueSetListDataType]{}, result[2])
    39  
    40  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeHvac)
    41  	assert.Equal(t, 8, len(result))
    42  	assert.IsType(t, &FunctionData[model.HvacOperationModeDescriptionDataType]{}, result[0])
    43  	assert.IsType(t, &FunctionData[model.HvacOverrunDescriptionListDataType]{}, result[1])
    44  	assert.IsType(t, &FunctionData[model.HvacOverrunListDataType]{}, result[2])
    45  	assert.IsType(t, &FunctionData[model.HvacSystemFunctionDescriptionDataType]{}, result[3])
    46  	assert.IsType(t, &FunctionData[model.HvacSystemFunctionListDataType]{}, result[4])
    47  
    48  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeIdentification)
    49  	assert.Equal(t, 3, len(result))
    50  	assert.IsType(t, &FunctionData[model.IdentificationListDataType]{}, result[0])
    51  
    52  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeIncentiveTable)
    53  	assert.Equal(t, 3, len(result))
    54  	assert.IsType(t, &FunctionData[model.IncentiveTableDescriptionDataType]{}, result[0])
    55  	assert.IsType(t, &FunctionData[model.IncentiveTableConstraintsDataType]{}, result[1])
    56  	assert.IsType(t, &FunctionData[model.IncentiveTableDataType]{}, result[2])
    57  
    58  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeLoadControl)
    59  	assert.Equal(t, 6, len(result))
    60  	assert.IsType(t, &FunctionData[model.LoadControlEventListDataType]{}, result[0])
    61  	assert.IsType(t, &FunctionData[model.LoadControlLimitConstraintsListDataType]{}, result[1])
    62  	assert.IsType(t, &FunctionData[model.LoadControlLimitDescriptionListDataType]{}, result[2])
    63  	assert.IsType(t, &FunctionData[model.LoadControlLimitListDataType]{}, result[3])
    64  
    65  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeMeasurement)
    66  	assert.Equal(t, 5, len(result))
    67  	assert.IsType(t, &FunctionData[model.MeasurementListDataType]{}, result[0])
    68  	assert.IsType(t, &FunctionData[model.MeasurementDescriptionListDataType]{}, result[1])
    69  	assert.IsType(t, &FunctionData[model.MeasurementConstraintsListDataType]{}, result[2])
    70  	assert.IsType(t, &FunctionData[model.MeasurementThresholdRelationListDataType]{}, result[3])
    71  
    72  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeTimeSeries)
    73  	assert.Equal(t, 3, len(result))
    74  	assert.IsType(t, &FunctionData[model.TimeSeriesDescriptionListDataType]{}, result[0])
    75  	assert.IsType(t, &FunctionData[model.TimeSeriesConstraintsListDataType]{}, result[1])
    76  	assert.IsType(t, &FunctionData[model.TimeSeriesListDataType]{}, result[2])
    77  
    78  	result = CreateFunctionData[api.FunctionDataInterface](model.FeatureTypeTypeGeneric)
    79  	assert.Equal(t, 124, len(result))
    80  }
    81  
    82  func TestFunctionDataFactory_FunctionDataCmd(t *testing.T) {
    83  	result := CreateFunctionData[api.FunctionDataCmdInterface](model.FeatureTypeTypeDeviceClassification)
    84  	assert.Equal(t, 2, len(result))
    85  	assert.IsType(t, &FunctionDataCmd[model.DeviceClassificationManufacturerDataType]{}, result[0])
    86  	assert.IsType(t, &FunctionDataCmd[model.DeviceClassificationUserDataType]{}, result[1])
    87  }
    88  
    89  func TestFunctionDataFactory_NodeMgmtFeatureType(t *testing.T) {
    90  	result := CreateFunctionData[api.FunctionDataCmdInterface](model.FeatureTypeTypeNodeManagement)
    91  	assert.Equal(t, 3, len(result))
    92  }
    93  
    94  func TestFunctionDataFactory_unknownFunctionDataType(t *testing.T) {
    95  	assert.PanicsWithError(t, "only FunctionData and FunctionDataCmd are supported",
    96  		func() { CreateFunctionData[int](model.FeatureTypeTypeDeviceClassification) })
    97  }