Skip to content
README.md 100 KiB
Newer Older
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
  3. Response to Publish request must accomplish:
     1. **201 Created**
     2. Response Body must follow **ServiceAPIDescription** data structure with:
        * apiId
        * 2 profiles with:
          * resourceName resource_1 and aefId1
          * resourceName resource_2 and aefId2
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}**
  4. Response to Discover Request By Invoker:
     1. **200 OK** response.
     2. Response body must follow **DiscoveredAPIs** data structure:
        * Check if DiscoveredAPIs contains the API Published previously
Jorge Moratinos's avatar
Jorge Moratinos committed
          * Check if contains the **apiStatus** with aefId1
  5. Response to Update published Service API at CCF:
     1. **200 OK**
     2. Store response with updated serviceAPIDescription.
  6. Mock Server received messages must accomplish:
     1. **Two Events have been received**.
Jorge Moratinos's avatar
Jorge Moratinos committed
     2. Validate received events follow **EventNotification** data structure, with **eventDetail** parameter.
        1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetail** with apiIds and serviceAPIDescription.
        2. The other one must be **SERVICE_API_UPDATE** apiId published API with **eventDetail** containing serviceAPIDescription updated.
Jorge Moratinos's avatar
Jorge Moratinos committed
---
## Test Case 13: Update published API with apiStatus empty and apiStatusMonitoring inactive
Jorge Moratinos's avatar
Jorge Moratinos committed
**Test ID**: ***api_status-13***
Jorge Moratinos's avatar
Jorge Moratinos committed
  This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails, and SERVICE_API_UPDATE after update apiStatus to empty aefIds array with **ApiStatusMonitoring** inactive.

**Pre-Conditions**:

  * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)
  * CAPIF provider is correctly registered with 2 aefs.
  * **Mock Server is up and running to receive requests.**
  * **Mock Server is clean.**

**Execution Steps**:
  1. Register Invoker and Onboard Invoker at CCF.
  2. Register Provider at CCF with 2 aefs.
Jorge Moratinos's avatar
Jorge Moratinos committed
  3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**)
  4. Publish Service API at CCF:
Jorge Moratinos's avatar
Jorge Moratinos committed
     1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**)
     2. This API includes "API Status" information at **service API Description** with only aefId1.
  5. Discover Service APIs by Invoker
     1. includes filter by query parameter **aef-id**
Jorge Moratinos's avatar
Jorge Moratinos committed
  6. Update Published API:
     1. apiStatus present with empty aefIds array.
     2. apiStatusMonitoring feature not active (binary 0 0000 0000 -> string **0**)

**Information of Test**:

  1. Perform [Invoker Onboarding]
  2. Perform [Provider Registration] with 2 aefs
  3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:
       1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions**
       2. body [event subscription request body] with:
Jorge Moratinos's avatar
Jorge Moratinos committed
          1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']**
          2. supportedFeatures: binary 1100 -> string **C**
       3. Use **Invoker Certificate**
  4. Publish Service API at CCF:
     * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
Jorge Moratinos's avatar
Jorge Moratinos committed
       * supportedFeatures **020**
       * 2 profiles, one with each aef.
Jorge Moratinos's avatar
Jorge Moratinos committed
       * apiStatus with aefId1 inside array
     * Use **APF Certificate**
  5. Request Discover Published APIs:
     * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}**
     * Param api-invoker-id is mandatory
     * Use **Invoker Certificate**
Jorge Moratinos's avatar
Jorge Moratinos committed
  6. Update published Service API:
     * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}**
     * Use **APF Certificate**
Jorge Moratinos's avatar
Jorge Moratinos committed
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **0**
       * 2 profiles, one with each aef.
       * apiStatus present with empty aefIds array.

**Expected Result**:

  1. Response to Onboard request must accomplish:
     1. **201 Created**
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
  3. Response to Publish request must accomplish:
     1. **201 Created**
     2. Response Body must follow **ServiceAPIDescription** data structure with:
        * apiId
        * 2 profiles with:
          * resourceName resource_1 and aefId1
          * resourceName resource_2 and aefId2
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}**
  4. Response to Discover Request By Invoker:
     1. **200 OK** response.
     2. Response body must follow **DiscoveredAPIs** data structure:
        * Check if DiscoveredAPIs contains the API Published previously
Jorge Moratinos's avatar
Jorge Moratinos committed
          * Check if contains the **apiStatus** with aefId1
Jorge Moratinos's avatar
Jorge Moratinos committed
  5. Response to Update request must accomplish:
     1. **400 Bad Request**
     2. Error Response Body must accomplish with **ProblemDetails** data structure with:
        * status 400
        * title with message "Bad Request"
        * detail with message "Set apiStatus with apiStatusMonitoring feature inactive at supportedFeatures if not allowed".
        * cause with message "apiStatus can't be set if apiStatusMonitoring is inactive".
Jorge Moratinos's avatar
Jorge Moratinos committed
  6. Mock Server received messages must accomplish:
     1. **One Event have been received**.
     2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter.
        1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription.
Jorge Moratinos's avatar
Jorge Moratinos committed
---
## Test Case 14: Update published API with apiStatus empty and apiStatusMonitoring active
Jorge Moratinos's avatar
Jorge Moratinos committed
**Test ID**: ***api_status-14***
Jorge Moratinos's avatar
Jorge Moratinos committed
  This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails, SERVICE_API_UPDATE and SERVICE_API_UNAVAILABLE after update apiStatus to empty aefIds array with **ApiStatusMonitoring** active.

**Pre-Conditions**:

  * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)
  * CAPIF provider is correctly registered with 2 aefs.
  * **Mock Server is up and running to receive requests.**
  * **Mock Server is clean.**

**Execution Steps**:
  1. Register Invoker and Onboard Invoker at CCF.
  2. Register Provider at CCF with 2 aefs.
  3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**)
  4. Publish Service API at CCF:
     1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**)
     2. This API includes "API Status" information at **service API Description** with only aefId1.
  5. Discover Service APIs by Invoker
     1. includes filter by query parameter **aef-id**
  6. Update Published API:
Jorge Moratinos's avatar
Jorge Moratinos committed
     1. apiStatus present with empty aefIds array.
     2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**)

**Information of Test**:

  1. Perform [Invoker Onboarding]
  2. Perform [Provider Registration] with 2 aefs
  3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:
       1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions**
       2. body [event subscription request body] with:
Jorge Moratinos's avatar
Jorge Moratinos committed
          1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']**
          2. supportedFeatures: binary 1100 -> string **C**
       3. Use **Invoker Certificate**
  4. Publish Service API at CCF:
     * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **020**
       * 2 profiles, one with each aef.
       * apiStatus with aefId1 inside array
     * Use **APF Certificate**
  5. Request Discover Published APIs:
     * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}**
     * Param api-invoker-id is mandatory
     * Use **Invoker Certificate**
  6. Update published Service API:
     * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}**
     * Use **APF Certificate**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
Jorge Moratinos's avatar
Jorge Moratinos committed
       * supportedFeatures **20**
       * 2 profiles, one with each aef.
Jorge Moratinos's avatar
Jorge Moratinos committed
       * apiStatus present with empty aefIds array.

**Expected Result**:

  1. Response to Onboard request must accomplish:
     1. **201 Created**
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
  3. Response to Publish request must accomplish:
     1. **201 Created**
     2. Response Body must follow **ServiceAPIDescription** data structure with:
        * apiId
        * 2 profiles with:
          * resourceName resource_1 and aefId1
          * resourceName resource_2 and aefId2
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}**
  4. Response to Discover Request By Invoker:
     1. **200 OK** response.
     2. Response body must follow **DiscoveredAPIs** data structure:
        * Check if DiscoveredAPIs contains the API Published previously
          * Check if contains the **apiStatus** with aefId1
  5. Response to Update published Service API at CCF:
     1. **200 OK**
     2. Store response with updated serviceAPIDescription.
  6. Mock Server received messages must accomplish:
Jorge Moratinos's avatar
Jorge Moratinos committed
     1. **Two Event have been received**.
     2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter.
        1. One should be **SERVICE_API_AVAILABLE**.
        2. One should be **SERVICE_API_UPDATE**.
        3. One should be **SERVICE_API_UNAVAILABLE**.
Jorge Moratinos's avatar
Jorge Moratinos committed
---
## Test Case 15: Update published API with apiStatus only aef2 and apiStatusMonitoring active
Jorge Moratinos's avatar
Jorge Moratinos committed
**Test ID**: ***api_status-15***
Jorge Moratinos's avatar
Jorge Moratinos committed
  This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails and SERVICE_API_UPDATE after update apiStatus to aefId2 array with **ApiStatusMonitoring** active.

**Pre-Conditions**:

  * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)
  * CAPIF provider is correctly registered with 2 aefs.
  * **Mock Server is up and running to receive requests.**
  * **Mock Server is clean.**

**Execution Steps**:
  1. Register Invoker and Onboard Invoker at CCF.
  2. Register Provider at CCF with 2 aefs.
  3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**)
  4. Publish Service API at CCF:
     1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**)
     2. This API includes "API Status" information at **service API Description** with only aefId1.
  5. Discover Service APIs by Invoker
     1. includes filter by query parameter **aef-id**
  6. Update Published API:
     1. apiStatus present with empty aefIds array.
Jorge Moratinos's avatar
Jorge Moratinos committed
     2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**)

**Information of Test**:

  1. Perform [Invoker Onboarding]
  2. Perform [Provider Registration] with 2 aefs
  3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:
       1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions**
       2. body [event subscription request body] with:
Jorge Moratinos's avatar
Jorge Moratinos committed
          1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']**
          2. supportedFeatures: binary 1100 -> string **C**
       3. Use **Invoker Certificate**
  4. Publish Service API at CCF:
     * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **020**
       * 2 profiles, one with each aef.
       * apiStatus with aefId1 inside array
     * Use **APF Certificate**
  5. Request Discover Published APIs:
     * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}**
     * Param api-invoker-id is mandatory
     * Use **Invoker Certificate**
  6. Update published Service API:
     * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}**
     * Use **APF Certificate**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
Jorge Moratinos's avatar
Jorge Moratinos committed
       * supportedFeatures **20**
       * 2 profiles, one with each aef.
Jorge Moratinos's avatar
Jorge Moratinos committed
       * apiStatus present with aefId2 in aefIds array.

**Expected Result**:

  1. Response to Onboard request must accomplish:
     1. **201 Created**
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
  3. Response to Publish request must accomplish:
     1. **201 Created**
     2. Response Body must follow **ServiceAPIDescription** data structure with:
        * apiId
        * 2 profiles with:
          * resourceName resource_1 and aefId1
          * resourceName resource_2 and aefId2
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}**
  4. Response to Discover Request By Invoker:
     1. **200 OK** response.
     2. Response body must follow **DiscoveredAPIs** data structure:
        * Check if DiscoveredAPIs contains the API Published previously
          * Check if contains the **apiStatus** with aefId1
Jorge Moratinos's avatar
Jorge Moratinos committed
  5. Response to Update published Service API at CCF:
     1. **200 OK**
Jorge Moratinos's avatar
Jorge Moratinos committed
     2. Store response with updated serviceAPIDescription.
  6. Mock Server received messages must accomplish:
Jorge Moratinos's avatar
Jorge Moratinos committed
     1. **Two Event have been received**.
     2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter.
        1. One should be **SERVICE_API_AVAILABLE**.
        2. One should be **SERVICE_API_UPDATE**.

---
## Test Case 16: Published API without aefs available updated to one aef available

**Test ID**: ***api_status-16***

**Description**:

  This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_UNAVAILABLE in mockserver when api is published with apiStatus empty by a provider containing eventDetails, SERVICE_API_UPDATE and SERVICE_API_AVAILABLE after update apiStatus to aefId2 array with **ApiStatusMonitoring** active, and SERVICE_API_UNAVAILABLE when API is unpublished.

**Pre-Conditions**:

  * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)
  * CAPIF provider is correctly registered with 2 aefs.
  * **Mock Server is up and running to receive requests.**
  * **Mock Server is clean.**

**Execution Steps**:

  1. Register Invoker and Onboard Invoker at CCF.
  2. Register Provider at CCF with 2 aefs.
  3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**)
  4. Publish Service API at CCF:
     1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**)
     2. This API includes "API Status" information at **service API Description** with empty aefIds array.
  5. Discover Service APIs by Invoker
     1. includes filter by query parameter **aef-id**
  6. Update Published API:
     1. apiStatus present with aefId2 in aefIds array.
     2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**)
  7. Provider remove published API.

**Information of Test**:
Jorge Moratinos's avatar
Jorge Moratinos committed
  1. Perform [Invoker Onboarding]
  2. Perform [Provider Registration] with 2 aefs
  3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:
       1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions**
       2. body [event subscription request body] with:
          1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']**
          2. supportedFeatures: binary 1100 -> string **C**
       3. Use **Invoker Certificate**
  4. Publish Service API at CCF:
     * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **020**
       * 2 profiles, one with each aef.
       * apiStatus with empty aefIds array.
     * Use **APF Certificate**
  5. Request Discover Published APIs:
     * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}**
     * Param api-invoker-id is mandatory
     * Use **Invoker Certificate**
  6. Update published Service API:
     * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}**
     * Use **APF Certificate**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **20**
       * 2 profiles, one with each aef.
       * apiStatus present with aefId2 in aefIds array.
  7. Remove published Service API:
     * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}**
     * Use **APF Certificate**
Jorge Moratinos's avatar
Jorge Moratinos committed
**Expected Result**:
Jorge Moratinos's avatar
Jorge Moratinos committed
  1. Response to Onboard request must accomplish:
     1. **201 Created**
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
  3. Response to Publish request must accomplish:
     1. **201 Created**
     2. Response Body must follow **ServiceAPIDescription** data structure with:
        * apiId
        * 2 profiles with:
          * resourceName resource_1 and aefId1
          * resourceName resource_2 and aefId2
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}**
  4. Response to Discover Request By Invoker:
     1. **200 OK** response.
     2. Response body must follow **DiscoveredAPIs** data structure:
        * Check if DiscoveredAPIs contains the API Published previously
          * Check if contains the **apiStatus** with aefId1
  5. Response to Update published Service API at CCF:
     1. **200 OK**
     2. Store response with updated serviceAPIDescription.
  6. Mock Server received messages must accomplish:
     1. **Two Event have been received**.
     2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter.
        1. One should be **SERVICE_API_UNAVAILABLE** aefIds array inside apiStatus empty.
        2. One should be **SERVICE_API_UPDATE** aefIds array inside apiStatus contains apfId2.
        3. One should be **SERVICE_API_AVAILABLE** aefIds array inside apiStatus contains apfId2.
        4. One should be **SERVICE_API_UNAVAILABLE** aefIds array inside apiStatus contains apfId2.

---
## Test Case 17: Patch published (apiStatusMonitoring active) API with apiStatus only aefId2

**Test ID**: ***api_status-17***

**Description**:

  This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider (with apiStatusMonitoring active), containing eventDetails, and SERVICE_API_UPDATE after patch with apfId2 in apiStatus array.

**Pre-Conditions**:

  * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)
  * CAPIF provider is correctly registered with 2 aefs.
  * **Mock Server is up and running to receive requests.**
  * **Mock Server is clean.**

**Execution Steps**:
  1. Register Invoker and Onboard Invoker at CCF.
  2. Register Provider at CCF with 2 aefs.
  3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**)
  4. Publish Service API at CCF:
     1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**)
     2. This API includes "API Status" information at **service API Description** with only aefId1.
  5. Discover Service APIs by Invoker
     1. includes filter by query parameter **aef-id**
  6. Patch Published API:
     1. apiStatus present with aefId2 in array.

**Information of Test**:

  1. Perform [Invoker Onboarding]
  2. Perform [Provider Registration] with 2 aefs
  3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:
       1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions**
       2. body [event subscription request body] with:
Jorge Moratinos's avatar
Jorge Moratinos committed
          1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']**
          2. supportedFeatures: binary 1100 -> string **C**
       3. Use **Invoker Certificate**
  4. Publish Service API at CCF:
     * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **020**
       * 2 profiles, one with each aef.
       * apiStatus with aefId1 inside array
     * Use **APF Certificate**
  5. Request Discover Published APIs:
     * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}**
     * Param api-invoker-id is mandatory
     * Use **Invoker Certificate**
  6. Update published Service API:
     * Send **PATCH** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}**
     * Use **APF Certificate**
     * body [service api description patch] and realted with aefId1 and aefId2.
       * apiStatus present with aefId2.

**Expected Result**:

  1. Response to Onboard request must accomplish:
     1. **201 Created**
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
  3. Response to Publish request must accomplish:
     1. **201 Created**
     2. Response Body must follow **ServiceAPIDescription** data structure with:
        * apiId
        * 2 profiles with:
          * resourceName resource_1 and aefId1
          * resourceName resource_2 and aefId2
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}**
  4. Response to Discover Request By Invoker:
     1. **200 OK** response.
     2. Response body must follow **DiscoveredAPIs** data structure:
        * Check if DiscoveredAPIs contains the API Published previously
          * Check if contains the **apiStatus** with aefId1
  5. Response to Patch published Service API at CCF:
     1. **200 OK**
     2. Store response with updated serviceAPIDescription.
  6. Mock Server received messages must accomplish:
     1. **Two Events have been received**.
     2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter.
        1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription.
        2. The other one must be **SERVICE_API_UPDATE** apiId published API with **eventDetails** containing serviceAPIDescription patched.

Jorge Moratinos's avatar
Jorge Moratinos committed
---
Jorge Moratinos's avatar
Jorge Moratinos committed
## Test Case 18: Patch published (apiStatusMonitoring active) API with apiStatus aef1 and aef2

**Test ID**: ***api_status-18***

**Description**:

  This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider (with apiStatusMonitoring active), containing eventDetails, and SERVICE_API_UPDATE after patch with apfId1 and apfId2 in apiStatus array.

**Pre-Conditions**:

  * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)
  * CAPIF provider is correctly registered with 2 aefs.
  * **Mock Server is up and running to receive requests.**
  * **Mock Server is clean.**

**Execution Steps**:
Jorge Moratinos's avatar
Jorge Moratinos committed
  1. Register Invoker and Onboard Invoker at CCF.
  2. Register Provider at CCF with 2 aefs.
  3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**)
  4. Publish Service API at CCF:
     1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**)
     2. This API includes "API Status" information at **service API Description** with only aefId1.
  5. Discover Service APIs by Invoker
     1. includes filter by query parameter **aef-id**
  6. Patch Published API:
     1. apiStatus present with aefId1 and aefId2 in array.

**Information of Test**:

  1. Perform [Invoker Onboarding]
  2. Perform [Provider Registration] with 2 aefs
  3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:
       1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions**
       2. body [event subscription request body] with:
          1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']**
          2. supportedFeatures: binary 1100 -> string **C**
       3. Use **Invoker Certificate**
  4. Publish Service API at CCF:
     * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **020**
       * 2 profiles, one with each aef.
       * apiStatus with aefId1 inside array
     * Use **APF Certificate**
  5. Request Discover Published APIs:
     * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}**
     * Param api-invoker-id is mandatory
     * Use **Invoker Certificate**
  6. Update published Service API:
     * Send **PATCH** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}**
     * Use **APF Certificate**
     * body [service api description patch] and realted with aefId1 and aefId2.
       * apiStatus present with aefId1 and aefId2.

**Expected Result**:

  1. Response to Onboard request must accomplish:
     1. **201 Created**
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
  3. Response to Publish request must accomplish:
     1. **201 Created**
     2. Response Body must follow **ServiceAPIDescription** data structure with:
        * apiId
        * 2 profiles with:
          * resourceName resource_1 and aefId1
          * resourceName resource_2 and aefId2
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}**
  4. Response to Discover Request By Invoker:
     1. **200 OK** response.
     2. Response body must follow **DiscoveredAPIs** data structure:
        * Check if DiscoveredAPIs contains the API Published previously
          * Check if contains the **apiStatus** with aefId1
  5. Response to Patch published Service API at CCF:
     1. **200 OK**
     2. Store response with updated serviceAPIDescription.
  6. Mock Server received messages must accomplish:
     1. **Two Events have been received**.
     2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter.
        1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription.
        2. The other one must be **SERVICE_API_UPDATE** apiId published API with **eventDetails** containing serviceAPIDescription patched.

Jorge Moratinos's avatar
Jorge Moratinos committed
---
Jorge Moratinos's avatar
Jorge Moratinos committed
## Test Case 19: Patch published (apiStatusMonitoring inactive) API with apiStatus aefId1 and aefId2

**Test ID**: ***api_status-19***

**Description**:

  This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider (with apiStatusMonitoring inactive), containing eventDetails, and **NO SERVICE_API_UPDATE** after patch with apfId1 and apfId2 in apiStatus array, because **apiStatusMonitoring** in publish is inactive.

**Pre-Conditions**:

  * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)
  * CAPIF provider is correctly registered with 2 aefs.
  * **Mock Server is up and running to receive requests.**
  * **Mock Server is clean.**

**Execution Steps**:
Jorge Moratinos's avatar
Jorge Moratinos committed
  1. Register Invoker and Onboard Invoker at CCF.
  2. Register Provider at CCF with 2 aefs.
  3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**)
  4. Publish Service API at CCF:
     1. Supported Features with apiStatusMonitoring flag active (binary 0 0000 0000 -> string **000**)
     2. This API includes "API Status" information at **service API Description** with only aefId1.
  5. Discover Service APIs by Invoker
     1. includes filter by query parameter **aef-id**
  6. Patch Published API:
     1. apiStatus present with aefId1 and aefId2 in array.

**Information of Test**:

  1. Perform [Invoker Onboarding]
  2. Perform [Provider Registration] with 2 aefs
  3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:
       1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions**
       2. body [event subscription request body] with:
          1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']**
          2. supportedFeatures: binary 1100 -> string **C**
       3. Use **Invoker Certificate**
  4. Publish Service API at CCF:
     * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **000**
       * 2 profiles, one with each aef.
       * apiStatus with aefId1 inside array
     * Use **APF Certificate**
Jorge Moratinos's avatar
Jorge Moratinos committed
  5. Request Discover Published APIs:
Jorge Moratinos's avatar
Jorge Moratinos committed
     * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}**
     * Param api-invoker-id is mandatory
Jorge Moratinos's avatar
Jorge Moratinos committed
     * Use **Invoker Certificate**

Jorge Moratinos's avatar
Jorge Moratinos committed

**Expected Result**:

  1. Response to Onboard request must accomplish:
     1. **201 Created**
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
Jorge Moratinos's avatar
Jorge Moratinos committed
  3. Response to Publish request must accomplish:
     1. **400 Bad Request**
     2. Error Response Body must accomplish with **ProblemDetails** data structure with:
        * status 400
        * title with message "Bad Request"
        * detail with message "Set apiStatus with apiStatusMonitoring feature inactive at supportedFeatures if not allowed".
        * cause with message "apiStatus can't be set if apiStatusMonitoring is inactive".

Jorge Moratinos's avatar
Jorge Moratinos committed
  4. Response to Discover Request By Invoker:
     1. **404 Not Found** response.
     2. Error Response Body must accomplish with **ProblemDetails** data structure with:
        * status 404
        * title with message "Not Found"
        * detail with message "API Invoker {api_invoker_id} has no API Published that accomplish filter conditions".
        * cause with message "No API Published accomplish filter conditions".
  5. Mock Server received messages must accomplish:
     1. **No Events have been received**.
Jorge Moratinos's avatar
Jorge Moratinos committed
---
Jorge Moratinos's avatar
Jorge Moratinos committed
## Test Case 20: Patch published without aefs available API with apiStatus only aef2

**Test ID**: ***api_status-20***

**Description**:

  This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_UNAVAILABLE in mockserver when api is published by a provider (with **apiStatusMonitoring** active), containing eventDetails, and SERVICE_API_UPDATE and SERVICE_API_AVAILABLE after patch with apfId1 and apfId2 in apiStatus array, becasue change from unavailable to available and also serviceAPIDescription is updated.

**Pre-Conditions**:

  * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)
  * CAPIF provider is correctly registered with 2 aefs.
  * **Mock Server is up and running to receive requests.**
  * **Mock Server is clean.**

**Execution Steps**:
Jorge Moratinos's avatar
Jorge Moratinos committed
  1. Register Invoker and Onboard Invoker at CCF.
  2. Register Provider at CCF with 2 aefs.
  3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**)
  4. Publish Service API at CCF:
     1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**)
     2. This API includes "API Status" information at **service API Description** with empty array.
  5. Discover Service APIs by Invoker
     1. includes filter by query parameter **aef-id**
  6. Patch Published API:
     1. apiStatus present with aefId1 and aefId2 in array.

**Information of Test**:

  1. Perform [Invoker Onboarding]
  2. Perform [Provider Registration] with 2 aefs
  3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:
       1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions**
       2. body [event subscription request body] with:
          1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']**
          2. supportedFeatures: binary 1100 -> string **C**
       3. Use **Invoker Certificate**
  4. Publish Service API at CCF:
     * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis**
     * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2.
       * supportedFeatures **020**
       * 2 profiles, one with each aef.
       * apiStatus empty array
     * Use **APF Certificate**
  5. Request Discover Published APIs:
     * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}**
     * Param api-invoker-id is mandatory
     * Use **Invoker Certificate**
  6. Update published Service API:
     * Send **PATCH** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}**
     * Use **APF Certificate**
     * body [service api description patch] and realted with aefId1 and aefId2.
       * apiStatus present with aefId1 and aefId2.

**Expected Result**:

  1. Response to Onboard request must accomplish:
     1. **201 Created**
     2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with:
        * apiInvokerId
        * onboardingInformation->apiInvokerCertificate must contain the public key signed.
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}**
  2. Response to Event Subscription must accomplish:
     1. **201 Created**
     2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}**
     3. Response Body must follow **EventSubscription** data structure.
  3. Response to Publish request must accomplish:
     1. **201 Created**
     2. Response Body must follow **ServiceAPIDescription** data structure with:
        * apiId
        * 2 profiles with:
          * resourceName resource_1 and aefId1
          * resourceName resource_2 and aefId2
     3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}**
  4. Response to Discover Request By Invoker:
     1. **200 OK** response.
     2. Response body must follow **DiscoveredAPIs** data structure:
        * Check if DiscoveredAPIs contains the API Published previously
          * Check if contains the **apiStatus** with aefId1
  5. Response to Patch published Service API at CCF:
     1. **200 OK**
     2. Store response with updated serviceAPIDescription.
  6. Mock Server received messages must accomplish:
     1. **Two Events have been received**.
     2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter.
        1. One should be **SERVICE_API_UNAVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription.
        2. The other one must be **SERVICE_API_UPDATE** apiId published API with **eventDetails** containing serviceAPIDescription patched.
        3. Last one should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription.




   [service api description]: ../api_publish_service/service_api_description_post_example.json  "Service API Description Request"
   [service api description patch]: ../api_publish_service/service_api_description_patch_example.json  "Service API Description Patch Request"
   [publisher register body]: ../api_publish_service/publisher_register_body.json  "Publish register Body"
   [invoker onboarding body]: ../api_invoker_management/invoker_details_post_example.json  "API Invoker Request"
   [provider request body]: ../api_provider_management/provider_details_post_example.json  "API Provider Enrolment Request"
   [provider request patch body]: ../api_provider_management/provider_details_enrolment_details_patch_example.json  "API Provider Enrolment Patch Request"

   [invoker onboarding]: ../common_operations/README.md#onboard-an-invoker "Invoker Onboarding"
   [provider registration]: ../common_operations/README.md#register-a-provider "Provider Registration"
   [event subscription request body]: ../api_events_service/event_subscription.json  "Event Subscription Request"