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  }