NONRTRIC-946: Capifcore - join on ApiName
[nonrtric/plt/sme.git] / capifcore / internal / publishservice / publishservice_test.go
index 6882bc9..69ca77e 100644 (file)
@@ -68,7 +68,6 @@ func TestUnregisteredService(t *testing.T) {
        assert.Equal(t, http.StatusNotFound, *resultError.Status)
 }
 
-
 func TestPublishUnpublishService(t *testing.T) {
 
        apfId := "apfId"
@@ -259,6 +258,76 @@ func TestGetPublishedServices(t *testing.T) {
        assert.Len(t, result, 2)
 }
 
+func TestGetAllowedServices(t *testing.T) {
+       serviceUnderTest := NewPublishService(nil, nil, nil)
+
+       aefProfiles1 := []publishapi.AefProfile{}
+       apiName1 := "api Name 1"
+       aefProfiles2 := []publishapi.AefProfile{}
+       apiName2 := "api Name 2"
+       aefProfiles3 := []publishapi.AefProfile{}
+       apiName3 := "api Name 3"
+       aefProfiles4 := []publishapi.AefProfile{}
+       apiName4 := "api Name 4"
+
+       serviceUnderTest.publishedServices["publisher1"] = []publishapi.ServiceAPIDescription{
+               {
+                       ApiName:     apiName1,
+                       AefProfiles: &aefProfiles1,
+               },
+               {
+                       ApiName:     apiName2,
+                       AefProfiles: &aefProfiles2,
+               },
+               {
+                       ApiName:     apiName3,
+                       AefProfiles: &aefProfiles3,
+               },
+               {
+                       ApiName:     apiName4,
+                       AefProfiles: &aefProfiles4,
+               },
+       }
+
+       serviceDescription := publishapi.ServiceAPIDescription{
+               ApiName:     apiName4,
+               AefProfiles: &aefProfiles4,
+       }
+       serviceUnderTest.publishedServices["publisher2"] = []publishapi.ServiceAPIDescription{
+               serviceDescription,
+       }
+
+       allowedApiList := []publishapi.ServiceAPIDescription{
+               {
+                       ApiName:     apiName2,
+                       AefProfiles: &aefProfiles2,
+               },
+               {
+                       ApiName:     apiName3,
+                       AefProfiles: &aefProfiles3,
+               },
+       }
+
+       result := serviceUnderTest.GetAllowedPublishedServices(allowedApiList)
+       assert.Len(t, result, 2)
+
+       result = serviceUnderTest.GetAllowedPublishedServices(nil)
+       assert.Len(t, result, 0)
+
+       result = serviceUnderTest.GetAllowedPublishedServices([]publishapi.ServiceAPIDescription{})
+       assert.Len(t, result, 0)
+
+       // Create a list with no ApiNames
+       badApiList := []publishapi.ServiceAPIDescription{
+               {
+               },
+               {
+               },
+       }
+       result = serviceUnderTest.GetAllowedPublishedServices(badApiList)
+       assert.Len(t, result, 0)
+}
+
 func TestUpdateDescription(t *testing.T) {
        apfId := "apfId"
        serviceApiId := "serviceApiId"
@@ -332,6 +401,72 @@ func TestUpdateDescription(t *testing.T) {
        }
 }
 
+func TestFailedUpdateDescription(t *testing.T) {
+       apfId := "apfId"
+       serviceApiId := "serviceApiId"
+       // Trying to update a different serviceApiId will cause a 400 error
+       updatedServiceApiId := "updatedServiceApiId"
+       aefId := "aefId"
+       apiName := "apiName"
+       description := "description"
+
+       serviceRegisterMock := serviceMocks.ServiceRegister{}
+       serviceRegisterMock.On("GetAefsForPublisher", apfId).Return([]string{aefId, "otherAefId", "aefIdNew"})
+       serviceRegisterMock.On("IsPublishingFunctionRegistered", apfId).Return(true)
+       helmManagerMock := helmMocks.HelmManager{}
+       helmManagerMock.On("InstallHelmChart", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil)
+       serviceUnderTest, _, requestHandler := getEcho(&serviceRegisterMock, &helmManagerMock)
+       serviceDescription := getServiceAPIDescription(aefId, apiName, description)
+       serviceDescription.ApiId = &serviceApiId
+       serviceUnderTest.publishedServices[apfId] = []publishapi.ServiceAPIDescription{serviceDescription}
+       (*serviceDescription.AefProfiles)[0].AefId = aefId
+
+       // Modify the service
+       updatedServiceDescription := getServiceAPIDescription(aefId, apiName, description)
+       updatedServiceDescription.ApiId = &updatedServiceApiId
+       (*updatedServiceDescription.AefProfiles)[0].AefId = aefId
+       newDescription := "new description"
+       updatedServiceDescription.Description = &newDescription
+       newDomainName := "new domainName"
+       (*updatedServiceDescription.AefProfiles)[0].DomainName = &newDomainName
+
+       newProfileDomain := "new profile Domain name"
+       var protocol publishapi.Protocol = "HTTP_1_1"
+
+       test := append(*updatedServiceDescription.AefProfiles, publishapi.AefProfile{
+               AefId:      "aefIdNew",
+               DomainName: &newProfileDomain,
+               Protocol:   &protocol,
+               Versions: []publishapi.Version{
+                       {
+                               ApiVersion: "v1",
+                               Resources: &[]publishapi.Resource{
+                                       {
+                                               CommType: "REQUEST_RESPONSE",
+                                               Operations: &[]publishapi.Operation{
+                                                       "POST",
+                                               },
+                                               ResourceName: "app",
+                                               Uri:          "app",
+                                       },
+                               },
+                       },
+               },
+       },
+       )
+       updatedServiceDescription.AefProfiles = &test
+
+       result := testutil.NewRequest().Put("/"+apfId+"/service-apis/"+serviceApiId).WithJsonBody(updatedServiceDescription).Go(t, requestHandler)
+       assert.Equal(t, http.StatusBadRequest, result.Code())
+
+       var resultError common29122.ProblemDetails
+       err := result.UnmarshalJsonToObject(&resultError)
+       assert.NoError(t, err, "error unmarshaling response")
+
+       assert.Contains(t, *resultError.Cause, "ServiceAPIDescription ApiId doesn't match path parameter")
+       assert.Equal(t, http.StatusBadRequest, *resultError.Status)
+}
+
 func TestUpdateValidServiceWithDeletedFunction(t *testing.T) {
        apfId := "apfId"
        serviceApiId := "serviceApiId"
@@ -352,10 +487,7 @@ func TestUpdateValidServiceWithDeletedFunction(t *testing.T) {
 
        newProfileDomain := "new profile Domain name"
        var protocol publishapi.Protocol = "HTTP_1_1"
-       test := make([]publishapi.AefProfile, 1)
-       test = *serviceDescription.AefProfiles
-       test = append(test, publishapi.AefProfile{
-
+       test := append(*serviceDescription.AefProfiles, publishapi.AefProfile{
                AefId:      "aefIdNew",
                DomainName: &newProfileDomain,
                Protocol:   &protocol,
@@ -382,10 +514,7 @@ func TestUpdateValidServiceWithDeletedFunction(t *testing.T) {
        //Modify the service
        updatedServiceDescription := getServiceAPIDescription(aefId, apiName, description)
        updatedServiceDescription.ApiId = &serviceApiId
-       test1 := make([]publishapi.AefProfile, 1)
-       test1 = *updatedServiceDescription.AefProfiles
-       test1 = append(test1, publishapi.AefProfile{
-
+       test1 := append(*updatedServiceDescription.AefProfiles, publishapi.AefProfile{
                AefId:      "aefIdNew",
                DomainName: &newProfileDomain,
                Protocol:   &protocol,