dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/clients/http/command_test.go (about)

     1  //
     2  // Copyright (C) 2021-2022 IOTech Ltd
     3  //
     4  // SPDX-License-Identifier: Apache-2.0
     5  
     6  package http
     7  
     8  import (
     9  	"context"
    10  	"encoding/json"
    11  	"net/http"
    12  	"net/http/httptest"
    13  	"strconv"
    14  	"testing"
    15  
    16  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common"
    17  	dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common"
    18  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/responses"
    19  
    20  	"github.com/stretchr/testify/require"
    21  )
    22  
    23  func TestQueryDeviceCoreCommands(t *testing.T) {
    24  	ts := newTestServer(http.MethodGet, common.ApiAllDeviceRoute, responses.MultiDeviceCoreCommandsResponse{})
    25  	defer ts.Close()
    26  	client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false)
    27  	res, err := client.AllDeviceCoreCommands(context.Background(), 0, 10)
    28  	require.NoError(t, err)
    29  	require.IsType(t, responses.MultiDeviceCoreCommandsResponse{}, res)
    30  }
    31  
    32  func TestQueryDeviceCoreCommandsByDeviceName(t *testing.T) {
    33  	deviceName := "Simple-Device01"
    34  	path := common.NewPathBuilder().EnableNameFieldEscape(false).
    35  		SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(deviceName).BuildPath()
    36  	ts := newTestServer(http.MethodGet, path, responses.DeviceCoreCommandResponse{})
    37  	defer ts.Close()
    38  	client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false)
    39  	res, err := client.DeviceCoreCommandsByDeviceName(context.Background(), deviceName)
    40  	require.NoError(t, err)
    41  	require.IsType(t, responses.DeviceCoreCommandResponse{}, res)
    42  }
    43  
    44  func TestIssueGetCommandByName(t *testing.T) {
    45  	deviceName := "Simple-Device01"
    46  	cmdName := "SwitchButton"
    47  	path := common.NewPathBuilder().EnableNameFieldEscape(false).
    48  		SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(deviceName).SetNameFieldPath(cmdName).BuildPath()
    49  	ts := newTestServer(http.MethodGet, path, &responses.EventResponse{})
    50  	defer ts.Close()
    51  	client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false)
    52  	pushEvent, err := strconv.ParseBool(common.ValueTrue)
    53  	require.NoError(t, err)
    54  	notReturnEvent, err := strconv.ParseBool(common.ValueFalse)
    55  	require.NoError(t, err)
    56  	res, err := client.IssueGetCommandByName(context.Background(), deviceName, cmdName, pushEvent, notReturnEvent)
    57  	require.NoError(t, err)
    58  	require.IsType(t, &responses.EventResponse{}, res)
    59  }
    60  
    61  func TestIssueGetCommandByNameWithQueryParams(t *testing.T) {
    62  	deviceName := "Simple-Device01"
    63  	cmdName := "SwitchButton"
    64  	testQueryParams := map[string]string{"foo": "bar", "key": "value"}
    65  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    66  		for k, v := range testQueryParams {
    67  			if r.URL.Query().Get(k) != v {
    68  				w.WriteHeader(http.StatusBadRequest)
    69  				return
    70  			}
    71  		}
    72  
    73  		w.WriteHeader(http.StatusOK)
    74  		b, _ := json.Marshal(responses.EventResponse{})
    75  		_, _ = w.Write(b)
    76  	}))
    77  	defer ts.Close()
    78  
    79  	client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false)
    80  	res, err := client.IssueGetCommandByNameWithQueryParams(context.Background(), deviceName, cmdName, testQueryParams)
    81  	require.NoError(t, err)
    82  	require.IsType(t, &responses.EventResponse{}, res)
    83  }
    84  
    85  func TestIssueIssueSetCommandByName(t *testing.T) {
    86  	deviceName := "Simple-Device01"
    87  	cmdName := "SwitchButton"
    88  	settings := map[string]string{
    89  		"SwitchButton": "true",
    90  	}
    91  	path := common.NewPathBuilder().EnableNameFieldEscape(false).
    92  		SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(deviceName).SetNameFieldPath(cmdName).BuildPath()
    93  	ts := newTestServer(http.MethodPut, path, dtoCommon.BaseResponse{})
    94  	defer ts.Close()
    95  	client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false)
    96  	res, err := client.IssueSetCommandByName(context.Background(), deviceName, cmdName, settings)
    97  	require.NoError(t, err)
    98  	require.IsType(t, dtoCommon.BaseResponse{}, res)
    99  }
   100  
   101  func TestIssueIssueSetCommandByNameWithObject(t *testing.T) {
   102  	deviceName := "Simple-Device01"
   103  	cmdName := "SwitchButton"
   104  	settings := map[string]interface{}{
   105  		"SwitchButton": map[string]interface{}{
   106  			"kind":  "button",
   107  			"value": "on",
   108  		},
   109  	}
   110  	path := common.NewPathBuilder().EnableNameFieldEscape(false).
   111  		SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(deviceName).SetNameFieldPath(cmdName).BuildPath()
   112  	ts := newTestServer(http.MethodPut, path, dtoCommon.BaseResponse{})
   113  	defer ts.Close()
   114  	client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false)
   115  	res, err := client.IssueSetCommandByNameWithObject(context.Background(), deviceName, cmdName, settings)
   116  	require.NoError(t, err)
   117  	require.IsType(t, dtoCommon.BaseResponse{}, res)
   118  }