Fix problem in generation of securityapi
[nonrtric/plt/sme.git] / capifcore / internal / invokermanagement / invokermanagement_test.go
index 365a7d0..c662d6d 100644 (file)
@@ -23,7 +23,6 @@ import (
        "fmt"
        "net/http"
        "os"
-       "path"
        "strings"
        "testing"
 
@@ -41,26 +40,25 @@ import (
        "github.com/deepmap/oapi-codegen/pkg/testutil"
        echomiddleware "github.com/labstack/echo/v4/middleware"
        "github.com/stretchr/testify/assert"
-       "github.com/stretchr/testify/mock"
 )
 
 func TestOnboardInvoker(t *testing.T) {
-       publishRegisterMock := publishmocks.PublishRegister{}
-       publishRegisterMock.On("AreAPIsPublished", mock.Anything).Return(true)
-       invokerUnderTest, requestHandler := getEcho(&publishRegisterMock)
-
        aefProfiles := []publishserviceapi.AefProfile{
                getAefProfile("aefId"),
        }
        apiId := "apiId"
-       var apiList invokermanagementapi.APIList = []publishserviceapi.ServiceAPIDescription{
+       publishedServices := []publishserviceapi.ServiceAPIDescription{
                {
                        ApiId:       &apiId,
                        AefProfiles: &aefProfiles,
                },
        }
+       publishRegisterMock := publishmocks.PublishRegister{}
+       publishRegisterMock.On("GetAllPublishedServices").Return(publishedServices)
+       invokerUnderTest, requestHandler := getEcho(&publishRegisterMock)
+
        invokerInfo := "invoker a"
-       newInvoker := getInvoker(invokerInfo, apiList)
+       newInvoker := getInvoker(invokerInfo)
 
        // Onboard a valid invoker
        result := testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
@@ -78,7 +76,8 @@ func TestOnboardInvoker(t *testing.T) {
        assert.Equal(t, "http://example.com/onboardedInvokers/"+*resultInvoker.ApiInvokerId, result.Recorder.Header().Get(echo.HeaderLocation))
        assert.True(t, invokerUnderTest.IsInvokerRegistered(wantedInvokerId))
        assert.True(t, invokerUnderTest.VerifyInvokerSecret(wantedInvokerId, wantedInvokerSecret))
-       publishRegisterMock.AssertCalled(t, "AreAPIsPublished", mock.Anything)
+       publishRegisterMock.AssertCalled(t, "GetAllPublishedServices")
+       assert.Equal(t, invokermanagementapi.APIList(publishedServices), *resultInvoker.ApiList)
 
        // Onboard an invoker missing required NotificationDestination, should get 400 with problem details
        invalidInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
@@ -115,63 +114,63 @@ func TestOnboardInvoker(t *testing.T) {
 func TestDeleteInvoker(t *testing.T) {
        invokerUnderTest, requestHandler := getEcho(nil)
 
+       invokerId := "invokerId"
        newInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
+               ApiInvokerId:            &invokerId,
                NotificationDestination: "url",
                OnboardingInformation: invokermanagementapi.OnboardingInformation{
                        ApiInvokerPublicKey: "key",
                },
        }
-
-       // Onboard an invoker
-       result := testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
-
-       invokerUrl := result.Recorder.Header().Get(echo.HeaderLocation)
-       assert.True(t, invokerUnderTest.IsInvokerRegistered(path.Base(invokerUrl)))
+       invokerUnderTest.onboardedInvokers[invokerId] = newInvoker
+       assert.True(t, invokerUnderTest.IsInvokerRegistered(invokerId))
 
        // Delete the invoker
-       result = testutil.NewRequest().Delete(invokerUrl).Go(t, requestHandler)
+       result := testutil.NewRequest().Delete("/onboardedInvokers/"+invokerId).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusNoContent, result.Code())
-       assert.False(t, invokerUnderTest.IsInvokerRegistered(path.Base(invokerUrl)))
+       assert.False(t, invokerUnderTest.IsInvokerRegistered(invokerId))
 }
 
 func TestUpdateInvoker(t *testing.T) {
-       _, requestHandler := getEcho(nil)
+       publishRegisterMock := publishmocks.PublishRegister{}
+       publishRegisterMock.On("GetAllPublishedServices").Return([]publishserviceapi.ServiceAPIDescription{})
+       serviceUnderTest, requestHandler := getEcho(&publishRegisterMock)
 
-       newInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
+       invokerId := "invokerId"
+       invoker := invokermanagementapi.APIInvokerEnrolmentDetails{
+               ApiInvokerId:            &invokerId,
                NotificationDestination: "url",
                OnboardingInformation: invokermanagementapi.OnboardingInformation{
                        ApiInvokerPublicKey: "key",
                },
        }
+       serviceUnderTest.onboardedInvokers[invokerId] = invoker
 
-       // Onboard an invoker
-       result := testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
-       var resultInvoker invokermanagementapi.APIInvokerEnrolmentDetails
-       result.UnmarshalBodyToObject(&resultInvoker)
-
-       invokerId := resultInvoker.ApiInvokerId
-       invokerUrl := result.Recorder.Header().Get(echo.HeaderLocation)
-
-       // Update the invoker with valid invoker, should return 200 with invoker details
-       result = testutil.NewRequest().Put(invokerUrl).WithJsonBody(resultInvoker).Go(t, requestHandler)
+       // Update the invoker with valid invoker, should return 200 with updated invoker details
+       newNotifURL := "newUrl"
+       invoker.NotificationDestination = common29122.Uri(newNotifURL)
+       newPublicKey := "newPublicKey"
+       invoker.OnboardingInformation.ApiInvokerPublicKey = newPublicKey
+       result := testutil.NewRequest().Put("/onboardedInvokers/"+invokerId).WithJsonBody(invoker).Go(t, requestHandler)
 
+       var resultInvoker invokermanagementapi.APIInvokerEnrolmentDetails
        assert.Equal(t, http.StatusOK, result.Code())
        err := result.UnmarshalBodyToObject(&resultInvoker)
        assert.NoError(t, err, "error unmarshaling response")
-       assert.Equal(t, invokerId, resultInvoker.ApiInvokerId)
-       assert.Equal(t, newInvoker.NotificationDestination, resultInvoker.NotificationDestination)
-       assert.Equal(t, newInvoker.OnboardingInformation.ApiInvokerPublicKey, resultInvoker.OnboardingInformation.ApiInvokerPublicKey)
+       assert.Equal(t, invokerId, *resultInvoker.ApiInvokerId)
+       assert.Equal(t, newNotifURL, string(resultInvoker.NotificationDestination))
+       assert.Equal(t, newPublicKey, resultInvoker.OnboardingInformation.ApiInvokerPublicKey)
 
        // Update with an invoker missing required NotificationDestination, should get 400 with problem details
        validOnboardingInfo := invokermanagementapi.OnboardingInformation{
                ApiInvokerPublicKey: "key",
        }
        invalidInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
-               ApiInvokerId:          invokerId,
+               ApiInvokerId:          &invokerId,
                OnboardingInformation: validOnboardingInfo,
        }
-       result = testutil.NewRequest().Put(invokerUrl).WithJsonBody(invalidInvoker).Go(t, requestHandler)
+       result = testutil.NewRequest().Put("/onboardedInvokers/"+invokerId).WithJsonBody(invalidInvoker).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusBadRequest, result.Code())
        var problemDetails common29122.ProblemDetails
@@ -185,7 +184,7 @@ func TestUpdateInvoker(t *testing.T) {
        // Update with an invoker missing required OnboardingInformation.ApiInvokerPublicKey, should get 400 with problem details
        invalidInvoker.NotificationDestination = "url"
        invalidInvoker.OnboardingInformation = invokermanagementapi.OnboardingInformation{}
-       result = testutil.NewRequest().Put(invokerUrl).WithJsonBody(invalidInvoker).Go(t, requestHandler)
+       result = testutil.NewRequest().Put("/onboardedInvokers/"+invokerId).WithJsonBody(invalidInvoker).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusBadRequest, result.Code())
        err = result.UnmarshalBodyToObject(&problemDetails)
@@ -198,7 +197,7 @@ func TestUpdateInvoker(t *testing.T) {
        invalidId := "1"
        invalidInvoker.ApiInvokerId = &invalidId
        invalidInvoker.OnboardingInformation = validOnboardingInfo
-       result = testutil.NewRequest().Put(invokerUrl).WithJsonBody(invalidInvoker).Go(t, requestHandler)
+       result = testutil.NewRequest().Put("/onboardedInvokers/"+invokerId).WithJsonBody(invalidInvoker).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusBadRequest, result.Code())
        err = result.UnmarshalBodyToObject(&problemDetails)
@@ -209,8 +208,8 @@ func TestUpdateInvoker(t *testing.T) {
 
        // Update an invoker that has not been onboarded, shold get 404 with problem details
        missingId := "1"
-       newInvoker.ApiInvokerId = &missingId
-       result = testutil.NewRequest().Put("/onboardedInvokers/"+missingId).WithJsonBody(newInvoker).Go(t, requestHandler)
+       invoker.ApiInvokerId = &missingId
+       result = testutil.NewRequest().Put("/onboardedInvokers/"+missingId).WithJsonBody(invoker).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusNotFound, result.Code())
        err = result.UnmarshalBodyToObject(&problemDetails)
@@ -222,39 +221,42 @@ func TestUpdateInvoker(t *testing.T) {
 }
 
 func TestGetInvokerApiList(t *testing.T) {
-       publishRegisterMock := publishmocks.PublishRegister{}
-       publishRegisterMock.On("AreAPIsPublished", mock.Anything).Return(true)
-       invokerUnderTest, requestHandler := getEcho(&publishRegisterMock)
-
-       // Onboard two invokers
-       aefProfiles := []publishserviceapi.AefProfile{
+       aefProfiles1 := []publishserviceapi.AefProfile{
                getAefProfile("aefId"),
        }
        apiId := "apiId"
-       var apiList invokermanagementapi.APIList = []publishserviceapi.ServiceAPIDescription{
+       apiList := []publishserviceapi.ServiceAPIDescription{
                {
                        ApiId:       &apiId,
-                       AefProfiles: &aefProfiles,
+                       AefProfiles: &aefProfiles1,
                },
        }
-       invokerInfo := "invoker a"
-       newInvoker := getInvoker(invokerInfo, apiList)
-       testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
-       aefProfiles = []publishserviceapi.AefProfile{
+       aefProfiles2 := []publishserviceapi.AefProfile{
                getAefProfile("aefId2"),
        }
        apiId2 := "apiId2"
-       apiList = []publishserviceapi.ServiceAPIDescription{
-               {
-                       ApiId:       &apiId2,
-                       AefProfiles: &aefProfiles,
-               },
-       }
-       newInvoker = getInvoker("invoker b", apiList)
-       testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
+       apiList = append(apiList, publishserviceapi.ServiceAPIDescription{
+               ApiId:       &apiId2,
+               AefProfiles: &aefProfiles2,
+       })
+       publishRegisterMock := publishmocks.PublishRegister{}
+       publishRegisterMock.On("GetAllPublishedServices").Return(apiList)
+       invokerUnderTest, _ := getEcho(&publishRegisterMock)
 
-       wantedApiList := invokerUnderTest.GetInvokerApiList("api_invoker_id_" + strings.Replace(invokerInfo, " ", "_", 1))
+       invokerInfo := "invoker a"
+       newInvoker := getInvoker(invokerInfo)
+       invokerAId := "api_invoker_id_" + strings.ReplaceAll(invokerInfo, " ", "_")
+       newInvoker.ApiInvokerId = &invokerAId
+       invokerUnderTest.onboardedInvokers[invokerAId] = newInvoker
+       invokerInfo = "invoker b"
+       newInvoker = getInvoker(invokerInfo)
+       invokerId := "api_invoker_id_" + strings.ReplaceAll(invokerInfo, " ", "_")
+       newInvoker.ApiInvokerId = &invokerId
+       invokerUnderTest.onboardedInvokers[invokerId] = newInvoker
+
+       wantedApiList := invokerUnderTest.GetInvokerApiList(invokerAId)
        assert.NotNil(t, wantedApiList)
+       assert.Len(t, *wantedApiList, 2)
        assert.Equal(t, apiId, *(*wantedApiList)[0].ApiId)
 }
 
@@ -292,14 +294,14 @@ func getAefProfile(aefId string) publishserviceapi.AefProfile {
        }
 }
 
-func getInvoker(invokerInfo string, apiList invokermanagementapi.APIList) invokermanagementapi.APIInvokerEnrolmentDetails {
+func getInvoker(invokerInfo string) invokermanagementapi.APIInvokerEnrolmentDetails {
        newInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
                ApiInvokerInformation:   &invokerInfo,
                NotificationDestination: "url",
                OnboardingInformation: invokermanagementapi.OnboardingInformation{
                        ApiInvokerPublicKey: "key",
                },
-               ApiList: &apiList,
+               ApiList: nil,
        }
        return newInvoker
 }