dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/models/intervalaction_test.go (about) 1 // 2 // Copyright (C) 2021 IOTech Ltd 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 6 package models_test 7 8 import ( 9 "encoding/json" 10 "testing" 11 12 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common" 13 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/models" 14 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17 ) 18 19 func actionWithRESTAddressData() models.IntervalAction { 20 return models.IntervalAction{ 21 DBTimestamp: models.DBTimestamp{}, 22 Id: ExampleUUID, 23 Name: TestIntervalActionName, 24 IntervalName: TestIntervalName, 25 Address: models.RESTAddress{ 26 BaseAddress: models.BaseAddress{ 27 Type: common.REST, 28 Host: TestHost, 29 Port: TestPort, 30 }, 31 HTTPMethod: TestHTTPMethod, 32 }, 33 } 34 } 35 func actionWithMQTTPubAddressData() models.IntervalAction { 36 return models.IntervalAction{ 37 DBTimestamp: models.DBTimestamp{}, 38 Id: ExampleUUID, 39 Name: TestIntervalActionName, 40 IntervalName: TestIntervalName, 41 Address: models.MQTTPubAddress{ 42 BaseAddress: models.BaseAddress{ 43 Type: common.MQTT, 44 Host: TestHost, 45 Port: TestPort, 46 }, 47 Publisher: TestPublisher, 48 Topic: TestTopic, 49 }, 50 } 51 } 52 53 func TestIntervalAction_UnmarshalJSON(t *testing.T) { 54 actionWithRestAddress := actionWithRESTAddressData() 55 actionWithRestAddressJsonData, err := json.Marshal(actionWithRestAddress) 56 require.NoError(t, err) 57 actionWithMQTTPubAddress := actionWithMQTTPubAddressData() 58 actionWithMQTTPubAddressJsonData, err := json.Marshal(actionWithMQTTPubAddress) 59 require.NoError(t, err) 60 61 tests := []struct { 62 name string 63 expected models.IntervalAction 64 data []byte 65 wantErr bool 66 }{ 67 {"valid, unmarshal intervalAction with REST address", actionWithRestAddress, actionWithRestAddressJsonData, false}, 68 {"valid, unmarshal intervalAction with MQTT address", actionWithMQTTPubAddress, actionWithMQTTPubAddressJsonData, false}, 69 {"unmarshal invalid AddIntervalActionRequest, empty data", models.IntervalAction{}, []byte{}, true}, 70 {"unmarshal invalid AddIntervalActionRequest, string data", models.IntervalAction{}, []byte("Invalid IntervalAction"), true}, 71 } 72 for _, tt := range tests { 73 t.Run(tt.name, func(t *testing.T) { 74 var result models.IntervalAction 75 err := json.Unmarshal(tt.data, &result) 76 if tt.wantErr { 77 require.Error(t, err) 78 } else { 79 require.NoError(t, err) 80 assert.Equal(t, tt.expected, result, "Unmarshal did not result in expected AddIntervalActionRequest.") 81 } 82 }) 83 } 84 }