> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tabby.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Full Testing Checklist

After the integration is completed from your side - the QA will be performed by the Tabby team. To make sure that all the requirements are covered - kindly review the below checklist which contains the points assessed by our side.

If any of the points cannot be applied to your website/application architecture - please, notify us about that in an email thread and this point will be discussed separately.

This page covers **Website (desktop and mobile), iOS and Android** custom (direct API) integrations. When integrating Tabby on the <a href="/introduction/quick-start">E-commerce Platform from the list</a> this section is not applicable.

## On-Site Messaging

* **Product and Cart snippets and pop-ups** are present in accordance with the:
  * <a href="/pay-in-4-custom-integration/on-site-messaging#product-and-cart-page-snippet">custom integration documentation</a>
  * or the <a href="/pay-in-4-custom-integration/mobile-apps/app-promo-messaging">SDK documentation</a> used
* **Product snippets** are shown for all products, there is no amount limitation on displaying snippets
* **Cart snippet** is shown for all amounts, there is no amount limitation on displaying snippets
* **Cart snippet** amount is updated successfully when changes are performed with the items in the Cart: addition / removal / deletion of the items
* If the store has both **Arabic and English languages** - snippets should be displayed correctly for both of them
* **Website:** snippets should fit the width of a Mobile Web screen and have suitable width for a Desktop Web as well
* *In case your store has several countries*: **Tabby snippets** should be displayed only for countries you have already registered with Tabby
* *If our code is not compatible with yours or you have a non-standard plan*: kindly use one of the <a href="/pay-in-4-custom-integration/on-site-messaging#custom-promo-snippets">following custom snippets</a> after the confirmation from your assigned business manager is received

## Tabby as a Payment Method

* **Payment method name** is present in accordance with the <a href="/pay-in-4-custom-integration/checkout-flow#tabby-on-checkout">documentation</a>
* **Tabby logo** is present near the payment method name
* **Checkout snippet** is displayed under the selected Tabby payment method (recommended), or the **payment method description** matches the approved copy — see <a href="/pay-in-4-custom-integration/checkout-flow#tabby-on-checkout">Tabby on Checkout</a>
* There should be no restrictions on displaying Tabby payment method from your side - this behaviour should be handled by background pre-scoring process
* If the store has both **Arabic and English languages** - Payment method should be displayed correctly for both of them
* *In case your store has several countries*: **Tabby payment method** should be displayed only for countries you have already registered with Tabby

## Checkout

* <a href="/testing-guidelines/testing-credentials#2-background-pre-scoring-reject">Background Pre-scoring</a> check is present and working in accordance with the <a href="/pay-in-4-custom-integration/checkout-flow#background-pre-scoring-check">documentation</a>
* **Website:** when a customer decides to place an order with Tabby - Tabby Checkout is opened in the same browser window
* **Mobile apps:** no control buttons (e.g., X, close, back, etc.) from your app are present on Tabby Checkout
* **Total amount** on Checkout = amount shown on Tabby Checkout
* If the store has both **Arabic and English languages** - language marker is sent correctly in a session creation request: object <code className="text-blue-600 dark:text-blue-300">"lang"</code>, enum <code className="text-blue-600 dark:text-blue-300">"ar"</code> / <code className="text-blue-600 dark:text-blue-300">"en"</code>
* **Session creation request** contains all the required parameters from <a href="https://docs.tabby.ai/api-reference/checkout/create-a-session" rel="noopener noreferrer" target="_blank">Tabby API</a>
* <a href="/testing-guidelines/testing-credentials#1-payment-success">Success scenario</a> is working
* <a href="/testing-guidelines/testing-credentials#3-payment-cancellation">Cancellation scenario</a> is working
* <a href="/testing-guidelines/testing-credentials#4-payment-failure">Failure scenario</a> is working
* <a href="/testing-guidelines/testing-credentials#5-corner-case">Corner case</a> is supported

## Payment Verification and Processing

* <a href="/api-reference/webhooks/register-a-webhook">Webhooks are registered</a> for each `merchant_code` + secret key pair (up to 4 webhooks per pair). To receive webhooks for test payments, register them with your test key (`sk_test_...`)
* After a payment is placed successfully with Tabby you receive a webhook to your registered url with status <code className="text-blue-600 dark:text-blue-300">"authorized"</code>
* On receiving it you should **trigger a** <a href="https://docs.tabby.ai/api-reference/payments/retrieve-a-payment" rel="noopener noreferrer" target="_blank">getPayment</a> request to verify the status of the payment
* If a status is <code className="text-blue-600 dark:text-blue-300">"AUTHORIZED"</code> - a <a href="https://docs.tabby.ai/api-reference/payments/capture-a-payment" rel="noopener noreferrer" target="_blank">capture request</a> should be triggered from your side
  * It is an expected behaviour that webhooks return <code className="text-blue-600 dark:text-blue-300">"authorized"</code> in lower case while <a href="https://docs.tabby.ai/api-reference/payments/retrieve-a-payment" rel="noopener noreferrer" target="_blank">getPayment</a> - in upper case: <code className="text-blue-600 dark:text-blue-300">"AUTHORIZED"</code>.
* A **full amount** must be captured

If you have any questions considering this Checklist - feel free to contact us in the Integrations thread.
