From 8681bb09bd1b5c2e3f2551edfe671e91abeb41cf Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 11:49:25 +0100 Subject: [PATCH 01/21] Refactor MatchRequestBody to enforce property schema checking --- code/API_definitions/device-identifier.yaml | 117 ++++++++++---------- 1 file changed, 58 insertions(+), 59 deletions(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index 6a0b97f..034b983 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -657,6 +657,60 @@ components: message: The provided identifier cannot be matched to a device. schemas: + Imei: + description: Schema for the International Mobile Equipment Identity (IMEI) of a physical mobile device + type: string + maxLength: 16 + pattern: ^[0-9]{16}$ + example: "4901542032375180" + + ImeiSv: + description: Schema for the International Mobile Equipment Identity - Software Version (IMEISV) of a physical mobile device + type: string + maxLength: 16 + pattern: ^[0-9]{16}$ + example: "4901542032375180" + + Tac: + description: Schema for the IMEI Type Allocation Code (TAC) of a physical mobile device + type: string + maxLength: 8 + pattern: ^[0-9]{8}$ + example: "49015420" + + Ppid: + description: Schema for the Pairwise Pseudonymous Identifier (PPID) of a physical mobile device + type: string + minLength: 64 + maxLength: 128 + pattern: ^[a-fA-F0-9]{64,128}$ + example: "b083f65ccdad365d7489fff24b6d5074b30c12b6d81db3404d25964ffd908813" + + RequestBody: + description: Common request body to allow optional Device object to be passed + type: object + properties: + device: + $ref: "../common/CAMARA_common.yaml#/components/schemas/Device" + + MatchRequestBody: + description: Request body for match-identifier operation, containing an optional mobile device subscription identifier, and the physical device identifier to match against + additionalProperties: false + allOf: + - $ref: "#/components/schemas/RequestBody" + - type: object + oneOf: + - required: [ imeisv ] + - required: [ imei ] + - required: [ tac ] + properties: + imeisv: + $ref: "#/components/schemas/ImeiSv" + imei: + $ref: "#/components/schemas/Imei" + tac: + $ref: "#/components/schemas/Tac" + CommonResponseBody: description: | Common parameters to be included in all responses @@ -682,17 +736,9 @@ components: type: object properties: imeisv: - type: string - maxLength: 16 - pattern: ^[0-9]{16}$ - description: IMEISV of the device - example: "4901542032375180" + $ref: "#/components/schemas/ImeiSv" imei: - type: string - maxLength: 15 - pattern: ^[0-9]{15}$ - description: IMEI of the device - example: "490154203237518" + $ref: "#/components/schemas/Imei" DeviceType: description: | @@ -700,11 +746,7 @@ components: type: object properties: tac: - type: string - maxLength: 8 - pattern: ^[0-9]{8}$ - description: IMEI Type Allocation Code of the device - example: "49015420" + $ref: "#/components/schemas/Tac" model: type: string maxLength: 32 @@ -722,50 +764,7 @@ components: type: object properties: ppid: - type: string - minLength: 64 - maxLength: 128 - pattern: ^[a-fA-F0-9]{64,128}$ - description: A PPID for the identified physical device - example: "b083f65ccdad365d7489fff24b6d5074b30c12b6d81db3404d25964ffd908813" - - RequestBody: - description: Common request body to allow optional Device object to be passed - type: object - properties: - device: - $ref: "../common/CAMARA_common.yaml#/components/schemas/Device" - - MatchRequestBody: - description: Request body for match-identifier operation, containing an optional mobile device subscription identifier, and the physical device identifier to match against - allOf: - - $ref: "#/components/schemas/RequestBody" - - type: object - required: - - providedIdentifierType - - providedIdentifier - properties: - providedIdentifierType: - $ref: "#/components/schemas/ProvidedIdentifierType" - providedIdentifier: - type: string - minLength: 8 - maxLength: 16 - pattern: ^[0-9]{8,16}$ - description: The device identifier value to match against. Must match the format constraints for the specified identifier type. - example: "490154203237518" - - ProvidedIdentifierType: - type: string - enum: - - IMEI - - IMEISV - - TAC - description: | - Type of the provided device identifier. Format requirements: - - IMEI: 15 digits (pattern: ^[0-9]{15}$) - - IMEISV: 16 digits (pattern: ^[0-9]{16}$) - - TAC: 8 digits (pattern: ^[0-9]{8}$) + $ref: "#/components/schemas/Ppid" MatchResult: description: | From 16dd23f5feb2a06b1ea15f2feedf5feaacca6586 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 11:55:46 +0100 Subject: [PATCH 02/21] Update Imei schema --- code/API_definitions/device-identifier.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index 034b983..0d9f004 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -660,9 +660,9 @@ components: Imei: description: Schema for the International Mobile Equipment Identity (IMEI) of a physical mobile device type: string - maxLength: 16 - pattern: ^[0-9]{16}$ - example: "4901542032375180" + maxLength: 15 + pattern: ^[0-9]{15}$ + example: "490154203237518" ImeiSv: description: Schema for the International Mobile Equipment Identity - Software Version (IMEISV) of a physical mobile device From 527741a969f22b258c4897459c2f647e5d3bf5a1 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 12:01:22 +0100 Subject: [PATCH 03/21] Update examples for refactored MatchRequestBody schema --- code/API_definitions/device-identifier.yaml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index 0d9f004..ded7b34 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -660,6 +660,7 @@ components: Imei: description: Schema for the International Mobile Equipment Identity (IMEI) of a physical mobile device type: string + minLength: 15 maxLength: 15 pattern: ^[0-9]{15}$ example: "490154203237518" @@ -667,6 +668,7 @@ components: ImeiSv: description: Schema for the International Mobile Equipment Identity - Software Version (IMEISV) of a physical mobile device type: string + minLength: 16 maxLength: 16 pattern: ^[0-9]{16}$ example: "4901542032375180" @@ -674,6 +676,7 @@ components: Tac: description: Schema for the IMEI Type Allocation Code (TAC) of a physical mobile device type: string + minLength: 8 maxLength: 8 pattern: ^[0-9]{8}$ example: "49015420" @@ -689,13 +692,13 @@ components: RequestBody: description: Common request body to allow optional Device object to be passed type: object + additionalProperties: false properties: device: $ref: "../common/CAMARA_common.yaml#/components/schemas/Device" MatchRequestBody: description: Request body for match-identifier operation, containing an optional mobile device subscription identifier, and the physical device identifier to match against - additionalProperties: false allOf: - $ref: "#/components/schemas/RequestBody" - type: object @@ -809,16 +812,14 @@ components: MatchDeviceBy3LeggedToken: description: Match identifier when device is identified by access token value: - providedIdentifierType: "IMEISV" - providedIdentifier: "4901542032375181" + imeisv: "4901542032375181" MatchDeviceByPhoneNumber: description: Matching device identifier by phone number and provided IMEI using a 2-legged access token value: device: phoneNumber: "+123456789" - providedIdentifierType: "IMEI" - providedIdentifier: "490154203237518" + imei: "490154203237518" MatchDeviceByIPAddress: description: Matching device identifier by IP address and provided TAC @@ -827,8 +828,7 @@ components: ipv4Address: publicAddress: "84.125.93.10" publicPort: 59765 - providedIdentifierType: "TAC" - providedIdentifier: "49015420" + tac: "49015420" MatchDeviceByMultipleIdentifiers: description: Matching device identifier by multiple subscription identifiers and provided IMEISV @@ -838,5 +838,4 @@ components: ipv4Address: publicAddress: "84.125.93.10" publicPort: 59765 - providedIdentifierType: "IMEISV" - providedIdentifier: "4901542032375180" + imeisv: "4901542032375180" From 235af21cfc561e5a28c474fbce05aaf7266bbd61 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 12:19:29 +0100 Subject: [PATCH 04/21] Update example descriptions --- code/API_definitions/device-identifier.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index ded7b34..5c05a76 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -354,13 +354,13 @@ paths: schema: $ref: "#/components/schemas/MatchRequestBody" examples: - Match Device By 3-Legged Access Token: + Match Device IMEISV By 3-Legged Access Token: $ref: '#/components/examples/MatchDeviceBy3LeggedToken' - Match Device By Phone Number: + Match Device IMEI By Phone Number: $ref: '#/components/examples/MatchDeviceByPhoneNumber' - Match Device By IP Address: + Match Device TAC By IP Address: $ref: '#/components/examples/MatchDeviceByIPAddress' - Match Device By Multiple Identifiers: + Match Device IMEISV By Multiple Identifiers: $ref: '#/components/examples/MatchDeviceByMultipleIdentifiers' responses: @@ -810,19 +810,19 @@ components: networkAccessIdentifier: "123456789@example.com" MatchDeviceBy3LeggedToken: - description: Match identifier when device is identified by access token + description: Match IMEISV when device is identified using a 3-legged access token value: imeisv: "4901542032375181" MatchDeviceByPhoneNumber: - description: Matching device identifier by phone number and provided IMEI using a 2-legged access token + description: Matching IMEI when identifying device by phone number and using a 2-legged access token value: device: phoneNumber: "+123456789" imei: "490154203237518" MatchDeviceByIPAddress: - description: Matching device identifier by IP address and provided TAC + description: Matching TAC when identifying device by IP address and using a 2-legged access token value: device: ipv4Address: @@ -831,7 +831,7 @@ components: tac: "49015420" MatchDeviceByMultipleIdentifiers: - description: Matching device identifier by multiple subscription identifiers and provided IMEISV + description: Matching IMEISV when identifying device by multiple identifiers and using a 2-legged access token value: device: phoneNumber: "+123456789" From d1d2b323bb9a09f16f0ecf6340cdee7cb4a6dc66 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 12:47:26 +0100 Subject: [PATCH 05/21] Update device identifier matching scenarios Refactor device identifier matching scenarios to use specific properties instead of providedIdentifierType and providedIdentifier. --- .../device-identifier-matchIdentifier.feature | 176 ++++++++---------- 1 file changed, 75 insertions(+), 101 deletions(-) diff --git a/code/Test_definitions/device-identifier-matchIdentifier.feature b/code/Test_definitions/device-identifier-matchIdentifier.feature index 90776b6..561ae01 100644 --- a/code/Test_definitions/device-identifier-matchIdentifier.feature +++ b/code/Test_definitions/device-identifier-matchIdentifier.feature @@ -44,8 +44,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Given SIMCARD1 is installed within DEVICE1, which is connected to the network And the header "Authorization" is set to a valid access token that identifies DEVICE1 containing SIMCARD1 And request property "$.device" does not exist - And request property "$.providedIdentifierType" is set to "" - And request property "$.providedIdentifier" is set to + And request property "$." is set to "" + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -53,16 +53,13 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is true And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And no other response properties are present Examples: - | providedIdentifierType | providedIdentifier | - | IMEI | IMEI1 | - | IMEISV | IMEISV1 | - | TAC | TAC1 | + | propertyName | providedIdentifier | + | imei | IMEI1 | + | imeisv | IMEISV1 | + | tac | TAC1 | # This scenario is only valid for 2-legged access tokens @DeviceIdentifier_matchIdentifier_200.02_success_scenario_2-legged_token_identifying_device_by_phone_number @@ -70,8 +67,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Given SIMCARD1 is installed within DEVICE1, which is connected to the network And the header "Authorization" is set to a valid access token that does not identify a device And request property "$.device.phoneNumber" is set to PHONENUMBER1 - And request property "$.providedIdentifierType" is set to "IMEI" - And request property "$.providedIdentifier" is set to IMEI1 + And request property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -79,10 +76,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is true And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And no other response properties are present # This scenario is only valid for 2-legged access tokens @DeviceIdentifier_matchIdentifier_200.02b_success_scenario_2-legged_token_identifying_device_by_phone_number_non_match @@ -90,8 +84,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Given SIMCARD1 is installed within DEVICE1, which is connected to the network And the header "Authorization" is set to a valid access token that does not identify a device And request property "$.device.phoneNumber" is set to PHONENUMBER1 - And request property "$.providedIdentifierType" is set to "IMEI" - And request property "$.providedIdentifier" is set to IMEI2 + And request property "$.imei" is set to IMEI2 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -99,10 +93,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is false And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And no other response properties are present # This scenario is only valid for 2-legged access tokens @DeviceIdentifier_matchIdentifier_200.03_success_scenario_2-legged_token_identifying_device_by_IPv4_address @@ -111,8 +102,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the header "Authorization" is set to a valid access token that does not identify a device And request property "$.device.ipv4Address.publicAddress" is set to PUBLICIPV4ADDRESS1 And request property "$.device.ipv4Address.publicPort" is set to PUBLICPORT1 - And request property "$.providedIdentifierType" is set to "TAC" - And request property "$.providedIdentifier" is set to TAC1 + And request property "$.tac" is set to TAC1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -120,10 +111,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is true And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And no other response properties are present # This scenario is only valid for 2-legged access tokens @DeviceIdentifier_matchIdentifier_200.03b_success_scenario_2-legged_token_identifying_device_by_IPv4_address_non_match @@ -132,8 +120,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the header "Authorization" is set to a valid access token that does not identify a device And request property "$.device.ipv4Address.publicAddress" is set to PUBLICIPV4ADDRESS1 And request property "$.device.ipv4Address.publicPort" is set to PUBLICPORT1 - And request property "$.providedIdentifierType" is set to "TAC" - And request property "$.providedIdentifier" is set to TAC2 + And request property "$.tac" is set to TAC2 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -141,10 +129,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is false And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And no other response properties are present # This scenario is only valid for 2-legged access tokens @DeviceIdentifier_matchIdentifier_200.04_success_scenario_2-legged_token_identifying_device_by_multiple_identifiers @@ -154,8 +139,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And request property "$.device.phoneNumber" is set to PHONENUMBER1 And request property "$.device.ipv4Address.publicAddress" is set to PUBLICIPV4ADDRESS1 And request property "$.device.ipv4Address.publicPort" is set to PUBLICPORT1 - And request property "$.providedIdentifierType" is set to "IMEISV" - And request property "$.providedIdentifier" is set to IMEISV1 + And request property "$.imeisv" is set to IMEISV1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -163,10 +148,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is true And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And the response property "$.device" exists and complies with the DeviceResponse schema at "#/components/schemas/DeviceResponse" + And no other response properties are present # This scenario is only valid for 2-legged access tokens @DeviceIdentifier_matchIdentifier_200.04b_success_scenario_2-legged_token_identifying_device_by_multiple_identifiers_non_match @@ -176,8 +159,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And request property "$.device.phoneNumber" is set to PHONENUMBER1 And request property "$.device.ipv4Address.publicAddress" is set to PUBLICIPV4ADDRESS1 And request property "$.device.ipv4Address.publicPort" is set to PUBLICPORT1 - And request property "$.providedIdentifierType" is set to "IMEISV" - And request property "$.providedIdentifier" is set to IMEISV2 + And request property "$.imeisv" is set to IMEISV2 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -185,10 +168,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is false And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And the response property "$.device" exists and complies with the DeviceResponse schema at "#/components/schemas/DeviceResponse" + And no other response properties are present # This scenario is only valid for 3-legged access tokens @DeviceIdentifier_matchIdentifier_200.05_success_scenario_3-legged_token_after_device_swap_mismatch @@ -196,8 +177,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Given SIMCARD1 is installed within DEVICE2, which is connected to the network And the header "Authorization" is set to a valid access token that identifies DEVICE2 containing SIMCARD1 And request property "$.device" does not exist - And request property "$.providedIdentifierType" is set to "" - And request property "$.providedIdentifier" is set to + And request property "$." is set to + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -205,16 +186,13 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is false And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And no other response properties are present Examples: - | providedIdentifierType | providedIdentifier | - | IMEI | IMEI1 | - | IMEISV | IMEISV1 | - | TAC | TAC1 | + | propertyName | providedIdentifier | + | imei | IMEI1 | + | imeisv | IMEISV1 | + | tac | TAC1 | # This scenario is only valid for 3-legged access tokens @DeviceIdentifier_matchIdentifier_200.05b_success_scenario_3-legged_token_after_device_swap_match @@ -222,8 +200,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Given SIMCARD1 is installed within DEVICE2, which is connected to the network And the header "Authorization" is set to a valid access token that identifies DEVICE2 containing SIMCARD1 And request property "$.device" does not exist - And request property "$.providedIdentifierType" is set to "" - And request property "$.providedIdentifier" is set to + And request property "$." is set to + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -231,16 +209,13 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is true And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And no other response properties are present Examples: - | providedIdentifierType | providedIdentifier | - | IMEI | IMEI2 | - | IMEISV | IMEISV2 | - | TAC | TAC2 | + | propertyName | providedIdentifier | + | imei | IMEI1 | + | imeisv | IMEISV1 | + | tac | TAC1 | # This scenario is only valid for 2-legged access tokens @DeviceIdentifier_matchIdentifier_200.06_success_scenario_2-legged_token_after_SIM_card_swap @@ -248,8 +223,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Given SIMCARD2 is installed within DEVICE1, which is connected to the network And the header "Authorization" is set to a valid access token that does not identify a device And request property "$.device.phoneNumber" is set to PHONENUMBER2 - And request property "$.providedIdentifierType" is set to "IMEI" - And request property "$.providedIdentifier" is set to IMEI1 + And request property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 200 And the response body complies with the 200MatchIdentifier schema at "#/components/responses/200MatchIdentifier" @@ -257,10 +232,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is true And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.imei" does not exist - And the response property "$.imeisv" does not exist - And the response property "$.tac" does not exist - And the response property "$.ppid" does not exist + And no other response properties are present # Generic 400 errors @@ -292,8 +264,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier @DeviceIdentifier_matchIdentifier_400.2b_device_empty Scenario: The device value is an empty object Given the request body property "$.device" exists and is set to: {} - And the request body property "$.providedIdentifierType" is set to "IMEI" - And the request body property "$.providedIdentifier" is set to IMEI1 + And the request body property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 400 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -307,9 +279,9 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier # Note that device schema validation errors (if any) should be thrown even if a 3-legged access token is being used Scenario Outline: Some device identifier value does not comply with the schema Given a valid 2-legged or 3-legged access token is being used - And the request body property "$.providedIdentifierType" is set to "IMEI" - And the request body property "$.providedIdentifier" is set to IMEI1 - And the request body property "" does not comply with the OAS schema at "" + And the request body property "$.imei" is set to IMEI1 + And the request body property "" exits but does not comply with the OAS schema at "" + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 400 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -327,10 +299,11 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier # This scenario is valid for both 2-legged and 3-legged access tokens @DeviceIdentifier_matchIdentifier_400.4_invalid_identifier_type - Scenario: Unsupported providedIdentifierType enum value + Scenario: Unsupported identifier type Given a valid 2-legged or 3-legged access token is being used - And the request body property "$.providedIdentifierType" is set to "INVALID_TYPE" - And the request body property "$.providedIdentifier" is set to IMEI1 + And the request body property "$.device" exists if a 2-legged access token is being used + And the request body property "$.model" is set to "model" + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 400 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -343,8 +316,9 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier @DeviceIdentifier_matchIdentifier_400.5_invalid_identifier_format Scenario Outline: Provided identifier does not comply with the format required by the identifier type Given a valid 2-legged or 3-legged access token is being used - And the request body property "$.providedIdentifierType" is set to "" - And the request body property "$.providedIdentifier" is set to "" + And the request body property "$.device" exists if a 2-legged access token is being used + And the request body property "$." is set to "" + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 400 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -354,13 +328,13 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response property "$.message" contains a user friendly text Examples: - | providedIdentifierType | providedIdentifier | - | IMEI | 12345678901234 | - | IMEISV | 123456789012345 | - | TAC | 1234567 | - | IMEI | 1234567890ABCDE | - | IMEISV | 1234567890ABCDEF | - | TAC | 12!45678 | + | propertyName | providedIdentifier | + | imei | 12345678901234 | + | imeisv | 123456789012345 | + | tac | 1234567 | + | imei | 1234567890ABCDE | + | imeisv | 1234567890ABCDEF | + | tac | 12!45678 | # Generic 401 errors @@ -418,8 +392,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Scenario: An identifier cannot be matched to a valid device Given the header "Authorization" is set to a valid access token that does not identify a device And the request body property "$.device" is compliant with the request body schema but does not identify a valid device - And the request body property "$.providedIdentifierType" is set to "IMEI" - And the request body property "$.providedIdentifier" is set to IMEI1 + And the request body property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 404 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -436,8 +410,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Given that some types of device identifiers are not supported by the implementation And the header "Authorization" is set to a valid access token that does not identify a device And the request body property "$.device" only includes device identifiers not supported by the implementation - And the request body property "$.providedIdentifierType" is set to "IMEI" - And the request body property "$.providedIdentifier" is set to IMEI1 + And the request body property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 422 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -453,8 +427,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Given that the matchIdentifier service is not applicable for the identified mobile device subscription And a valid 2-legged or 3-legged access token is being used And a valid device is identified by the access token or the request body property "$.device" - And the request body property "$.providedIdentifierType" is set to "IMEI" - And the request body property "$.providedIdentifier" is set to IMEI1 + And the request body property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 422 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -468,8 +442,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Scenario: Device not included and cannot be deduced from the access token Given the header "Authorization" is set to a valid access token which does not identify a device And the request body property "$.device" is not included - And the request body property "$.providedIdentifierType" is set to "IMEI" - And the request body property "$.providedIdentifier" is set to IMEI1 + And the request body property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 422 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -483,8 +457,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Scenario: Explicit device identifier provided when a 3-legged access token identifies a different device Given the header "Authorization" is set to a valid access token that identifies DEVICE1 containing SIMCARD1 And the request body property "$.device" exists and identifies DEVICE2 containing SIMCARD2 - And the request body property "$.providedIdentifierType" is set to "IMEI" - And the request body property "$.providedIdentifier" is set to IMEI1 + And the request body property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 422 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -498,8 +472,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier Scenario: Explicit device identifier provided when a 3-legged access token identifies the same device Given the header "Authorization" is set to a valid access token that identifies DEVICE1 containing SIMCARD1 And the request body property "$.device" exists and also identifies DEVICE1 containing SIMCARD1 - And the request body property "$.providedIdentifierType" is set to "IMEI" - And the request body property "$.providedIdentifier" is set to IMEI1 + And the request body property "$.imei" is set to IMEI1 + And no other request properties are present When the request "matchIdentifier" is sent Then the response status code is 422 And the response header "x-correlator" has same value as the request header "x-correlator" From a3f38106ae9c80e231fb83bb4e22a63b78abd3bc Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 13:09:16 +0100 Subject: [PATCH 06/21] Fix indentation and remove excess spaces --- code/API_definitions/device-identifier.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index 5c05a76..0f2b111 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -703,9 +703,9 @@ components: - $ref: "#/components/schemas/RequestBody" - type: object oneOf: - - required: [ imeisv ] - - required: [ imei ] - - required: [ tac ] + - required: [imeisv] + - required: [imei] + - required: [tac] properties: imeisv: $ref: "#/components/schemas/ImeiSv" From b82b6a261ffced3de4c85e14f1e9ced5c1b54b50 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 13:12:51 +0100 Subject: [PATCH 07/21] Remove additionalProperties: false from RequestBody schema --- code/API_definitions/device-identifier.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index 0f2b111..d033617 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -692,7 +692,6 @@ components: RequestBody: description: Common request body to allow optional Device object to be passed type: object - additionalProperties: false properties: device: $ref: "../common/CAMARA_common.yaml#/components/schemas/Device" From 2081269c99e3ecbfb113e4215764b8d928b97598 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 13:15:22 +0100 Subject: [PATCH 08/21] Add additionalProperties: false to MatchRequestBody schema --- code/API_definitions/device-identifier.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index d033617..669851a 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -712,6 +712,7 @@ components: $ref: "#/components/schemas/Imei" tac: $ref: "#/components/schemas/Tac" + additionalProperties: false CommonResponseBody: description: | From 3b4d8f9a108070926936b9fa1859afbf07a1637f Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 13:18:38 +0100 Subject: [PATCH 09/21] Refactor MatchRequestBody schema --- code/API_definitions/device-identifier.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index 669851a..bc052d5 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -712,7 +712,7 @@ components: $ref: "#/components/schemas/Imei" tac: $ref: "#/components/schemas/Tac" - additionalProperties: false + - additionalProperties: false CommonResponseBody: description: | From 4c8470961a959776fe172999177ef5af66755b5a Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 13:24:37 +0100 Subject: [PATCH 10/21] Move additionalProperties: false to requestBody definition --- code/API_definitions/device-identifier.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index bc052d5..7268b3e 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -352,7 +352,9 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/MatchRequestBody" + allOf: + - $ref: "#/components/schemas/MatchRequestBody" + - additionalProperties: false examples: Match Device IMEISV By 3-Legged Access Token: $ref: '#/components/examples/MatchDeviceBy3LeggedToken' @@ -712,7 +714,6 @@ components: $ref: "#/components/schemas/Imei" tac: $ref: "#/components/schemas/Tac" - - additionalProperties: false CommonResponseBody: description: | From 65f9811c86255a4c0b8b5eaf8c133eb7d33652fe Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 13:26:41 +0100 Subject: [PATCH 11/21] Remove additionalProperties: false completely --- code/API_definitions/device-identifier.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/API_definitions/device-identifier.yaml b/code/API_definitions/device-identifier.yaml index 7268b3e..d033617 100644 --- a/code/API_definitions/device-identifier.yaml +++ b/code/API_definitions/device-identifier.yaml @@ -352,9 +352,7 @@ paths: content: application/json: schema: - allOf: - - $ref: "#/components/schemas/MatchRequestBody" - - additionalProperties: false + $ref: "#/components/schemas/MatchRequestBody" examples: Match Device IMEISV By 3-Legged Access Token: $ref: '#/components/examples/MatchDeviceBy3LeggedToken' From 8ce64c6a3051694368608c2b3355e42bd45c053f Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 14:49:45 +0100 Subject: [PATCH 12/21] Update schema compliance references to OAS --- .../device-identifier-matchIdentifier.feature | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/Test_definitions/device-identifier-matchIdentifier.feature b/code/Test_definitions/device-identifier-matchIdentifier.feature index 6556b40..cc71cb9 100644 --- a/code/Test_definitions/device-identifier-matchIdentifier.feature +++ b/code/Test_definitions/device-identifier-matchIdentifier.feature @@ -33,7 +33,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the header "Content-Type" is set to "application/json" And the header "Authorization" is set to a valid access token And the header "x-correlator" complies with the schema at "#/components/schemas/XCorrelator" - And the request body is compliant with the MatchRequestBody schema defined by "#/components/schemas/MatchRequestBody" + And the request body complies with the OAS schema at "#/components/schemas/MatchRequestBody" And one of the scopes associated with the access token is device-identifier:match-identifier # Success scenarios @@ -148,7 +148,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is true And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.device" exists and complies with the DeviceResponse schema at "#/components/schemas/DeviceResponse" + And the response property "$.device" exists and complies with the OAS schema at "#/components/schemas/DeviceResponse" And no other response properties are present # This scenario is only valid for 2-legged access tokens @@ -168,7 +168,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the response header "Content-Type" is "application/json" And the response property "$.match" exists and is false And the response property "$.lastChecked" exists and is either a valid date-time in the past, or is null - And the response property "$.device" exists and complies with the DeviceResponse schema at "#/components/schemas/DeviceResponse" + And the response property "$.device" exists and complies with the OAS schema at "#/components/schemas/DeviceResponse" And no other response properties are present # This scenario is only valid for 3-legged access tokens From 52d761e1b5ada1537f1b52e5da24b29c3aaefe79 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 14:51:02 +0100 Subject: [PATCH 13/21] Update compliance references to OAS schema --- .../device-identifier-retrieveIdentifier.feature | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/Test_definitions/device-identifier-retrieveIdentifier.feature b/code/Test_definitions/device-identifier-retrieveIdentifier.feature index db64b48..e770ef8 100644 --- a/code/Test_definitions/device-identifier-retrieveIdentifier.feature +++ b/code/Test_definitions/device-identifier-retrieveIdentifier.feature @@ -34,7 +34,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrieveIdentifi And the header "Content-Type" is set to "application/json" And the header "Authorization" is set to a valid access token And the header "x-correlator" complies with the schema at "#/components/schemas/XCorrelator" - And the request body is compliant with the RequestBody schema defined by "#/components/schemas/RequestBody" + And the request body complies with the OAS schema at "#/components/schemas/RequestBody" And one of the scopes associated with the access token is device-identifier:retrieve-identifier # Success scenarios @@ -171,7 +171,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrieveIdentifi # This scenario is valid for both 2-legged and 3-legged access tokens @DeviceIdentifier_retrieveIdentifier_400.1_schema_not_compliant Scenario: Invalid Argument. Generic Syntax Exception - Given the request body is set to any value which is not compliant with the schema at "#/components/schemas/RequestBody" + Given the request body is set to any value which is not compliant with the OAS schema at "#/components/schemas/RequestBody" When the request "retrieveIdentifier" is sent Then the response status code is 400 And the response header "x-correlator" has same value as the request header "x-correlator" From 5d7bb067a30cdb9ed372a53cd069608eda4ffc26 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 14:52:51 +0100 Subject: [PATCH 14/21] Update compliance references to OAS schemas --- code/Test_definitions/device-identifier-retrievePpid.feature | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/Test_definitions/device-identifier-retrievePpid.feature b/code/Test_definitions/device-identifier-retrievePpid.feature index d2b7dd4..fcb2880 100644 --- a/code/Test_definitions/device-identifier-retrievePpid.feature +++ b/code/Test_definitions/device-identifier-retrievePpid.feature @@ -35,8 +35,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrievePpid And the resource "/device-identifier/vwip/retrieve-ppid" And the header "Content-Type" is set to "application/json" And the header "Authorization" is set to a valid access token - And the header "x-correlator" complies with the schema at "#/components/schemas/XCorrelator" - And the request body is compliant with the RequestBody schema defined by "#/components/schemas/RequestBody" + And the header "x-correlator" complies with the OAS schema at "#/components/schemas/XCorrelator" + And the request body complies with the OAS schema at "#/components/schemas/RequestBody" And one of the scopes associated with the access token is device-identifier:retrieve-ppid # Success scenarios From 44aa45ab5e41243b64727ed1e9e1925685c12aca Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 14:54:57 +0100 Subject: [PATCH 15/21] Update compliance references to OAS schema --- .../Test_definitions/device-identifier-retrieveType.feature | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/Test_definitions/device-identifier-retrieveType.feature b/code/Test_definitions/device-identifier-retrieveType.feature index 99584d0..cdebd1e 100644 --- a/code/Test_definitions/device-identifier-retrieveType.feature +++ b/code/Test_definitions/device-identifier-retrieveType.feature @@ -33,8 +33,8 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrieveType And the resource "/device-identifier/vwip/retrieve-type" And the header "Content-Type" is set to "application/json" And the header "Authorization" is set to a valid access token - And the header "x-correlator" complies with the schema at "#/components/schemas/XCorrelator" - And the request body is compliant with the RequestBody schema defined by "#/components/schemas/RequestBody" + And the header "x-correlator" complies with the OAS schema at "#/components/schemas/XCorrelator" + And the request body complies with the OAS schema at "#/components/schemas/RequestBody" And one of the scopes associated with the access token is device-identifier:retrieve-type # Success scenarios @@ -157,7 +157,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrieveType # This scenario is valid for both 2-legged and 3-legged access tokens @DeviceIdentifier_retrieveType_400.1_schema_not_compliant Scenario: Invalid Argument. Generic Syntax Exception - Given the request body is set to any value which is not compliant with the schema at "#/components/schemas/RequestBody" + Given the request body is set to any value which is not compliant with the OAS schema at "#/components/schemas/RequestBody" When the request "retrieveType" is sent Then the response status code is 400 And the response header "x-correlator" has same value as the request header "x-correlator" From 2a42fcb63f6ac4f9774cf123b041ae7054155768 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 14:55:12 +0100 Subject: [PATCH 16/21] Update schema reference for x-correlator header --- code/Test_definitions/device-identifier-matchIdentifier.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Test_definitions/device-identifier-matchIdentifier.feature b/code/Test_definitions/device-identifier-matchIdentifier.feature index cc71cb9..f5a25d3 100644 --- a/code/Test_definitions/device-identifier-matchIdentifier.feature +++ b/code/Test_definitions/device-identifier-matchIdentifier.feature @@ -32,7 +32,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier And the resource "/device-identifier/vwip/match-identifier" And the header "Content-Type" is set to "application/json" And the header "Authorization" is set to a valid access token - And the header "x-correlator" complies with the schema at "#/components/schemas/XCorrelator" + And the header "x-correlator" complies with the OAS schema at "#/components/schemas/XCorrelator" And the request body complies with the OAS schema at "#/components/schemas/MatchRequestBody" And one of the scopes associated with the access token is device-identifier:match-identifier From eb016cb1d56b6565937f6c02ee788714b6cd4b55 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 14:55:31 +0100 Subject: [PATCH 17/21] Update schema reference for x-correlator header --- .../device-identifier-retrieveIdentifier.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Test_definitions/device-identifier-retrieveIdentifier.feature b/code/Test_definitions/device-identifier-retrieveIdentifier.feature index e770ef8..2c3758d 100644 --- a/code/Test_definitions/device-identifier-retrieveIdentifier.feature +++ b/code/Test_definitions/device-identifier-retrieveIdentifier.feature @@ -33,7 +33,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrieveIdentifi And the resource "/device-identifier/vwip/retrieve-identifier" And the header "Content-Type" is set to "application/json" And the header "Authorization" is set to a valid access token - And the header "x-correlator" complies with the schema at "#/components/schemas/XCorrelator" + And the header "x-correlator" complies with the OAS schema at "#/components/schemas/XCorrelator" And the request body complies with the OAS schema at "#/components/schemas/RequestBody" And one of the scopes associated with the access token is device-identifier:retrieve-identifier From 4613ef4002ea8497be7de08bf4729f83710a9a5a Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 14:59:15 +0100 Subject: [PATCH 18/21] Update schema references in device identifier tests --- .../device-identifier-matchIdentifier.feature | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/Test_definitions/device-identifier-matchIdentifier.feature b/code/Test_definitions/device-identifier-matchIdentifier.feature index f5a25d3..1019ce5 100644 --- a/code/Test_definitions/device-identifier-matchIdentifier.feature +++ b/code/Test_definitions/device-identifier-matchIdentifier.feature @@ -239,7 +239,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier # This scenario is valid for both 2-legged and 3-legged access tokens @DeviceIdentifier_matchIdentifier_400.1_schema_not_compliant Scenario: Invalid Argument. Generic Syntax Exception - Given the request body is set to any value which is not compliant with the schema at "#/components/schemas/MatchRequestBody" + Given the request body is set to any value which is not compliant with the OAS schema at "#/components/schemas/MatchRequestBody" When the request "matchIdentifier" is sent Then the response status code is 400 And the response header "x-correlator" has same value as the request header "x-correlator" @@ -391,7 +391,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: matchIdentifier @DeviceIdentifier_matchIdentifier_404.1_device_not_found Scenario: An identifier cannot be matched to a valid device Given the header "Authorization" is set to a valid access token that does not identify a device - And the request body property "$.device" is compliant with the request body schema but does not identify a valid device + And the request body property "$.device" is compliant with the OAS schema at "#/components/schemas/Device" but does not identify a valid device And the request body property "$.imei" is set to IMEI1 And no other request properties are present When the request "matchIdentifier" is sent From f3f483b7c8de83cfbb2c4dab1e4b0cf0a05b0bea Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 15:00:06 +0100 Subject: [PATCH 19/21] Update request body schema reference in feature file --- .../device-identifier-retrieveIdentifier.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Test_definitions/device-identifier-retrieveIdentifier.feature b/code/Test_definitions/device-identifier-retrieveIdentifier.feature index 2c3758d..f4c0316 100644 --- a/code/Test_definitions/device-identifier-retrieveIdentifier.feature +++ b/code/Test_definitions/device-identifier-retrieveIdentifier.feature @@ -296,7 +296,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrieveIdentifi @DeviceIdentifier_retrieveIdentifier_404.1_device_not_found Scenario: An identifier cannot be matched to a valid device Given the header "Authorization" is set to a valid access token that does not identify a device - And the request body property "$.device" is compliant with the request body schema but does not identify a valid device + And the request body property "$.device" is compliant with the OAS schema at "#/components/schemas/Device" but does not identify a valid device When the request "retrieveIdentifier" is sent Then the response status code is 404 And the response header "x-correlator" has same value as the request header "x-correlator" From 3ff11fc0c259681daa244d0929974e4412b2e814 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 15:00:44 +0100 Subject: [PATCH 20/21] Update request body property compliance description --- code/Test_definitions/device-identifier-retrievePpid.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Test_definitions/device-identifier-retrievePpid.feature b/code/Test_definitions/device-identifier-retrievePpid.feature index fcb2880..49de079 100644 --- a/code/Test_definitions/device-identifier-retrievePpid.feature +++ b/code/Test_definitions/device-identifier-retrievePpid.feature @@ -270,7 +270,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrievePpid @DeviceIdentifier_retrievePpid_404.1_device_not_found Scenario: An identifier cannot be matched to a valid device Given the header "Authorization" is set to a valid access token that does not identify a device - And the request body property "$.device" is compliant with the request body schema but does not identify a valid device + And the request body property "$.device" is compliant with the OAS schema at "#/components/schemas/Device" but does not identify a valid device When the request "retrievePpid" is sent Then the response status code is 404 And the response header "x-correlator" has same value as the request header "x-correlator" From 637080b00a21ead6d00b6f920b72c992381433a3 Mon Sep 17 00:00:00 2001 From: Eric Murray Date: Thu, 27 Aug 2026 15:01:19 +0100 Subject: [PATCH 21/21] Clarify request body property in device identifier scenario Updated the request body property description to reference the OAS schema for clarity. --- code/Test_definitions/device-identifier-retrieveType.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Test_definitions/device-identifier-retrieveType.feature b/code/Test_definitions/device-identifier-retrieveType.feature index cdebd1e..e8f990c 100644 --- a/code/Test_definitions/device-identifier-retrieveType.feature +++ b/code/Test_definitions/device-identifier-retrieveType.feature @@ -282,7 +282,7 @@ Feature: Camara Mobile Device Identifier API, vwip - Operation: retrieveType @DeviceIdentifier_retrieveType_404.1_device_not_found Scenario: An identifier cannot be matched to a valid device Given the header "Authorization" is set to a valid access token that does not identify a device - And the request body property "$.device" is compliant with the request body schema but does not identify a valid device + And the request body property "$.device" is compliant with the OAS schema at "#/components/schemas/Device" but does not identify a valid device When the request "retrieveType" is sent Then the response status code is 404 And the response header "x-correlator" has same value as the request header "x-correlator"