# bhushantbn/playwright-bdd-product-grid architecture

> Architecture diagram of the GitHub repository bhushantbn/playwright-bdd-product-grid, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bhushantbn/playwright-bdd-product-grid
- Repository: https://github.com/bhushantbn/playwright-bdd-product-grid

## Overview

This repository is a Playwright/Cucumber UI automation framework. Its main workflow is to run Gherkin scenarios, dispatch steps to page-object actions, and verify behavior in the target web application. Scenario hooks manage browser/session setup and failure handling; environment configuration and optional Azure/Jira integrations support execution. The graph follows the README and sampled source; feature domains beyond the sampled Admin and Leave steps are represented from the tree and documented capabilities, with their internal wiring left unspecified where source was not sampled.

Main entry points: [`src/stepDefinitions`](https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/stepDefinitions) (Step definitions), [`src/hooks/hooks.ts`](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/hooks/hooks.ts) (World and hooks), [`src/pages/BasePage.ts`](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/pages/BasePage.ts) (Base page), [`src/pages/Leave`](https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/pages/Leave) (Leave pages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_bdd["BDD Scenarios"]
  node_cucumber["Cucumber engine"]
  node_login_features["Login scenarios<br/>[login.feature]"]
  node_forgot_features["Password recovery"]
  node_admin_features["Admin scenarios<br/>[admin.feature]"]
  node_dashboard_features["Dashboard scenarios<br/>[dashboard.feature]"]
  node_leave_features["Leave scenarios"]
  node_heroku_features["Heroku scenarios<br/>[heroku.feature]"]
end

subgraph group_runtime["Scenario Runtime"]
  node_steps["Step definitions"]
  node_hooks["World and hooks<br/>[hooks.ts]"]
  node_auth["Auth setup<br/>[authSetup.ts]"]
end

subgraph group_pages["Page Objects"]
  node_base_page["Base page<br/>[BasePage.ts]"]
  node_login_page["Login pages"]
  node_admin_page["Admin page<br/>[Admin.po.ts]"]
  node_dashboard_pages["Dashboard pages"]
  node_leave_pages["Leave pages"]
  node_heroku_page["Heroku page<br/>[heroku.po.ts]"]
  node_ui_element["UI helpers<br/>[UIElement.ts]"]
end

subgraph group_configuration["Configuration"]
  node_config_manager["Config manager<br/>[ConfigManager.ts]"]
  node_environment_data["Environment configs"]
end

subgraph group_integrations["Failure Integrations"]
  node_blob["Blob uploader<br/>[BlobStorage.ts]"]
  node_jira["Jira service<br/>[JiraService.ts]"]
end

node_runner(("Test runner"))
node_web_app(("Target web app"))
node_playwright["Playwright browser"]
node_azure[("Azure Blob Storage")]
node_jira_service["Jira"]

node_runner -->|"starts"| node_cucumber
node_cucumber -->|"executes"| node_login_features
node_cucumber -->|"executes"| node_forgot_features
node_cucumber -->|"executes"| node_admin_features
node_cucumber -->|"executes"| node_dashboard_features
node_cucumber -->|"executes"| node_leave_features
node_cucumber -->|"executes"| node_heroku_features
node_cucumber -->|"dispatches steps"| node_steps
node_cucumber -->|"runs lifecycle"| node_hooks
node_steps -->|"uses world"| node_hooks
node_hooks -->|"reads config"| node_config_manager
node_config_manager -->|"loads environment"| node_environment_data
node_hooks -->|"generates session"| node_auth
node_hooks -->|"launches browser"| node_playwright
node_auth -->|"automates login"| node_playwright
node_steps -->|"calls"| node_login_page
node_steps -->|"calls"| node_admin_page
node_steps -->|"calls"| node_dashboard_pages
node_steps -->|"calls"| node_leave_pages
node_steps -->|"calls"| node_heroku_page
node_login_page -->|"extends"| node_base_page
node_admin_page -->|"extends"| node_base_page
node_dashboard_pages -->|"extends"| node_base_page
node_leave_pages -->|"extends"| node_base_page
node_heroku_page -->|"extends"| node_base_page
node_leave_pages -->|"uses"| node_ui_element
node_base_page -->|"reads config"| node_config_manager
node_base_page -->|"drives page"| node_playwright
node_login_page -->|"drives page"| node_playwright
node_admin_page -->|"drives page"| node_playwright
node_dashboard_pages -->|"drives page"| node_playwright
node_leave_pages -->|"drives page"| node_playwright
node_heroku_page -->|"drives page"| node_playwright
node_playwright -->|"automates UI"| node_web_app
node_hooks -->|"uploads failures"| node_blob
node_blob -.->|"uploads files"| node_azure
node_hooks -->|"reports tagged failures"| node_jira
node_jira -.->|"searches and creates issues"| node_jira_service

click node_login_features "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Login/login.feature"
click node_forgot_features "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Login/forgot_password.feature"
click node_admin_features "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Admin/admin.feature"
click node_dashboard_features "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Dashboard/dashboard.feature"
click node_leave_features "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Leave/assign_leave.feature"
click node_heroku_features "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Heroku/heroku.feature"
click node_steps "https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/stepDefinitions"
click node_hooks "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/hooks/hooks.ts"
click node_auth "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/utils/authSetup.ts"
click node_base_page "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/pages/BasePage.ts"
click node_login_page "https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/pages/Login"
click node_admin_page "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/pages/Admin/Admin.po.ts"
click node_dashboard_pages "https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/pages/Dashboard"
click node_leave_pages "https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/pages/Leave"
click node_heroku_page "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/pages/Heroku/heroku.po.ts"
click node_ui_element "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/utils/UIElement.ts"
click node_config_manager "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/config/ConfigManager.ts"
click node_environment_data "https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/testData"
click node_blob "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/utils/BlobStorage.ts"
click node_jira "https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/utils/JiraService.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cucumber,node_login_features,node_forgot_features,node_admin_features,node_dashboard_features,node_leave_features,node_heroku_features,node_playwright toneBlue
class node_steps,node_hooks,node_auth,node_azure toneAmber
class node_base_page,node_login_page,node_admin_page,node_dashboard_pages,node_leave_pages,node_heroku_page,node_ui_element toneMint
class node_config_manager,node_environment_data toneRose
class node_blob,node_jira,node_runner,node_web_app,node_jira_service toneIndigo
```

## Components

### BDD Scenarios

- **Cucumber engine**
- [Login scenarios](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Login/login.feature): `features/Login/login.feature`
- [Password recovery](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Login/forgot_password.feature): `features/Login/forgot_password.feature`
- [Admin scenarios](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Admin/admin.feature): `features/Admin/admin.feature`
- [Dashboard scenarios](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Dashboard/dashboard.feature): `features/Dashboard/dashboard.feature`
- [Leave scenarios](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Leave/assign_leave.feature): `features/Leave/assign_leave.feature`
- [Heroku scenarios](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/features/Heroku/heroku.feature): `features/Heroku/heroku.feature`

### Scenario Runtime

- [Step definitions](https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/stepDefinitions): `src/stepDefinitions`
- [World and hooks](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/hooks/hooks.ts): `src/hooks/hooks.ts`
- [Auth setup](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/utils/authSetup.ts): `src/utils/authSetup.ts`

### Page Objects

- [Base page](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/pages/BasePage.ts): `src/pages/BasePage.ts`
- [Login pages](https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/pages/Login): `src/pages/Login`
- [Admin page](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/pages/Admin/Admin.po.ts): `src/pages/Admin/Admin.po.ts`
- [Dashboard pages](https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/pages/Dashboard): `src/pages/Dashboard`
- [Leave pages](https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/pages/Leave): `src/pages/Leave`
- [Heroku page](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/pages/Heroku/heroku.po.ts): `src/pages/Heroku/heroku.po.ts`
- [UI helpers](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/utils/UIElement.ts): `src/utils/UIElement.ts`

### Configuration

- [Config manager](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/config/ConfigManager.ts): `src/config/ConfigManager.ts`
- [Environment configs](https://github.com/bhushantbn/playwright-bdd-product-grid/tree/main/src/testData): `src/testData`

### Failure Integrations

- [Blob uploader](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/utils/BlobStorage.ts): `src/utils/BlobStorage.ts`
- [Jira service](https://github.com/bhushantbn/playwright-bdd-product-grid/blob/main/src/utils/JiraService.ts): `src/utils/JiraService.ts`

### Other components

- **Test runner**
- **Target web app**
- **Playwright browser**
- **Azure Blob Storage**
- **Jira**

## Connections

- Test runner → Cucumber engine: starts
- Cucumber engine → Login scenarios: executes
- Cucumber engine → Password recovery: executes
- Cucumber engine → Admin scenarios: executes
- Cucumber engine → Dashboard scenarios: executes
- Cucumber engine → Leave scenarios: executes
- Cucumber engine → Heroku scenarios: executes
- Cucumber engine → Step definitions: dispatches steps
- Cucumber engine → World and hooks: runs lifecycle
- Step definitions → World and hooks: uses world
- World and hooks → Config manager: reads config
- Config manager → Environment configs: loads environment
- World and hooks → Auth setup: generates session
- World and hooks → Playwright browser: launches browser
- Auth setup → Playwright browser: automates login
- Step definitions → Login pages: calls
- Step definitions → Admin page: calls
- Step definitions → Dashboard pages: calls
- Step definitions → Leave pages: calls
- Step definitions → Heroku page: calls
- Login pages → Base page: extends
- Admin page → Base page: extends
- Dashboard pages → Base page: extends
- Leave pages → Base page: extends
- Heroku page → Base page: extends
- Leave pages → UI helpers: uses
- Base page → Config manager: reads config
- Base page → Playwright browser: drives page
- Login pages → Playwright browser: drives page
- Admin page → Playwright browser: drives page
- Dashboard pages → Playwright browser: drives page
- Leave pages → Playwright browser: drives page
- Heroku page → Playwright browser: drives page
- Playwright browser → Target web app: automates UI
- World and hooks → Blob uploader: uploads failures
- Blob uploader → Azure Blob Storage: uploads files
- World and hooks → Jira service: reports tagged failures
- Jira service → Jira: searches and creates issues
