test new functionality to update and delete profiles 91/10291/3
authorshikha0203 <shivani.khare@est.tech>
Thu, 19 Jan 2023 15:59:03 +0000 (15:59 +0000)
committershikha0203 <shivani.khare@est.tech>
Wed, 25 Jan 2023 16:23:00 +0000 (16:23 +0000)
Issue-ID: NONRTRIC-814
Signed-off-by: shikha0203 <shivani.khare@est.tech>
Change-Id: I09790518cc8f65920a105c0e8a7d23ead0d9eb91

capifcore/internal/publishservice/publishservice.go
capifcore/internal/publishservice/publishservice_test.go

index 3209024..3898a80 100644 (file)
@@ -289,10 +289,11 @@ func (ps *PublishService) PutApfIdServiceApisServiceApiId(ctx echo.Context, apfI
                return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err))
        }
        ps.updateDescription(pos, apfId, &updatedServiceDescription, &publishedService)
-       pos, publishedService.AefProfiles, err = ps.updateProfiles(pos, apfId, updatedServiceDescription.AefProfiles, publishedService.AefProfiles)
+       err = ps.checkProfilesRegistered(apfId, *updatedServiceDescription.AefProfiles)
        if err != nil {
                return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err))
        }
+       publishedService.AefProfiles = updatedServiceDescription.AefProfiles
        ps.publishedServices[apfId][pos] = publishedService
        err = ctx.JSON(http.StatusOK, publishedService)
        if err != nil {
@@ -342,43 +343,16 @@ func (ps *PublishService) sendEvent(service publishapi.ServiceAPIDescription, ev
        ps.eventChannel <- event
 }
 
-func (ps *PublishService) updateProfiles(pos int, apfId string, updatedServiceDescription *[]publishapi.AefProfile, publishedService *[]publishapi.AefProfile) (int, *[]publishapi.AefProfile, error) {
+func (ps *PublishService) checkProfilesRegistered(apfId string, updatedProfiles []publishapi.AefProfile) error {
+
        registeredFuncs := ps.serviceRegister.GetAefsForPublisher(apfId)
-       addedProfiles := []publishapi.AefProfile{}
-       changedProfiles := []publishapi.AefProfile{}
-       for _, profile := range *updatedServiceDescription {
+       for _, profile := range updatedProfiles {
                if !slices.Contains(registeredFuncs, profile.AefId) {
-                       return 0, nil, fmt.Errorf("function %s not registered", profile.AefId)
-               }
-               for _, publishedProfile := range *publishedService {
-                       if publishedProfile.AefId != profile.AefId {
-                               registeredProfiles := *publishedService
-                               newProfiles := append(registeredProfiles, profile)
-                               publishedService = &newProfiles
-                               addedProfiles = append(addedProfiles, profile)
-                       } else {
-                               pos, registeredProfile, err := getProfile(profile.AefId, publishedService)
-                               if err != nil {
-                                       return pos, updatedServiceDescription, fmt.Errorf("unable to update service due to: %s", err.Error())
-                               }
-                               if profile.DomainName != nil {
-                                       registeredProfile.DomainName = profile.DomainName
-                                       (*publishedService)[pos] = registeredProfile
-                               }
-                               changedProfiles = append(changedProfiles, profile)
-                       }
-               }
-       }
-       modifiedProfiles := append(changedProfiles, addedProfiles...)
-       return 0, &modifiedProfiles, nil
-}
-func getProfile(profileId string, apiProfiles *[]publishapi.AefProfile) (int, publishapi.AefProfile, error) {
-       for pos, profile := range *apiProfiles {
-               if profile.AefId == profileId {
-                       return pos, profile, nil
+                       return fmt.Errorf("function %s not registered", profile.AefId)
                }
        }
-       return 0, publishapi.AefProfile{}, fmt.Errorf("profile with ID %s is not registered for the service", profileId)
+       return nil
+
 }
 
 // This function wraps sending of an error in the Error format, and
index 2483053..8b35f55 100644 (file)
@@ -47,6 +47,7 @@ import (
 )
 
 func TestPublishUnpublishService(t *testing.T) {
+
        apfId := "apfId"
        aefId := "aefId"
        serviceRegisterMock := serviceMocks.ServiceRegister{}
@@ -102,6 +103,7 @@ func TestPublishUnpublishService(t *testing.T) {
 
        // Delete the service
        helmManagerMock.On("UninstallHelmChart", mock.Anything, mock.Anything).Return(nil)
+
        result = testutil.NewRequest().Delete("/"+apfId+"/service-apis/"+newApiId).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusNoContent, result.Code())
@@ -258,6 +260,7 @@ func TestUpdateDescription(t *testing.T) {
        assert.Equal(t, newDescription, *resultService.Description)
        assert.Equal(t, newDomainName, *(*resultService.AefProfiles)[0].DomainName)
        assert.Equal(t, "aefIdNew", (*resultService.AefProfiles)[1].AefId)
+       assert.True(t, serviceUnderTest.IsAPIPublished("aefIdNew", "path"))
 
        if publishEvent, ok := waitForEvent(eventChannel, 1*time.Second); ok {
                assert.Fail(t, "No event sent")
@@ -267,6 +270,94 @@ func TestUpdateDescription(t *testing.T) {
        }
 }
 
+func TestUpdateValidServiceWithDeletedFunction(t *testing.T) {
+       apfId := "apfId"
+       serviceApiId := "serviceApiId"
+       aefId := "aefId"
+       apiName := "apiName"
+       description := "description"
+
+       serviceRegisterMock := serviceMocks.ServiceRegister{}
+       serviceRegisterMock.On("GetAefsForPublisher", apfId).Return([]string{aefId, "otherAefId", "aefIdNew"})
+       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
+       (*serviceDescription.AefProfiles)[0].AefId = aefId
+
+       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{
+
+               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",
+                                       },
+                               },
+                       },
+               },
+       },
+       )
+       serviceDescription.AefProfiles = &test
+       serviceUnderTest.publishedServices[apfId] = []publishapi.ServiceAPIDescription{serviceDescription}
+
+       //Modify the service
+       updatedServiceDescription := getServiceAPIDescription(aefId, apiName, description)
+       updatedServiceDescription.ApiId = &serviceApiId
+       test1 := make([]publishapi.AefProfile, 1)
+       test1 = *updatedServiceDescription.AefProfiles
+       test1 = append(test1, 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 = &test1
+       testFunc := []publishapi.AefProfile{
+               (*updatedServiceDescription.AefProfiles)[1],
+       }
+
+       updatedServiceDescription.AefProfiles = &testFunc
+       result := testutil.NewRequest().Put("/"+apfId+"/service-apis/"+serviceApiId).WithJsonBody(updatedServiceDescription).Go(t, requestHandler)
+       var resultService publishapi.ServiceAPIDescription
+       assert.Equal(t, http.StatusOK, result.Code())
+       err := result.UnmarshalBodyToObject(&resultService)
+       assert.NoError(t, err, "error unmarshaling response")
+       assert.Len(t, (*resultService.AefProfiles), 1)
+       assert.False(t, serviceUnderTest.IsAPIPublished("aefId", "path"))
+
+}
 func getEcho(serviceRegister providermanagement.ServiceRegister, helmManager helmmanagement.HelmManager) (*PublishService, chan eventsapi.EventNotification, *echo.Echo) {
        swagger, err := publishapi.GetSwagger()
        if err != nil {