# Features — katalon_tests

Evidence date: 2026-10-11.

Source: `git@bitbucket.org:overdrive/katalon_tests.git`, `main` at `7fa8653` (2025-08-21).

There was no prior features document in Silicon Ark. Status words mean:

- **Current** — present on `main` and selectable or runnable as written.
- **Present, not selected** — the file exists, and neither dynamic suite's filter matches its tags.
- **Documented only** — described in Markdown, with no matching file.
- **Planned** — named as future work in the source docs.
- **Changed** — touched by the add-to-cart commits of 2025-08-20 and 2025-08-21.
- **Stale** — a backup, an empty discovery helper, or a document path that does not match the tree.

`TEST_COVERAGE.md` says the project has 28 test cases. The module counts in that same file add to 22. The tree has 24 `.tc` files. The two files absent from the numbered coverage list are `Read GMail 2fa Code` and `08_Multipath_Regressions/placeholder`.

## How a case is chosen

| Suite | File | Rule | Failure policy in the docs |
|---|---|---|---|
| Smoke | `Test Suites/suites/Smoke_Tests_Dynamic.ts` | `tag=(P1)` and `tag=(SMOKE)` | Stop on failure. Entity rerun count is 1. Page-load timeout 30 seconds |
| Regression | `Test Suites/suites/Regression_Tests_Dynamic.ts` | `tag=(REGRESSION)` | Continue on failure. Entity rerun count is 2. Page-load timeout 60 seconds |
| Collection | `Test Suites/main/Tag_Based_Execution.ts` | Runs only `Regression_Tests_Dynamic`, Chrome, profile `default`, sequential | The collection tag is `EXECUTION_CONTROL` |
| Auto-discover | `Test Suites/suites/Smoke_Tests_Auto_Discover.groovy` | Groovy only. No `.ts` entity | Not referenced by the shell scripts |

Shell entry points: `ShopFlow/run_smoke_tests.sh`, `ShopFlow/run_regression_tests.sh`.

## Current — smoke cases (P1 and SMOKE)

| Case | Tags on the `.tc` file | Script | What the script does |
|---|---|---|---|
| `Test Cases/01_Authentication/Login` | `AUTH,P1,SMOKE,2FA` | `Scripts/01_Authentication/Login/Script1755182083031.groovy` | Opens a browser, submits profile credentials, reads a 2FA mail when the field is present |
| `Test Cases/01_Authentication/Logout` | `AUTH,P1,SMOKE,UI` | `Scripts/01_Authentication/Logout/Script1755182083032.groovy` | Calls Login, then uses `/Welcome/logout` and checks protected paths |
| `Test Cases/02_Core_Commerce/Dashboard` | `COMMERCE,P1,SMOKE,UI` | `Scripts/02_Core_Commerce/Dashboard/Script1755182083044.groovy` | Navigates to `/home` |
| `Test Cases/02_Core_Commerce/Add_To_Cart` | `COMMERCE,P1,SMOKE,UI` | `Scripts/02_Core_Commerce/Add_To_Cart/Script1755182083035.groovy` | Navigates to `/shop`. Does not call Login. **Changed** in `7fa8653` |
| `Test Cases/02_Core_Commerce/Product_Catalog_Browse` | `COMMERCE,P1,SMOKE,UI` | `Scripts/02_Core_Commerce/Product_Catalog_Browse/Script1755182083034.groovy` | Navigates to `/shop` and later `/products` |
| `Test Cases/02_Core_Commerce/Order_Management` | `COMMERCE,P1,SMOKE,UI` | `Scripts/02_Core_Commerce/Order_Management/Script1755182083041.groovy` | Calls Login, then `/dashboard` and `/orders` |
| `Test Cases/05_Price_Management/Product_Catalog_Management` | `PRICING,P1,SMOKE,UI` | `Scripts/05_Price_Management/Product_Catalog_Management/Script1755182083051.groovy` | Navigates to `/productmanagement` |

The Groovy comment inside `Add_To_Cart` says tags `CORE, P1, SMOKE, UI`. The `.tc` tag is `COMMERCE`, not `CORE`. Katalon filtering uses the `.tc` file.

## Current — regression cases (REGRESSION)

| Case | Tags | Script path under `Scripts/` | Entry URL |
|---|---|---|---|
| `01_Authentication/Invalid_Login` | `AUTH,P2,REGRESSION,UI,SECURITY` | `01_Authentication/Invalid_Login/Script1755182083033.groovy` | `GlobalVariable.url` |
| `02_Core_Commerce/Cart_Management` | `COMMERCE,P2,REGRESSION,UI` | `02_Core_Commerce/Cart_Management/Script1755182083042.groovy` | `/carts` |
| `02_Core_Commerce/Order_Scheduling` | `COMMERCE,P2,REGRESSION,UI` | `02_Core_Commerce/Order_Scheduling/Script1755182083043.groovy` | `/orders` |
| `03_User_Management/User_Profile_View` | `USER_MGMT,P2,REGRESSION,UI` | `03_User_Management/User_Profile_View/Script1755182083036.groovy` | `/users/userProfile` |
| `04_Admin_Management/Seller_Management` | `ADMIN,P2,REGRESSION,UI` | `04_Admin_Management/Seller_Management/Script1755182083037.groovy` | `/seller-management` |
| `04_Admin_Management/Store_Management` | `ADMIN,P2,REGRESSION,UI` | `04_Admin_Management/Store_Management/Script1755182083045.groovy` | `/storemanagement` |
| `04_Admin_Management/Seller_Groups` | `ADMIN,P2,REGRESSION,UI` | `04_Admin_Management/Seller_Groups/Script1755182083046.groovy` | `/sellergroups` |
| `04_Admin_Management/Buying_Groups` | `ADMIN,P2,REGRESSION,UI` | `04_Admin_Management/Buying_Groups/Script1755182083047.groovy` | `/admin/buying-groups` |
| `04_Admin_Management/Company_Management` | `ADMIN,P2,REGRESSION,UI` | `04_Admin_Management/Company_Management/Script1755182083048.groovy` | `/companymanagement` |
| `04_Admin_Management/Company_User_Management` | `ADMIN,P2,REGRESSION,UI` | `04_Admin_Management/Company_User_Management/Script1755182083049.groovy` | `/admin/company-users` |
| `05_Price_Management/Price_File_Upload` | `PRICING,P2,REGRESSION,UI` | `05_Price_Management/Price_File_Upload/Script1755182083038.groovy` | `/productmanagement/pricefiles` |
| `05_Price_Management/Price_File_Management` | `PRICING,P2,REGRESSION,UI` | `05_Price_Management/Price_File_Management/Script1755182083050.groovy` | `/pricefiles` |
| `05_Price_Management/Pricing_Rules_Management` | `PRICING,P2,REGRESSION,UI` | `05_Price_Management/Pricing_Rules_Management/Script1755182083052.groovy` | `/pricefilemappingrules` |
| `06_Reports_Analytics/Sales_Report_Generation` | `SHOPFLOW_REPORTS,P2,REGRESSION,UI` | `06_Reports_Analytics/ShopFlow_Reports_Generation/Script1755182083039.groovy` | `/reports` |

`Sales_Report_Generation.tc` `name` element is `ShopFlow_Reports_Generation`. The file name and the internal name differ. `TAG_STRATEGY.md` lists a module tag `REPORTS`. This case does not use that tag.

`TEST_COVERAGE.md` describes fill-rate and order-percentage charts, seller filters, and chart-type selectors for the reports case. Those behaviours are **Documented**. The script's first navigation is `/reports`. The rest of that script was not treated as a confirmed feature list.

## Present, not selected

| Case | Tags | Why it is outside both suites |
|---|---|---|
| `01_Authentication/Read GMail 2fa Code` | empty | Called from Login. Header comment claims tags `AUTH, P1, SMOKE, 2FA, API`, which are not in the `.tc` file |
| `07_Integration/API_Integration` | `INTEGRATION,P4,PLACEHOLDER,API` | Coverage doc calls it a placeholder. The script sends REST calls anyway. Header comment claims `P1` |
| `08_Multipath_Regressions/placeholder` | empty | Description and comment are empty. The script still navigates several modules and `/invalid-page` |

## Current — support features

| Feature | Evidence | Status |
|---|---|---|
| Default execution profile | `Profiles/default.glbl` is `defaultProfile` true | **Current** |
| Gmail 2FA fetch | `Read GMail 2fa Code` script, subject `2FA Validation`, 30 second poll | **Current**, as a subroutine of Login |
| Dynamic filtering | `filteringBuiltIn` `DynamicBuiltInSearch` on both `.ts` files | **Current** |
| Chrome runner | Shell scripts and `Tag_Based_Execution.ts` `runConfigurationId` Chrome | **Current** |
| Object repository | 528 `.rs` files: 456 `Page_Transactflow`, 49 `Page_AdminOverdrive`, 11 `Page_Login  Transactflow`, 12 `API` | **Current** |
| REST objects | `OrganisationsLogin`, `GetOrganisations`, `GetOrganisation`, `CreateOrganisation`, `UpdateOrganisation`, `DeleteOrganisation`, `GetStoreApi`, `GetSessionApi`, `InvalidAuth`, `InvalidEndpoint`, `InvalidData`, `PerformanceTest` | **Current** as templates. Used by the unselected API case |
| Stable shop locators | `ADD_TO_CART_TEST_FIXES.md` and `productsTable.rs` (`#productsTable`) | **Changed** |
| Gradle plugin shell | `build.gradle`, plugin `com.katalon.gradle-plugin` 0.1.2, dependencies commented out | **Current**, unused by the shell scripts |
| Sample price files | `TestData/valid_price_file.csv`, `invalid_data_price_file.csv`, `invalid_file.txt`, `product_image.jpg` | **Current** as files. No script references them |

## Stale or non-functional

| Item | Evidence | Status |
|---|---|---|
| `Scripts/Include/TagBasedExecution.groovy` | `findTestCasesByTags` returns an empty list. Later methods validate hard-coded tag arrays in memory and do not load `.tc` files | **Stale** relative to `TAG_STRATEGY.md` |
| `*.groovy.backup` | 25 backup copies committed beside the scripts | **Stale**. Katalon does not execute them |
| `Smoke_Tests.groovy` and `Regression_Tests.groovy` | Named in `DYNAMIC_TEST_SUITES.md` as still available | **Documented only**. Not in the tree |
| `Test Suites/suites/All_Tests` and `API_Tests` | Command examples in `TAG_STRATEGY.md` | **Documented only** |
| Pass/fail counters | Set to 0 in suite setup and printed in teardown. No script increments `smokeTestPassCount` or `regressionTestPassCount` | **Current** as dead counters |
| Regression data setup | `createTestUsers`, `createTestProducts`, `createTestOrders`, and the remove functions only `println` | **Current** as stubs |
| `README.md` path `Test Cases/Login/Login` | Actual path is `Test Cases/01_Authentication/Login` | **Stale** |
| `ADD_TO_CART_TEST_FIXES.md` paths under `tests/ShopFlow/` | Repository root contains `ShopFlow/`, not `tests/ShopFlow/` | **Stale** path prefix |
| Placeholder API key | Both shell scripts | **Current** as a non-working literal |

## Documented coverage claims

`TEST_COVERAGE.md` states functional coverage of 99%, priority coverage of 100% including P3, and test-type coverage of 100% for UI, API, security, and integration. No coverage report, JaCoCo file, or Katalon analytics export is in the repository. Treat those percentages as **Documented** claims, not measured results.

The same file's priority table says P1 = 10, P2 = 17, P3 = 0, P4 = 1. Counting `.tc` tags: P1 = 7 (Login, Logout, Dashboard, Add_To_Cart, Product_Catalog_Browse, Order_Management, Product_Catalog_Management), P2 = 14 (the regression table above), P3 = 0, P4 = 1 (`API_Integration`), untagged = 2. The documented P1 and P2 counts do not match the tags.

## Planned

From `TEST_COVERAGE.md` "Future Enhancements" and "Planned Improvements", and from `TAG_STRATEGY.md` / `DYNAMIC_TEST_SUITES.md`:

- Performance, load, and stress tests.
- Mobile browsers.
- WCAG accessibility checks.
- Visual regression.
- Broader API coverage (the existing API case is already a direct-run script, tagged placeholder).
- CI execution.
- Automated test-data creation (the regression suite's create functions are print stubs).
- Parallel execution and file-system scanning for discovery.
- External configuration files for case lists.

None of these have a pipeline, a tagged case, or a working discovery implementation in this revision.

## Removed or never committed

- Static suites `Smoke_Tests` and `Regression_Tests`, if they ever existed, are not on `main` at `7fa8653`. `DYNAMIC_TEST_SUITES.md` still mentions them.
- `sonar-project.properties` and `sonarqube_scan.bat` were listed at onboarding discovery and are not in this commit. **Unknown / Requires Confirmation** whether they were ever committed.

## Recently changed

The last three commits, all by joshgatdew, are add-to-cart fixes (`9af7ea3`, `c8debfd`, `7fa8653`). `ADD_TO_CART_TEST_FIXES.md` records the locator policy and names `Script1755182083035.groovy` as the updated script. No commit after 2025-08-21 is on `main`.
