dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/requests/deviceprofilebasicinfo_test.go (about) 1 // 2 // Copyright (C) 2022-2023 IOTech Ltd 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 6 package requests 7 8 import ( 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 14 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common" 15 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos" 16 dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common" 17 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/models" 18 ) 19 20 var testBasicInfoRequest = DeviceProfileBasicInfoRequest{ 21 BaseRequest: dtoCommon.BaseRequest{ 22 RequestId: ExampleUUID, 23 Versionable: dtoCommon.NewVersionable(), 24 }, 25 BasicInfo: mockUpdateDeviceProfileBasicInfo(), 26 } 27 28 func mockUpdateDeviceProfileBasicInfo() dtos.UpdateDeviceProfileBasicInfo { 29 testId := ExampleUUID 30 testName := TestDeviceName 31 testDescription := TestDescription 32 testManufacturer := TestManufacturer 33 TestModel := TestModel 34 d := dtos.UpdateDeviceProfileBasicInfo{} 35 d.Id = &testId 36 d.Name = &testName 37 d.Description = &testDescription 38 d.Manufacturer = &testManufacturer 39 d.Model = &TestModel 40 d.Labels = testLabels 41 return d 42 } 43 func TestDeviceProfileBasicInfoRequest_Validate(t *testing.T) { 44 invalidUUID := "invalidUUID" 45 valid := testBasicInfoRequest 46 // id 47 validOnlyId := valid 48 validOnlyId.BasicInfo.Name = nil 49 invalidId := valid 50 invalidId.BasicInfo.Id = &invalidUUID 51 // name 52 validOnlyName := valid 53 validOnlyName.BasicInfo.Id = nil 54 nameAndEmptyId := valid 55 nameAndEmptyId.BasicInfo.Id = &emptyString 56 invalidEmptyName := valid 57 invalidEmptyName.BasicInfo.Name = &emptyString 58 // no id and name 59 noIdAndName := valid 60 noIdAndName.BasicInfo.Id = nil 61 noIdAndName.BasicInfo.Name = nil 62 // description 63 validNilDescription := valid 64 validNilDescription.BasicInfo.Description = nil 65 validEmptyDescription := valid 66 validEmptyDescription.BasicInfo.Description = &emptyString 67 // manufacturer 68 validNilManufacturer := valid 69 validNilManufacturer.BasicInfo.Manufacturer = nil 70 validEmptyManufacturer := valid 71 validEmptyManufacturer.BasicInfo.Manufacturer = &emptyString 72 // model 73 validNilModel := valid 74 validNilModel.BasicInfo.Model = nil 75 validEmptyModel := valid 76 validEmptyModel.BasicInfo.Model = &emptyString 77 // labels 78 validNilLabels := valid 79 validNilLabels.BasicInfo.Labels = nil 80 validEmptyLabels := valid 81 validEmptyLabels.BasicInfo.Labels = []string{} 82 83 tests := []struct { 84 name string 85 request DeviceProfileBasicInfoRequest 86 expectedErr bool 87 }{ 88 {"valid DeviceProfileBasicInfoRequest", valid, false}, 89 {"valid DeviceProfileBasicInfoRequest, only id", validOnlyId, false}, 90 {"invalid DeviceProfileBasicInfoRequest, invalid id ", invalidId, true}, 91 {"valid DeviceProfileBasicInfoRequest, only name", validOnlyName, false}, 92 {"valid DeviceProfileBasicInfoRequest, name and empty id", nameAndEmptyId, false}, 93 {"invalid DeviceProfileBasicInfoRequest, empty name", invalidEmptyName, true}, 94 {"invalid DeviceProfileBasicInfoRequest, no name and no id ", noIdAndName, true}, 95 {"valid DeviceProfileBasicInfoRequest, nil description", validNilDescription, false}, 96 {"valid DeviceProfileBasicInfoRequest, empty description", validEmptyDescription, false}, 97 {"valid DeviceProfileBasicInfoRequest, nil manufacturer", validNilManufacturer, false}, 98 {"valid DeviceProfileBasicInfoRequest, empty manufacturer", validEmptyManufacturer, false}, 99 {"valid DeviceProfileBasicInfoRequest, nil model", validNilModel, false}, 100 {"valid DeviceProfileBasicInfoRequest, empty model", validEmptyModel, false}, 101 {"valid DeviceProfileBasicInfoRequest, nil labels", validNilLabels, false}, 102 {"valid DeviceProfileBasicInfoRequest, empty lables", validEmptyLabels, false}, 103 } 104 for _, tt := range tests { 105 t.Run(tt.name, func(t *testing.T) { 106 err := tt.request.Validate() 107 if tt.expectedErr { 108 assert.Error(t, err) 109 } else { 110 assert.NoError(t, err) 111 } 112 }) 113 } 114 } 115 116 func TestDeviceProfileBasicInfoRequest_UnmarshalJSON_NilField(t *testing.T) { 117 reqJson := `{ 118 "apiVersion" : "v3", 119 "requestId":"7a1707f0-166f-4c4b-bc9d-1d54c74e0137", 120 "basicinfo": { 121 "name": "TestProfile" 122 } 123 }` 124 var req DeviceProfileBasicInfoRequest 125 126 err := req.UnmarshalJSON([]byte(reqJson)) 127 128 require.NoError(t, err) 129 // Nil field checking is used to update with patch 130 assert.Nil(t, req.BasicInfo.Manufacturer) 131 assert.Nil(t, req.BasicInfo.Description) 132 assert.Nil(t, req.BasicInfo.Model) 133 assert.Nil(t, req.BasicInfo.Labels) 134 } 135 136 func TestDeviceProfileBasicInfoRequest_UnmarshalJSON_EmptySlice(t *testing.T) { 137 reqJson := `{ 138 "apiVersion" : "v3", 139 "requestId":"7a1707f0-166f-4c4b-bc9d-1d54c74e0137", 140 "basicinfo": { 141 "name": "TestProfile", 142 "labels":[] 143 } 144 }` 145 var req DeviceProfileBasicInfoRequest 146 147 err := req.UnmarshalJSON([]byte(reqJson)) 148 149 require.NoError(t, err) 150 // Empty slice is used to remove the data 151 assert.NotNil(t, req.BasicInfo.Labels) 152 } 153 154 func TestReplaceDeviceProfileModelBasicInfoFieldsWithDTO(t *testing.T) { 155 profile := models.DeviceProfile{ 156 Name: TestDeviceProfileName, 157 Manufacturer: "", 158 Description: "", 159 Model: "", 160 Labels: []string{}, 161 DeviceResources: []models.DeviceResource{{ 162 Name: TestDeviceResourceName, 163 Properties: models.ResourceProperties{ 164 ValueType: common.ValueTypeInt16, 165 ReadWrite: common.ReadWrite_RW, 166 }, 167 }}, 168 } 169 170 patch := mockUpdateDeviceProfileBasicInfo() 171 172 ReplaceDeviceProfileModelBasicInfoFieldsWithDTO(&profile, patch) 173 174 assert.Equal(t, TestDescription, profile.Description) 175 assert.Equal(t, TestManufacturer, profile.Manufacturer) 176 assert.Equal(t, TestModel, profile.Model) 177 assert.Equal(t, testLabels, profile.Labels) 178 }