# Using ABTasty QA Assistant

This guide explains how to use the ABTasty QA Assistant to test campaigns and feature flags. For integration instructions, see the :

* [React Native Integration Guide.](https://docs.abtasty.com/server-side/sdks/react-native/abtasty-qa-assistant-for-react-native)

### Overview

### What is ABTasty QA Assistant?

The **ABTasty QA Assistant** is a visual testing tool that integrates with ABTasty Feature Experimentation. It provides a floating UI overlay that allows developers and QA engineers to test campaign variations and feature flags without backend changes or app redeployment.

{% hint style="danger" %}
The QA Assistant should **NEVER** be included in production builds. Exposing QA mode in production allows anyone to:\
\- View all campaign configurations\
\- Force any variation\
\- See internal feature flags\
\- Monitor SDK events
{% endhint %}

### Getting started

#### Opening the QA Assistant

1. Look for the **floating button** at the configured position (default: bottom-right corner)
2. **Tap the button** to open the full-screen QA Assistant modal
3. Use the **tab navigation** at the top to switch between sections

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2F3vw4rZp12YhbzACraky3%2Ffloating-button.png?alt=media&#x26;token=aab1820f-9f96-47a5-8cbc-d867339232fc" alt="" width="188"><figcaption></figcaption></figure></div>

*The floating button appears as an overlay on your app*

#### Main interface

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FdTRv5TurpzJd6hGVST8g%2Fmain-interface-tabs.gif?alt=media&#x26;token=084d684a-bbf5-4a0f-b768-c41a9da634e0" alt="QA Assistant main interface showing three tabs" width="188"><figcaption></figcaption></figure></div>

*Main interface with Campaigns, Events, and Context tabs*

The QA Assistant has three main tabs:

| Tab           | Purpose                                              |
| ------------- | ---------------------------------------------------- |
| **Campaigns** | View all campaigns, force variations and allocations |
| **Events**    | Monitor SDK events in real-time                      |
| **Context**   | Inspect visitor ID and context attributes            |

***

### Dismissing the panel vs. disabling QA mode

There are two distinct ways to stop interacting with the QA Assistant:

| Action                | How                                                    | Effect                                                                           |
| --------------------- | ------------------------------------------------------ | -------------------------------------------------------------------------------- |
| **Dismiss the panel** | Tap the dismiss button or use the dismiss gesture      | Hides the UI panel; QA mode stays active and all forced states are preserved     |
| **Disable QA mode**   | Remove or disable QA mode at the SDK/integration level | Permanently hides the floating button and resets all forced states automatically |

{% hint style="info" %}
Disabling QA mode varies by platform. See your integration guide for detailed steps.
{% endhint %}

### Campaigns tab

{% hint style="warning" %}
All forced variations, allocations, and hidden campaigns are **temporary** and everything returns to normal allocation automatically when:

* Reset when you **disable QA mode**
* Reset when you **restart the app**
  {% endhint %}

### Understanding campaign status

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FGaj4kkVal5fA1PJeqdCj%2Fcampaigns-list.png?alt=media&#x26;token=a5c46038-0d8a-4247-912f-086ba55db2d5" alt="" width="188"><figcaption></figcaption></figure></div>

*Campaigns organized by status: Accepted (green) and Rejected (red). Search bar at top for filtering.*

**Accepted campaigns** (Green badge or Yellow "Hide" badge)

* Green "Accepted" badge: Allocated campaigns
* Yellow "Hide" badge: Excluded campaigns

**Rejected campaigns** (Red badge or Yellow "Forced" badge)

* Red "Rejected" badge: Cannot force variations
* Yellow "Forced" badge: Allocation forced - can now force variations

#### Viewing campaign details

Each campaign contains three tabs with detailed information to help you understand why campaigns are accepted or rejected.

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FkpuNjyIcK0zv29QKCtH4%2Fcampaign-details-tabs.gif?alt=media&#x26;token=a4e03430-b5dd-47a1-b9c5-1e3ba6a79850" alt="Campaign details with three tabs" width="188"><figcaption></figcaption></figure></div>

*Tap any campaign to view Variations, Targeting, and Allocations tabs*

#### Understanding variations

**What you see:**

* **Current variation**: Shows "Your version" badge (green background)
* **Other variations**: Show "View" button to force, or "Reset" button if already forced
* **Flag values**: Feature flag modifications (strings, numbers, booleans, objects)

### Understanding targeting

**Targeting logic:**

* **Targeting groups** linked by OR (match ANY group)
* **Conditions** linked by AND (match ALL in a group)
* Campaign is **Accepted** if ANY group is fully matched

**Common operators:**

* `EQUALS` / `NOT_EQUALS` - Exact match
* `CONTAINS` / `NOT_CONTAINS` - Substring
* `GREATER_THAN` / `LOWER_THAN` - Numeric

**Visual Indicators:**

* ✅ Green checkmarks for matched conditions
* ❌ Red X for unmatched conditions

### Understanding allocations

**What it shows:**

* Traffic distribution across variations with percentage
* If you're in the unallocated portion, campaign is rejected

### How to force a variation

Switch between variations within an accepted campaign (or forced campaign).

{% hint style="info" %}
You can only force variations for campaigns that are **Accepted** (normal allocation) or have been **forced to display** (forced allocation).
{% endhint %}

{% stepper %}
{% step %}

#### Open campaign → Variations tab

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FD3NllixrnzhKJNL0bE1E%2Fforce-variation-list.png?alt=media&#x26;token=bf3f2134-c4cd-4247-8612-d2c6729d7a47" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Tap "View" on desired variation → now shows "Your version" badge

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FTr4c2xwxW1DA2CCY7IHV%2Fforce-variation-selected.png?alt=media&#x26;token=4cb78a15-095d-4b41-9b4e-53204106e7e0" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Dismiss the QA Assistant panel when ready to test (you can force multiple variations/campaigns first)

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FuGgpC3z7pMFTZgF9ObnY%2Fqa-assistant-closed.png?alt=media&#x26;token=39895e8c-1c48-4c00-b18d-f96cd2feefef" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### When done testing, reopen QA Assistant and tap "Reset" to revert

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2F8V7K5SXr9CHnmeWEloVe%2Fforce-variation-reset.png?alt=media&#x26;token=9e352fe5-ef6a-4413-b65c-a19364f21b8d" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

**Detailed workflow:**

1. Open campaign from Accepted Campaigns (or force allocation first if rejected)
2. Go to **Variations** tab
3. Tap **"View"** button on **any variation** you want to force
4. Variation now shows **"Your version"** badge
5. Optionally force other variations/campaigns as needed
6. **Dismiss the QA Assistant panel** when ready to test all forced changes
7. Test your app - it displays all forced variations/campaigns
8. Reopen QA Assistant and tap **"Reset"** button to revert

### How to force an allocation

Test rejected campaigns without them meeting targeting rules. **After forcing allocation, you can force variations.**

{% stepper %}
{% step %}

#### Find "Force display" button next to rejected campaign

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FekYf6cbM7gMaSXS4HLht%2Fforce-allocation-before.png?alt=media&#x26;token=28aa45f4-9bfb-4439-b4eb-084ad170b0eb" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Badge changes to "Forced" (yellow) - campaign is now forced and you can force variations

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FUxkJ4ZFbi9TylQwjefPP%2Fforce-allocation-after.png?alt=media&#x26;token=a6a07ed2-9e67-43ef-a639-42fe8d1f91e1" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Dismiss the QA Assistant panel when ready to test (you can force other allocations/variations first)

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FuGgpC3z7pMFTZgF9ObnY%2Fqa-assistant-closed.png?alt=media&#x26;token=39895e8c-1c48-4c00-b18d-f96cd2feefef" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### When done testing, reopen QA Assistant and tap "Initial state" to revert

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2F1MMvVN2xLUZuN84fdlcP%2Fforce-allocation-reset.png?alt=media&#x26;token=df22eb28-a2bc-47d5-89a1-47f10389154f" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

**Detailed workflow:**

1. Find campaign in **Rejected Campaigns** section
2. Tap **"Force display"** button
3. Badge changes from "Rejected" (red) to **"Forced"** (yellow)
4. Campaign **stays in Rejected section** but you can **now force variations**
5. Optionally force other allocations/variations as needed
6. **Dismiss the QA Assistant panel** when ready to test all forced changes
7. Test the forced campaign in your app
8. Reopen QA Assistant and tap **"Initial state"** to revert to rejected

### How to hide a campaign

Hide accepted campaigns to test exclusion scenarios.

{% stepper %}
{% step %}

#### Find "Hide" button next to accepted campaign

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FPdkb91xwVemBIQRvNCTK%2Fhide-campaign-before.png?alt=media&#x26;token=4cab3a54-5cc5-4833-9843-44635ca94ae4" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Badge changes to "Hidden" (yellow) - campaign is now hidden

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2F6VVhTOdRJbYwoEkrAO5B%2Fhide-campaign-after.png?alt=media&#x26;token=6cdaad8d-d9e6-4629-9fef-3c2664f6c42d" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Dismiss the QA Assistant panel when ready to test (you can hide multiple campaigns first)

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FuGgpC3z7pMFTZgF9ObnY%2Fqa-assistant-closed.png?alt=media&#x26;token=39895e8c-1c48-4c00-b18d-f96cd2feefef" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### When done testing, reopen QA Assistant and tap "Initial state" to restore

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FVzR9Wvu9KZq4y5svdE8h%2Fhide-campaign-reset.png?alt=media&#x26;token=1d4c1dbe-32db-472d-968a-de792d1f3c1c" alt="" width="188"><figcaption></figcaption></figure></div>

{% endstep %}
{% endstepper %}

**Detailed workflow:**

1. Find campaign in **Accepted Campaigns** section
2. Tap **"Hide"** button
3. Badge changes from "Accepted" (green) to **"Hidden"** (yellow)
4. Optionally hide other campaigns as needed
5. **Dismiss the QA Assistant panel** when ready to test all exclusions
6. Test your app's fallback behavior - app behaves as if campaigns were rejected
7. Reopen QA Assistant and tap **"Initial state"** to restore

**Use cases:**

* Test fallback behavior when features are disabled
* Verify app works without specific campaigns
* Ensure dependent features handle missing campaigns

### Resetting forced allocations

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FKNLUm54CNKQEHaoBilmR%2Freset-all-button.gif?alt=media&#x26;token=cdfaac5f-61e5-40c6-89b6-050794daaf94" alt="" width="188"><figcaption></figcaption></figure></div>

*"Reset All" button clears all forced states*

**Per-Campaign reset:**

1. Tap **"Initial state"** button on campaign
2. Only that campaign reverts to normal state

**Global reset:**

1. Tap **"Reset All"** button
2. All campaigns revert to normal state

**Automatic reset:**

All forced states automatically reset when you:

* Disable QA mode&#x20;
* Restart the app

{% hint style="info" %}
**Remember**: All forced states are temporary and return to normal allocation automatically when QA mode is disabled or the app restarts.
{% endhint %}

### Events tab

Monitor all SDK events in real-time.

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2F1t5bJqYL20C7oISeyIf5%2Fevents-list.gif?alt=media&#x26;token=eec79c9c-ef44-4053-b04a-84c99857b7d2" alt="" width="188"><figcaption></figcaption></figure></div>

*Events shown with icons: Page, Screen, Event, Transaction, and Activate . Search bar at top, Clear button to remove all events.*

#### Viewing Event details

*Tap any event to view type, timestamp, action, category, label, and properties*

**When to clear Events:**

* Starting a new test scenario
* Isolating specific event sequences

{% hint style="info" %}
Events fired while QA mode is active are **not recorded in your ABTasty reporting dashboards**. This is intentional, it prevents test traffic from polluting your campaign analytics and conversion reports.
{% endhint %}

### Context tab

View current visitor information and context attributes.

<div align="left"><figure><img src="https://233132171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBWu23t7Qv6wLLh6Hl5b4%2Fuploads%2FcXltTdYLoULDFzs1y2kg%2Fcontext-tab.png?alt=media&#x26;token=414ac516-64f5-438a-b0ae-465ba7a96c2b" alt="" width="188"><figcaption></figcaption></figure></div>

*Visitor ID and context attributes in JSON format*

#### Why Context matters

* **Targeting**: Context values determine campaign eligibility
* **Personalization**: Affects which variations you see
* **Testing**: Change context to test different scenarios

{% hint style="info" %}
Use Context tab with Targeting tab to understand campaign acceptance/rejection.
{% endhint %}

### Glossary

**Accepted Campaign**: A campaign that the visitor is allocated to and currently active for them.

**Rejected Campaign**: A campaign the visitor is NOT allocated to due to targeting rules or traffic allocation.

**Forced Allocation**: Manual override enabling variation forcing for rejected campaigns. Campaign stays in Rejected section but badge changes to "Forced" (yellow), allowing you to force variations. **Session-only** - resets on app restart.

**Forced Variation**: Manual override switching to a specific variation within an accepted campaign or forced campaign. **Session-only** - resets on app restart.

**Hide Campaign**: Manual override hiding an accepted campaign, allowing testing of exclusion scenarios. **Session-only** - resets on app restart.

**QA Mode**: Special SDK mode enabling the QA Assistant interface.
