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

     1  package spine
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/enbility/spine-go/model"
     7  	"github.com/enbility/spine-go/util"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestFunctionData_UpdateData(t *testing.T) {
    12  	newData := &model.DeviceClassificationManufacturerDataType{
    13  		DeviceName: util.Ptr(model.DeviceClassificationStringType("device name")),
    14  	}
    15  	functionType := model.FunctionTypeDeviceClassificationManufacturerData
    16  	sut := NewFunctionData[model.DeviceClassificationManufacturerDataType](functionType)
    17  	_, _ = sut.UpdateData(false, true, newData, nil, nil)
    18  	getData := sut.DataCopy()
    19  
    20  	assert.Equal(t, newData.DeviceName, getData.DeviceName)
    21  	assert.Equal(t, functionType, sut.FunctionType())
    22  
    23  	// another update should not be reflected in the first dataset
    24  	newData = &model.DeviceClassificationManufacturerDataType{
    25  		DeviceName: util.Ptr(model.DeviceClassificationStringType("new device name")),
    26  	}
    27  	_, _ = sut.UpdateData(false, true, newData, nil, nil)
    28  	getNewData := sut.DataCopy()
    29  
    30  	assert.Equal(t, newData.DeviceName, getNewData.DeviceName)
    31  	assert.NotEqual(t, getData.DeviceName, getNewData.DeviceName)
    32  	assert.Equal(t, functionType, sut.FunctionType())
    33  
    34  	_, _ = sut.UpdateDataAny(false, true, newData, nil, nil)
    35  	getNewDataAny := sut.DataCopyAny()
    36  	newDataAny := getNewDataAny.(*model.DeviceClassificationManufacturerDataType)
    37  
    38  	assert.Equal(t, newData.DeviceName, newDataAny.DeviceName)
    39  	assert.NotEqual(t, getData.DeviceName, newDataAny.DeviceName)
    40  	assert.Equal(t, functionType, sut.FunctionType())
    41  }
    42  
    43  func TestFunctionData_UpdateDataPartial(t *testing.T) {
    44  	newData := &model.ElectricalConnectionPermittedValueSetListDataType{
    45  		ElectricalConnectionPermittedValueSetData: []model.ElectricalConnectionPermittedValueSetDataType{
    46  			{
    47  				ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(1)),
    48  				ParameterId:            util.Ptr(model.ElectricalConnectionParameterIdType(1)),
    49  				PermittedValueSet: []model.ScaledNumberSetType{
    50  					{
    51  						Range: []model.ScaledNumberRangeType{
    52  							{
    53  								Min: &model.ScaledNumberType{
    54  									Number: util.Ptr(model.NumberType(6)),
    55  									Scale:  util.Ptr(model.ScaleType(0)),
    56  								},
    57  							},
    58  						},
    59  					},
    60  				},
    61  			},
    62  		},
    63  	}
    64  	functionType := model.FunctionTypeElectricalConnectionPermittedValueSetListData
    65  	sut := NewFunctionData[model.ElectricalConnectionPermittedValueSetListDataType](functionType)
    66  
    67  	_, err := sut.UpdateData(false, true, newData, &model.FilterType{CmdControl: &model.CmdControlType{Partial: &model.ElementTagType{}}}, nil)
    68  	if assert.Nil(t, err) {
    69  		getData := sut.DataCopy()
    70  		assert.Equal(t, 1, len(getData.ElectricalConnectionPermittedValueSetData))
    71  	}
    72  }
    73  
    74  func TestFunctionData_UpdateDataPartial_Supported(t *testing.T) {
    75  	newData := &model.HvacOverrunListDataType{
    76  		HvacOverrunData: []model.HvacOverrunDataType{
    77  			{
    78  				OverrunId: util.Ptr(model.HvacOverrunIdType(1)),
    79  			},
    80  		},
    81  	}
    82  	functionType := model.FunctionTypeHvacOverrunListData
    83  	sut := NewFunctionData[model.HvacOverrunListDataType](functionType)
    84  
    85  	ok := sut.SupportsPartialWrite()
    86  	assert.True(t, ok)
    87  
    88  	_, err := sut.UpdateData(false, true, newData, &model.FilterType{CmdControl: &model.CmdControlType{Partial: &model.ElementTagType{}}}, nil)
    89  	assert.Nil(t, err)
    90  
    91  	functionType = model.FunctionTypeNetworkManagementAddNodeCall
    92  	sut2 := NewFunctionData[model.NetworkManagementAddNodeCallType](functionType)
    93  	ok = sut2.SupportsPartialWrite()
    94  	assert.False(t, ok)
    95  }