dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/requests/operation_test.go (about)

     1  //
     2  // Copyright (C) 2021 IOTech Ltd
     3  //
     4  // SPDX-License-Identifier: Apache-2.0
     5  
     6  package requests
     7  
     8  import (
     9  	"encoding/json"
    10  	"testing"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  
    15  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common"
    16  )
    17  
    18  var testOperationRequest = OperationRequest{
    19  	BaseRequest: common.BaseRequest{
    20  		RequestId:   ExampleUUID,
    21  		Versionable: common.NewVersionable(),
    22  	},
    23  	ServiceName: TestServiceName,
    24  	Action:      TestActionName,
    25  }
    26  
    27  func TestOperationRequest_Validate(t *testing.T) {
    28  	valid := testOperationRequest
    29  	noReqId := testOperationRequest
    30  	noReqId.RequestId = ""
    31  	invalidReqId := testOperationRequest
    32  	invalidReqId.RequestId = "abc"
    33  	noServiceName := testOperationRequest
    34  	noServiceName.ServiceName = ""
    35  	noAction := testOperationRequest
    36  	noAction.Action = ""
    37  	invalidAction := testOperationRequest
    38  	invalidAction.Action = "remove"
    39  
    40  	tests := []struct {
    41  		name        string
    42  		request     OperationRequest
    43  		expectedErr bool
    44  	}{
    45  		{"valid", valid, false},
    46  		{"valid - no Request Id", noReqId, false},
    47  		{"invalid - RequestId is not an uuid", invalidReqId, true},
    48  		{"invalid - no ServiceName", noServiceName, true},
    49  		{"invalid - no Action", noAction, true},
    50  		{"invalid - invalid Action", invalidAction, true},
    51  	}
    52  	for _, tt := range tests {
    53  		t.Run(tt.name, func(t *testing.T) {
    54  			err := tt.request.Validate()
    55  			if tt.expectedErr {
    56  				assert.Error(t, err)
    57  			} else {
    58  				assert.NoError(t, err)
    59  			}
    60  		})
    61  	}
    62  }
    63  
    64  func TestOperationRequest_UnmarshalJSON(t *testing.T) {
    65  	valid := testOperationRequest
    66  	resultTestBytes, _ := json.Marshal(testOperationRequest)
    67  	type args struct {
    68  		data []byte
    69  	}
    70  	tests := []struct {
    71  		name        string
    72  		request     OperationRequest
    73  		args        args
    74  		expectedErr bool
    75  	}{
    76  		{"valid", valid, args{resultTestBytes}, false},
    77  		{"invalid - empty data", OperationRequest{}, args{[]byte{}}, true},
    78  		{"invalid - string data", OperationRequest{}, args{[]byte("Invalid OperationRequest")}, true},
    79  	}
    80  	for _, tt := range tests {
    81  		t.Run(tt.name, func(t *testing.T) {
    82  			var expected = tt.request
    83  			err := tt.request.UnmarshalJSON(tt.args.data)
    84  			if tt.expectedErr {
    85  				require.Error(t, err)
    86  			} else {
    87  				require.NoError(t, err)
    88  				assert.Equal(t, expected, tt.request, "Unmarshal did not result in expected AddProvisionWatcherRequest.")
    89  			}
    90  		})
    91  	}
    92  }