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

     1  //
     2  // Copyright (C) 2021 IOTech Ltd
     3  // Copyright (C) 2023 Intel Corporation
     4  //
     5  // SPDX-License-Identifier: Apache-2.0
     6  
     7  package http
     8  
     9  import (
    10  	"context"
    11  	"net/http"
    12  	"path"
    13  	"testing"
    14  
    15  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common"
    16  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos"
    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/requests"
    19  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/responses"
    20  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/models"
    21  
    22  	"github.com/stretchr/testify/require"
    23  )
    24  
    25  func addSubscriptionRequest() requests.AddSubscriptionRequest {
    26  	return requests.NewAddSubscriptionRequest(
    27  		dtos.Subscription{
    28  			Name:        TestSubscriptionName,
    29  			Channels:    []dtos.Address{dtos.NewRESTAddress(TestHost, TestPort, http.MethodGet)},
    30  			Receiver:    TestReceiver,
    31  			Categories:  []string{TestCategory},
    32  			Labels:      []string{TestLabel},
    33  			Description: "Test data for subscription",
    34  			AdminState:  models.Unlocked,
    35  		},
    36  	)
    37  }
    38  
    39  func updateSubscriptionRequest() requests.UpdateSubscriptionRequest {
    40  	name := TestSubscriptionName
    41  	return requests.NewUpdateSubscriptionRequest(
    42  		dtos.UpdateSubscription{
    43  			Name:     &name,
    44  			Channels: []dtos.Address{dtos.NewRESTAddress(TestHost, TestPort, http.MethodPut)},
    45  		},
    46  	)
    47  }
    48  
    49  func TestSubscriptionClient_Add(t *testing.T) {
    50  	ts := newTestServer(http.MethodPost, common.ApiSubscriptionRoute, []dtoCommon.BaseWithIdResponse{})
    51  	defer ts.Close()
    52  	client := NewSubscriptionClient(ts.URL, NewNullAuthenticationInjector(), false)
    53  	res, err := client.Add(context.Background(), []requests.AddSubscriptionRequest{addSubscriptionRequest()})
    54  	require.NoError(t, err)
    55  	require.IsType(t, []dtoCommon.BaseWithIdResponse{}, res)
    56  }
    57  
    58  func TestSubscriptionClient_Update(t *testing.T) {
    59  	ts := newTestServer(http.MethodPatch, common.ApiSubscriptionRoute, []dtoCommon.BaseResponse{})
    60  	defer ts.Close()
    61  	client := NewSubscriptionClient(ts.URL, NewNullAuthenticationInjector(), false)
    62  	res, err := client.Update(context.Background(), []requests.UpdateSubscriptionRequest{updateSubscriptionRequest()})
    63  	require.NoError(t, err)
    64  	require.IsType(t, []dtoCommon.BaseResponse{}, res)
    65  }
    66  
    67  func TestSubscriptionClient_AllSubscriptions(t *testing.T) {
    68  	ts := newTestServer(http.MethodGet, common.ApiAllSubscriptionRoute, responses.MultiSubscriptionsResponse{})
    69  	defer ts.Close()
    70  	client := NewSubscriptionClient(ts.URL, NewNullAuthenticationInjector(), false)
    71  	res, err := client.AllSubscriptions(context.Background(), 0, 10)
    72  	require.NoError(t, err)
    73  	require.IsType(t, responses.MultiSubscriptionsResponse{}, res)
    74  }
    75  
    76  func TestSubscriptionClient_DeleteSubscriptionByName(t *testing.T) {
    77  	subscriptionName := TestSubscriptionName
    78  	path := path.Join(common.ApiSubscriptionRoute, common.Name, subscriptionName)
    79  	ts := newTestServer(http.MethodDelete, path, dtoCommon.BaseResponse{})
    80  	defer ts.Close()
    81  	client := NewSubscriptionClient(ts.URL, NewNullAuthenticationInjector(), false)
    82  	res, err := client.DeleteSubscriptionByName(context.Background(), subscriptionName)
    83  	require.NoError(t, err)
    84  	require.IsType(t, dtoCommon.BaseResponse{}, res)
    85  }
    86  
    87  func TestSubscriptionClient_SubscriptionByName(t *testing.T) {
    88  	subscriptionName := TestSubscriptionName
    89  	path := path.Join(common.ApiSubscriptionRoute, common.Name, subscriptionName)
    90  	ts := newTestServer(http.MethodGet, path, responses.SubscriptionResponse{})
    91  	defer ts.Close()
    92  	client := NewSubscriptionClient(ts.URL, NewNullAuthenticationInjector(), false)
    93  	res, err := client.SubscriptionByName(context.Background(), subscriptionName)
    94  	require.NoError(t, err)
    95  	require.IsType(t, responses.SubscriptionResponse{}, res)
    96  }
    97  
    98  func TestSubscriptionClient_SubscriptionsByCategory(t *testing.T) {
    99  	category := TestCategory
   100  	urlPath := path.Join(common.ApiSubscriptionRoute, common.Category, category)
   101  	ts := newTestServer(http.MethodGet, urlPath, responses.MultiSubscriptionsResponse{})
   102  	defer ts.Close()
   103  	client := NewSubscriptionClient(ts.URL, NewNullAuthenticationInjector(), false)
   104  	res, err := client.SubscriptionsByCategory(context.Background(), category, 0, 10)
   105  	require.NoError(t, err)
   106  	require.IsType(t, responses.MultiSubscriptionsResponse{}, res)
   107  }
   108  
   109  func TestSubscriptionClient_SubscriptionsByLabel(t *testing.T) {
   110  	label := TestLabel
   111  	urlPath := path.Join(common.ApiSubscriptionRoute, common.Label, label)
   112  	ts := newTestServer(http.MethodGet, urlPath, responses.MultiSubscriptionsResponse{})
   113  	defer ts.Close()
   114  	client := NewSubscriptionClient(ts.URL, NewNullAuthenticationInjector(), false)
   115  	res, err := client.SubscriptionsByLabel(context.Background(), label, 0, 10)
   116  	require.NoError(t, err)
   117  	require.IsType(t, responses.MultiSubscriptionsResponse{}, res)
   118  }
   119  
   120  func TestSubscriptionClient_SubscriptionsByReceiver(t *testing.T) {
   121  	receiver := TestReceiver
   122  	urlPath := path.Join(common.ApiSubscriptionRoute, common.Receiver, receiver)
   123  	ts := newTestServer(http.MethodGet, urlPath, responses.MultiSubscriptionsResponse{})
   124  	defer ts.Close()
   125  	client := NewSubscriptionClient(ts.URL, NewNullAuthenticationInjector(), false)
   126  	res, err := client.SubscriptionsByReceiver(context.Background(), receiver, 0, 10)
   127  	require.NoError(t, err)
   128  	require.IsType(t, responses.MultiSubscriptionsResponse{}, res)
   129  }