Skip to main content

Go-live checklist

To ensure you have a smooth onboarding with face-to-face payments on your EPOS, Dojo has prepared a comprehensive testing checklist that you can follow before going live with your integration.

Please note that we mandate that at least one method of refunding is achievable through your integration to our API. This can be achieved directly through the Payment Intent to refund to the original card used for payment, or by creating a terminal session either matched to a Payment Intent, or unmatched.

Configuration

These tests relate to how your EPOS is setup to interact with the Dojo API, taking into account authorization flow, user experience, and versioning.

ScenarioSteps to ReproduceExpected Outcome
AuthorizationSee where these details are configured. This might not need to be in the UI of the EPOS software itself, but it could be in a configuration file, a database elsewhere, or even in a back-office system that end-users log in to. Also, record who is expected to enter the Cloud credentials: yourself, an installer, or the merchant.POS allows configuring different API Keys. The API Key should never be hard-coded.
Incorrect authorization credentialsInput an invalid API Key.The EPOS should display an error prompting the user to check authentication credentials.
Retrieve terminal(s)EPOS must be able to check for available terminals, preferably using the GET /terminals endpoint, or at a bare minimum offer the ability to manually enter the required TID.POS should be able to check for available terminals or enable you to configure preferred TID. This should never be hard-coded.
API versionNote which version of the API you are testingThis data is to be provided during QA.
POS versionFor our records, we prefer to keep a note of the minimum version of your POS which is compatible with this API - this allows us to track historic versions which may be incompatible. If this isn't providable (such as in the instance where only one version of the POS exists) then this step can be omitted.Data to be provided during QA completion.
Payment intents

These tests concern the creation of and management of payment intents, as well as additional features like itemLines and Webhooks.

ScenarioSteps to ReproduceExpected Outcome
[Create] Payment intent (Auto)Initiate a sale using capture mode AUTOPayment intent created successfully with the capture mode set to AUTO
[Create] Payment intent (Manual) [Optional]Initiate a sale using captureMode: ManualPayment intent created successfully with the capture mode set to Manual (Optional)
[Retrieve] Payment intentGET /terminals the final result/transaction details from the Payment IntentsAPI after the terminal session has concluded.The POS recognizes the status of the intent and records the sale on the POS
[Change] Payment intent amount [Optional]Using the payment intent from a successful pre-authorization, use the POST /payment-intents/{paymentIntentId}/amount endpoint - This is before any pre-authorization or terminal session has taken placePayment intent amount successfully updated
[Cancel] Payment intent [Optional]Cancel a payment that has not yet been authorized by using DELETE /payment-intents/{paymentIntentId}Payment intent is successfully cancelled
[List] All Payment intents [Optional]List all payment intents by posting to POST /payment-intents/search.Retrieves a list of payment intents. Results are paginated. By default, the method returns up to 50 payment intents.
Create Payment intent - MOTO (CNP)Initiate a transaction with cardHolderNotPresent set to true.The card machine should skip the Present Card screen and go directly into Key Card Number
itemLinesUse item lines to define checkout/bill items, and modifiers where applicableItem lines should be correctly displayed and if discounts are present, these discounts should correctly display as modifiers.
WebhooksSubscribe to Webhook events to be notified of specific events.List of all events subscribed to by sending a GET request to Dojo's webhooks endpoints.
Refunds

These tests concern the refunding of payments by directly invoking the Payment Intent, avoiding the need for a card to be re-presented.

ScenarioSteps to ReproduceExpected Outcome
Create a full refundInitiate a refund of a previously completed Payment Intent by POSTing to the refunds endpoint.A 200 response is returned containing a refundId. The POS should then call GET on the Payment Intent ID, parse the final result of the intent (Refunded), and display that the payment was refunded.
Create a partial refundInitiate a refund of a previously completed Payment Intent by POSTing to the refunds endpoint. Select an amount lower than the original Payment Intent value.A 200 response is returned containing a refundId. The POS should then call GET on the Payment Intent ID, parse the final result of the intent (Captured), and display that the payment was partially refunded.
[Auto] Create Terminal Session - Sale

These tests cover the sales flow of terminal sessions created using CaptureMode: Auto, meaning that the transaction will be completed immediately. We look to cover as many possible transaction outcomes, including less common but still crucial flows such as Expired and Signature Verification.

ScenarioSteps to reproduceExpected outcome
Create terminal session - Successful while inserting cardComplete a transaction by inserting a card and using PIN entry or by using a Virtual Machine with TID ending in SIP0.Must display transaction status of Captured.
Create terminal session - Successful with cashbackComplete a transaction with cashback amount specified.Cashback should be applied to the amount displayed on the card machine and recorded by the POS.
Create terminal session - Successful with gratuityComplete a transaction with gratuity amount specified.Gratuity amount should be recorded by the POS.
Create terminal session - Successful with contactlessComplete a transaction by presenting card to contactless reader.POS should display result of Captured.
Create terminal session - Successful with signatureInitiate a transaction by using a Virtual Machine with TID ending in SIP0.POS should provide user with a dialogue box specifying that signature verification is required, and give the user an option to either accept or reject the signature. Selecting the accept option should send a PUT /terminals of accepted: true to the signature endpoint and lead to a successful payment.
Create terminal session - Successful with signature after 80 secondsInitiate a transaction by using a Virtual Machine with TID ending in SIP0. At the status "SignatureVerificationRequired" the user should not select an option for 80s, allowing the sale to roll over to a successful state. The user should then either select to accept the signature, or the POS should gain the result from continued polling. Regardless, the status should be Captured.POS should display result of Captured.
Create terminal session - DeclinedInitiate a transaction by using a Virtual Machine with TID ending in DIP0.POS should display status Declined. POS should re-use Payment Intent if transaction is re-attempted.
Create terminal session - Unsuccessful with signature rejectionInitiate a transaction by using a Virtual Machine with TID ending in SIP0.POS should provide user with a dialogue box specifying that signature verification is required, and give the user an option to either accept or reject the signature. Selecting the accept option should send a PUT /terminals of accepted: false to the signature endpoint and lead to a declined payment.
Create terminal session - Successful with signature - rejection after 80 secondsInitiate a transaction by using a Virtual Machine with TID ending in SIP0. At the status SignatureVerificationRequired the user should not select an option for 80s, allowing the sale to roll over to a successful state. The user should then either select to reject the signature, or the POS should gain the result from continued polling. Regardless, the status should be Captured.POS should display result of Captured.
Create terminal session - Failure with busy terminalInitiate a sale while PDQ is in menu.POS should display that PDQ is not available.
Create terminal session - Cancel transaction from PDQInitiate a sale and cancel by selecting the X at the top of the PDQ screen before the card has been presented.POS should display a result of Canceled.
Create terminal session - Cancel transaction from POS - SuccessfulInitiate a sale and cancel by sending a PUT /terminals to the cancel endpoint before the card has been presented.POS should confirm status via polling and display a result of Canceled.
Create terminal session - Cancel transaction from POS - UnsuccessfulInitiate a sale and cancel by sending a PUT /terminals to the cancel endpoint after the card has been presented.POS should confirm status via polling and transaction flow should be unaffected.
Create terminal session - ExpiredInitiate a transaction by using a Virtual Machine with TID ending in TIP0 to retrieve a final status of Expired.POS should display a dialogue advising that the result of the transaction cannot be confirmed and provide an option to manually record the sale on the POS as successful or retry if unsuccessful.
Terminal session - polling ratePOS should call GET on terminal session regularly (once per second) to receive notificationEvents and TerminalSessionStatus updatesPolling should occur regularly enough that status updates are captured and displayed appropriately.
Terminal session - display notificationsComplete several transactions invoking successful results, cancelation requests and signature verification to ensure relevant statuses are recorded effectively.Terminal should display relevant notificationEvents and TerminalSessionStatus messages to the user to confirm the current state of the card machine.
[Manual] Create Terminal Session - Preauth

These tests cover the sales flow of terminal sessions created using captureMode: Manual, meaning that the transactions will be pre-authorized and then captured subsequently. We will also look to cover behaviours such as incrementing the pre-authorized amount to ensure that the user experience is consistent.

ScenarioSteps to ReproduceExpected Outcome
Create terminal session - Successful with inserting cardCreate a payment intent with capture mode set to manual. Create a terminal session and successfully authorize the payment using Chip and Pin or device verification.Must display transaction status of Authorized.
Create terminal session - Successful with contactlessCreate a payment intent with capture mode set to manual. Create a terminal session and successfully authorize the payment using device verification.Must display transaction status of Authorized.
Create terminal session - Successful with different card typeCreate a Payment intent with capture mode set to manual. Create a terminal session and successfully authorise the payment using a different card type to that used previously.Must display transaction status of Authorized.
Create terminal session - DeclinedInitiate a transaction by by using a Virtual machine with TID ending "DIP0".POS should display status Declined. POS should re-use Payment Intent if transaction is re-attempted.
Update intent - Successful with increasing amountUsing the payment intent from a successful pre authorisation, use the "change payment intent amount" endpoint to increase the pre-authorized amount.POS should receive a response with “Authorized” and display this.
Update intent - Unsuccessful amount changeTry to update a previously captured payment intent.The POS would display the error returned from the Dojo API, such as Invalid request for payment with id pi_sandbox_EaaC8tw2fUKVVoSUt5JgJQ. The status Captured does not allow this change.
Update intent - Failure with non-existing payment intent idTry to update an intent which does not exist.The POS would ideally protect the user from this use case ever happening.
Update intent - Failure when updating amount to zeroTry to update an intent to an amount 0.The POS would ideally protect the user from this use case ever happening. The POS would error with amount must be higher than 0.
[Auto] Create Terminal Session - Refund

These tests cover the refund flow of terminal sessions created using captureMode: Auto, meaning that the refunds will be completed immediately.

ScenarioSteps to ReproduceExpected Outcome
Create terminal session [Unlinked Refund - Successful]Initiate an unlinked refund which is then authorized successfully.The POS should parse the status of Captured returned in the terminal-session object and display that the refund was successful.
Create terminal session [Unlinked Refund - Declined]Initiate an unlinked refund which fails to authorize.The POS should display that the refund was declined.
Create terminal session [Unlinked Refund - Expired]Initiate an unlinked refund and remove the battery during the authorization, allowing the transaction to expire after several seconds, or by using a Virtual Machine ending in "TIP0" to retrieve a final status of Expired.POS should display a dialogue advising that the result of the refund cannot be confirmed, Please check the card machine screen for the result and provide an option to manually record the refund on the POS as successful or retry if unsuccessful.
Create terminal session [Unlinked Refund - Cancelled]Initiate an unlinked refund and cancel by selecting the X at the top of the PDQ screen before the card has been presented.POS should display a result of Canceled.
Create terminal session [Unlinked Refund - Successful with signature accepted]Initiate an unlinked refund by by using a Virtual machine with TID ending "SIS0".POS should provide user with a dialogue box specifying that signature verification is required, and give the user an option to either accept or reject the signature. Selecting the accept option should send a PUT of "accepted": true to the signature endpoint and lead to a successful refund.
Create terminal session [Unlinked Refund - Unsuccessful with signature rejected]Initiate an unlinked refund by by using a Virtual machine with TID ending "SIS0".POS should provide user with a dialogue box specifying that signature verification is required, and give the user an option to either accept or reject the signature. Selecting the Decline option should send a PUT of "accepted": false to the signature endpoint and lead to a declined payment.
Create terminal session [Matched Refund - Successful]Initiate a matched refund which is then authorized successfully.The POS should call GET on the Payment Intent, retrieve the status of Refunded and confirm this to the user.
Create terminal session [Matched Refund - Declined]Initiate a matched refund which fails to authorize.The POS should display that the refund was declined.
Create terminal session [Matched Refund - Expired]Initiate a transaction by by using a Virtual machine with TID ending "TIP0" to retrieve a final status of Expired.POS should display a dialogue advising that the result of the refund cannot be confirmed, Please check the card machine screen for the result and provide an option to manually record the refund on the POS as successful or retry if unsuccessful.
Create terminal session [Matched Refund - Cancelled]Initiate a matched refund and cancel by selecting the X at the top of the PDQ screen before the card has been presented.POS should display a result of Canceled.
Create terminal session [Matched Refund - Successful with signature accepted]Initiate a matched refund by by using a Virtual machine with TID ending "SIS0".POS should provide user with a dialogue box specifying that signature verification is required, and give the user an option to either accept or reject the signature. Selecting the accept option should send a PUT of "accepted": true to the signature endpoint and lead to a successful refund.
Create terminal session [Matched Refund - Unsuccessful with signature rejected]Initiate an unlinked refund by by using a Virtual machine with TID ending "SIS0".POS should provide user with a dialogue box specifying that signature verification is required, and give the user an option to either accept or reject the signature. Selecting the Decline option should send a PUT of "accepted": false to the signature endpoint and lead to a declined payment.
Error testing

These tests ensure that the POS is able to handle errors which will be returned from our API, ensuring that a valid error message and call to action is always displayed to the user.

Error testingDescription / Steps
HTTP status code 400 - Bad RequestOccurs in the instance that a bad request is provided - this should be addressed prior to release by resolving the bad request.
HTTP status code 401 - UnauthorizedOccurs when an invalid API Key is submitted. It's important, particularly in customer-driven installations, to provide clear user error-messaging here to ask that the credentials submitted by checked.
HTTP status code 404 - Not found (TID unavailable)In the event that the terminal is unavailable (offline, or powered off), the POS should advise the user accordingly and ask that they check the device status.
HTTP status code 422 - Unprocessable EntityThis can be tested by attempting to cancel a payment outside of the "Insert Card" screen. The POS should respond and carry on with the previous request, and ideally advise the user of why the error occurred (eg: Payment can only be cancelled during the "Initiated" phase).

Have you found the information you need?

Cookie Policy

We use cookies to optimize site functionality and give you the best possible experience. To learn more, view the following link: Cookie Policy