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 }