NetPad QA Testing Framework
Document Informationβ
| Field | Value |
|---|---|
| Version | 1.0 |
| Last Updated | January 2026 |
| Owner | QA Team |
| Status | Active |
Table of Contentsβ
- Introduction
- Testing Environments
- Test Case Structure
- Bug Reporting Guidelines
- User Journeys
- Field Type Testing Matrix
- Workflow Node Testing Matrix
- Testing Checklist Templates
Introductionβ
Purposeβ
This document provides the QA team with structured guidelines for testing NetPad's features. It ensures consistent, thorough testing across all platform capabilities.
Scopeβ
NetPad has four core pillars that require testing:
| Pillar | Components | Priority |
|---|---|---|
| Forms | Form builder, 30+ field types, conditional logic, multi-page, theming | Critical |
| Workflows | Workflow editor, 25+ node types, triggers, execution engine | Critical |
| Data Management | Data browser, connections, import/export | High |
| AI/Conversational | Conversational forms, RAG, AI form generation | Medium |
Testing Principlesβ
- Test as a real user β Follow the journey a customer would take
- Document everything β Screenshots, screen recordings, exact steps
- Test edge cases β Empty inputs, special characters, large files, slow connections
- Test across browsers β Chrome, Firefox, Safari, Edge
- Test responsive design β Desktop, tablet, mobile viewports
Testing Environmentsβ
Environment URLsβ
| Environment | URL | Purpose |
|---|---|---|
| Production | https://app.netpad.io | Final verification only |
| Staging | https://staging.netpad.io | Primary testing environment |
| Development | https://dev.netpad.io | Early feature testing |
| Local | http://localhost:3000 | Developer testing |
Test Accountsβ
| Role | Password | Use For | |
|---|---|---|---|
| Owner | owner@test.netpad.io | [See 1Password] | Full admin testing |
| Admin | admin@test.netpad.io | [See 1Password] | Admin feature testing |
| Member | member@test.netpad.io | [See 1Password] | Standard user testing |
| Viewer | viewer@test.netpad.io | [See 1Password] | Read-only testing |
Test Data Guidelinesβ
- Never use real customer data for testing
- Use clearly fake data: "Test User", "test@example.com", "555-0100"
- Prefix test records with
[TEST]for easy cleanup - Clean up test data after completing test cycles
Test Case Structureβ
Every test case follows this standard format:
Test Case Templateβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TEST CASE: [TC-XXX-000] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Title: [Descriptive name of what's being tested] β
β Module: [Forms | Workflows | Data | AI | Auth | Other] β
β Priority: [P0-Critical | P1-High | P2-Medium | P3-Low] β
β Estimated Time: [X minutes] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β PRECONDITIONS β
β β’ [What must be true before starting] β
β β’ [Required setup, data, or state] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β TEST STEPS β
β β
β Step 1: [Action] β
β β Expected: [What should happen] β
β β Actual: _______ [Fill during testing] β
β β Status: β Pass β Fail β Blocked β
β β
β Step 2: [Action] β
β β Expected: [What should happen] β
β β Actual: _______ β
β β Status: β Pass β Fail β Blocked β
β β
β [Continue for all steps...] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β POSTCONDITIONS β
β β’ [Expected state after test completes] β
β β’ [Any cleanup required] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β TEST RESULT β
β Overall Status: β Pass β Fail β Blocked β Skipped β
β Tester: _______________________ β
β Date: _______________________ β
β Environment: _______________________ β
β Browser: _______________________ β
β Notes: _______________________ β
β Bug IDs: _______________________ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Priority Definitionsβ
| Priority | Definition | Examples |
|---|---|---|
| P0 - Critical | Core functionality that blocks all users | Login, form submission, data saving |
| P1 - High | Important features used frequently | Form builder, workflow editor, publishing |
| P2 - Medium | Features used regularly but have workarounds | Theming, import/export, analytics |
| P3 - Low | Nice-to-have features, edge cases | Keyboard shortcuts, minor UI polish |
Bug Reporting Guidelinesβ
Bug Report Templateβ
When a test fails, create a bug report with this information:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BUG REPORT: [BUG-000] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Title: [Short, descriptive summary] β
β Severity: [Critical | Major | Minor | Trivial] β
β Module: [Forms | Workflows | Data | AI | Auth | Other] β
β Found In: [Test Case ID, e.g., TC-FRM-001] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ENVIRONMENT β
β β’ URL: [exact URL where bug occurred] β
β β’ Browser: [Chrome 120, Firefox 121, Safari 17, etc.] β
β β’ OS: [macOS 14.2, Windows 11, etc.] β
β β’ Screen Size: [1920x1080, mobile, etc.] β
β β’ Account: [which test account was used] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β STEPS TO REPRODUCE β
β 1. [First step] β
β 2. [Second step] β
β 3. [Continue until bug appears] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β EXPECTED RESULT β
β [What should have happened] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ACTUAL RESULT β
β [What actually happened] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ATTACHMENTS β
β β’ Screenshot: [filename or link] β
β β’ Screen Recording: [filename or link] β
β β’ Console Errors: [paste any browser console errors] β
β β’ Network Errors: [paste any failed API calls] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ADDITIONAL CONTEXT β
β β’ Reproducibility: [Always | Sometimes | Rarely | Once] β
β β’ Workaround: [Is there a way to work around this?] β
β β’ Related Bugs: [Any similar bugs?] β
β β’ Notes: [Any other relevant information] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Severity Definitionsβ
| Severity | Definition | Response Time |
|---|---|---|
| Critical | System unusable, data loss, security issue | Immediate |
| Major | Feature broken, no workaround, blocks workflow | 24 hours |
| Minor | Feature impaired but workaround exists | Next sprint |
| Trivial | Cosmetic issue, typo, minor UI glitch | Backlog |
How to Capture Evidenceβ
Screenshots:
- Use full-page screenshots when possible
- Highlight the problem area with a red box/arrow
- Include the URL bar in the screenshot
- Name files descriptively:
bug-form-validation-error-2026-01-20.png
Screen Recordings:
- Record the full reproduction steps
- Keep under 2 minutes if possible
- Use tools: Loom, CleanShot X, or built-in OS recording
- Narrate what you're doing (optional but helpful)
Console Errors:
- Open DevTools (F12 or Cmd+Option+I)
- Go to Console tab
- Filter by Errors
- Copy the full error message including stack trace
Network Errors:
- Open DevTools β Network tab
- Reproduce the bug
- Look for red (failed) requests
- Right-click β Copy β Copy as cURL (for API issues)
User Journeysβ
Journey Map Overviewβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β NETPAD USER JOURNEY MAP β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Signup βββββΆβ Create βββββΆβ Build βββββΆβ Publish β β
β β Login β β Org β β Form β β Form β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β β β β
β β βΌ βΌ β
β β ββββββββββββ ββββββββββββ β
β β β Build β β View β β
β β β Workflow β β Data β β
β β ββββββββββββ ββββββββββββ β
β β β β
β βΌ βΌ β
β ββββββββββββ ββββββββββββ β
β β Invite β β Test β β
β β Team β β Workflow β β
β ββββββββββββ ββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
UJ-001: New User Onboardingβ
Journey Description: A new user signs up, creates their first organization, and explores the dashboard.
Personas: First-time user, Developer, IT Manager
Priority: P0 - Critical
TC-ONB-001: Email Signup Flowβ
| Field | Value |
|---|---|
| Module | Authentication |
| Priority | P0 - Critical |
| Estimated Time | 5 minutes |
Preconditions:
- User has not signed up before
- User has access to email for verification
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to https://app.netpad.io | Landing page loads, "Get Started" button visible | β |
| 2 | Click "Get Started" or "Sign Up" | Signup form appears with email, password fields | β |
| 3 | Enter valid email: testuser+[timestamp]@example.com | Email field accepts input | β |
| 4 | Enter password: TestPass123! | Password field shows dots, strength indicator shows "Strong" | β |
| 5 | Click "Create Account" | Loading indicator appears, then redirects to verification page | β |
| 6 | Check email inbox | Verification email received within 2 minutes | β |
| 7 | Click verification link in email | Browser opens, shows "Email Verified" success message | β |
| 8 | Observe redirect | Automatically redirected to onboarding or dashboard | β |
Edge Cases to Test:
- Invalid email format (missing @, no domain)
- Weak password (less than 8 chars, no special chars)
- Already registered email
- Expired verification link (wait 24+ hours)
- Clicking verification link twice
TC-ONB-002: Organization Creationβ
| Field | Value |
|---|---|
| Module | Organizations |
| Priority | P0 - Critical |
| Estimated Time | 3 minutes |
Preconditions:
- User is logged in
- User has no existing organizations (new account)
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Observe onboarding flow | "Create Your Organization" step appears | β |
| 2 | Enter organization name: [TEST] My Company | Name field accepts input | β |
| 3 | Enter slug: test-my-company | Slug auto-generates from name or accepts custom input | β |
| 4 | Select industry (optional) | Dropdown shows industry options | β |
| 5 | Click "Create Organization" | Loading indicator, then success message | β |
| 6 | Observe dashboard | Dashboard loads with organization name in header | β |
| 7 | Check sidebar navigation | Projects, Forms, Workflows, Data sections visible | β |
Edge Cases to Test:
- Organization name with special characters
- Duplicate organization slug
- Very long organization name (100+ characters)
- Empty organization name (validation)
TC-ONB-003: First Project Creationβ
| Field | Value |
|---|---|
| Module | Projects |
| Priority | P1 - High |
| Estimated Time | 2 minutes |
Preconditions:
- User is logged in
- Organization exists
- No projects exist yet
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Click "Projects" in sidebar | Projects list page loads (empty state) | β |
| 2 | Click "Create Project" button | Project creation modal/form appears | β |
| 3 | Enter project name: [TEST] Development | Name field accepts input | β |
| 4 | Enter description: Testing environment | Description field accepts input | β |
| 5 | Click "Create" | Project created, redirected to project view | β |
| 6 | Verify project appears in sidebar | Project name visible in navigation | β |
UJ-002: Form Builder Journeyβ
Journey Description: User creates a form from scratch using the visual form builder, adds various field types, configures validation and conditional logic, then previews and saves.
Personas: Developer, IT Manager, Business User
Priority: P0 - Critical
TC-FRM-001: Create New Form (Blank)β
| Field | Value |
|---|---|
| Module | Forms |
| Priority | P0 - Critical |
| Estimated Time | 5 minutes |
Preconditions:
- User is logged in
- Organization and Project exist
- User is in a Project context
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Click "Forms" in sidebar | Forms list page loads | β |
| 2 | Click "Create Form" button | Form creation options appear | β |
| 3 | Select "Blank Form" option | Form builder opens with empty canvas | β |
| 4 | Enter form name: [TEST] Contact Form | Name field in header accepts input | β |
| 5 | Observe form builder UI | Left panel shows field types, center shows canvas, right shows properties | β |
| 6 | Click "Save" | Form saved, success toast appears | β |
| 7 | Refresh page | Form reloads with saved name | β |
TC-FRM-002: Add Basic Field Typesβ
| Field | Value |
|---|---|
| Module | Forms |
| Priority | P0 - Critical |
| Estimated Time | 10 minutes |
Preconditions:
- Blank form is open in form builder
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Drag "Short Text" field to canvas | Field appears on canvas with default label | β |
| 2 | Click on the field | Properties panel shows field settings | β |
| 3 | Change label to Full Name | Label updates on canvas in real-time | β |
| 4 | Change path to full_name | Path field accepts valid input | β |
| 5 | Toggle "Required" on | Required indicator (*) appears on field | β |
| 6 | Add placeholder: Enter your full name | Placeholder shows in field preview | β |
| 7 | Drag "Email" field to canvas | Email field appears below first field | β |
| 8 | Configure email field (label: Email Address, path: email) | Field configured correctly | β |
| 9 | Drag "Long Text" field to canvas | Long text (textarea) field appears | β |
| 10 | Configure (label: Message, path: message) | Field configured correctly | β |
| 11 | Click "Save" | All fields saved | β |
| 12 | Click "Preview" | Preview modal shows form with all 3 fields | β |
TC-FRM-003: Add Selection Field Typesβ
| Field | Value |
|---|---|
| Module | Forms |
| Priority | P1 - High |
| Estimated Time | 10 minutes |
Preconditions:
- Form is open in form builder
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Drag "Dropdown" field to canvas | Dropdown field appears | β |
| 2 | Set label: Department | Label updates | β |
| 3 | Click "Add Option" | New option row appears | β |
| 4 | Add options: Sales, Engineering, Marketing, Support | All options added and visible | β |
| 5 | Preview form | Dropdown shows all 4 options | β |
| 6 | Drag "Radio" field to canvas | Radio button group appears | β |
| 7 | Set label: Priority | Label updates | β |
| 8 | Add options: Low, Medium, High, Critical | Radio options visible | β |
| 9 | Drag "Checkbox" field to canvas | Checkbox group appears | β |
| 10 | Set label: Interests | Label updates | β |
| 11 | Add options: Product Updates, Newsletter, Events | Checkbox options visible | β |
| 12 | Set "Allow multiple" to true | Multiple selection enabled | β |
| 13 | Save and Preview | All selection fields work correctly | β |
TC-FRM-004: Configure Conditional Logicβ
| Field | Value |
|---|---|
| Module | Forms |
| Priority | P1 - High |
| Estimated Time | 15 minutes |
Preconditions:
- Form exists with a dropdown field (e.g., "Department")
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Add new Short Text field: Manager Name | Field added | β |
| 2 | Click on "Manager Name" field | Properties panel opens | β |
| 3 | Scroll to "Conditional Logic" section | Conditional logic options visible | β |
| 4 | Toggle "Enable Conditional Logic" on | Condition builder appears | β |
| 5 | Set action: Show this field | Action selected | β |
| 6 | Set condition: Department equals Engineering | Condition configured | β |
| 7 | Save form | Form saved | β |
| 8 | Open Preview | Preview modal opens | β |
| 9 | Verify "Manager Name" is hidden initially | Field not visible | β |
| 10 | Select "Engineering" from Department dropdown | "Manager Name" field appears | β |
| 11 | Select "Sales" from Department dropdown | "Manager Name" field hides | β |
| 12 | Test with all department options | Field shows only for Engineering | β |
Edge Cases to Test:
- Multiple conditions (AND logic)
- Multiple conditions (OR logic)
- Nested conditions (condition depends on conditional field)
- Condition on required field (validation behavior)
TC-FRM-005: Configure Field Validationβ
| Field | Value |
|---|---|
| Module | Forms |
| Priority | P1 - High |
| Estimated Time | 10 minutes |
Preconditions:
- Form is open in form builder with at least one text field
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Add Number field: Age | Number field added | β |
| 2 | Open field properties | Properties panel shows | β |
| 3 | Set minimum value: 18 | Minimum configured | β |
| 4 | Set maximum value: 120 | Maximum configured | β |
| 5 | Set custom error message: Age must be between 18 and 120 | Message saved | β |
| 6 | Add Short Text field: Username | Text field added | β |
| 7 | Set minimum length: 3 | Min length configured | β |
| 8 | Set maximum length: 20 | Max length configured | β |
| 9 | Set pattern: ^[a-zA-Z0-9_]+$ | Regex pattern configured | β |
| 10 | Save and Preview | Preview opens | β |
| 11 | Enter age: 15, try to submit | Validation error shows | β |
| 12 | Enter age: 25, try to submit | Validation passes | β |
| 13 | Enter username: ab, try to submit | "Too short" error shows | β |
| 14 | Enter username: user@name, try to submit | Pattern error shows | β |
| 15 | Enter username: valid_user, try to submit | Validation passes | β |
TC-FRM-006: Create Form from Templateβ
| Field | Value |
|---|---|
| Module | Forms |
| Priority | P1 - High |
| Estimated Time | 5 minutes |
Preconditions:
- User is logged in with organization/project
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to Forms β Create Form | Creation options appear | β |
| 2 | Select "Use Template" | Template gallery opens | β |
| 3 | Browse template categories | Categories visible: Business, Events, Feedback, etc. | β |
| 4 | Click on "IT Support Request" template | Template preview shows | β |
| 5 | Review template fields | All fields listed with descriptions | β |
| 6 | Click "Use This Template" | Form builder opens with template fields | β |
| 7 | Verify all fields loaded | 5+ fields from template present | β |
| 8 | Verify conditional logic loaded | Template conditions working | β |
| 9 | Customize form name: [TEST] IT Support | Name changed | β |
| 10 | Save form | Form saved successfully | β |
TC-FRM-007: Multi-Page Form Configurationβ
| Field | Value |
|---|---|
| Module | Forms |
| Priority | P2 - Medium |
| Estimated Time | 15 minutes |
Preconditions:
- Form with 6+ fields exists
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Open form in builder | Form builder loads | β |
| 2 | Click "Form Settings" or gear icon | Settings panel opens | β |
| 3 | Enable "Multi-Page Form" | Page configuration options appear | β |
| 4 | Click "Add Page" | Second page created | β |
| 5 | Set Page 1 title: Personal Information | Title saved | β |
| 6 | Set Page 2 title: Contact Details | Title saved | β |
| 7 | Drag fields to assign to pages | Fields organized by page | β |
| 8 | Save and Preview | Multi-page preview opens | β |
| 9 | Fill Page 1 fields | Fields accept input | β |
| 10 | Click "Next" | Page 2 loads | β |
| 11 | Click "Previous" | Page 1 loads with data preserved | β |
| 12 | Complete all pages and submit | Submission successful | β |
UJ-003: Form Publishing & Submissionβ
Journey Description: User publishes a form, shares it with end-users, and receives submissions.
Personas: Form Creator, End User (submitter)
Priority: P0 - Critical
TC-PUB-001: Publish Formβ
| Field | Value |
|---|---|
| Module | Forms / Publishing |
| Priority | P0 - Critical |
| Estimated Time | 5 minutes |
Preconditions:
- Form exists with at least 2 fields
- Form is saved
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Open form in builder | Form loads | β |
| 2 | Click "Publish" button | Publishing modal/panel opens | β |
| 3 | Review publishing options | Standalone URL, Embed Code visible | β |
| 4 | Toggle "Published" to ON | Form status changes to published | β |
| 5 | Copy standalone URL | URL copied to clipboard | β |
| 6 | Open URL in new incognito window | Public form loads without login | β |
| 7 | Verify form displays correctly | All fields visible and functional | β |
| 8 | Verify branding/theme applied | Form matches configured theme | β |
TC-PUB-002: Form Submission (End User)β
| Field | Value |
|---|---|
| Module | Forms / Submission |
| Priority | P0 - Critical |
| Estimated Time | 5 minutes |
Preconditions:
- Form is published
- Testing in incognito/logged-out state
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to published form URL | Form loads | β |
| 2 | Fill in required field: Name = John Test | Field accepts input | β |
| 3 | Fill in required field: Email = john@test.com | Field accepts input | β |
| 4 | Fill in optional fields | Fields accept input | β |
| 5 | Click "Submit" button | Loading indicator appears | β |
| 6 | Observe success state | Success message displays | β |
| 7 | Verify redirect (if configured) | Redirects to thank you page or URL | β |
| 8 | Try to submit again | Either allowed or "already submitted" based on config | β |
Edge Cases to Test:
- Submit with missing required field
- Submit with invalid email format
- Submit with file upload (if applicable)
- Submit on slow connection (throttle network)
- Submit and immediately close browser (data loss?)
TC-PUB-003: View Submissions (Admin)β
| Field | Value |
|---|---|
| Module | Data Management |
| Priority | P0 - Critical |
| Estimated Time | 5 minutes |
Preconditions:
- Form has at least 1 submission
- User is logged in as form owner/admin
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to form in dashboard | Form overview shows | β |
| 2 | Click "Submissions" or "Data" tab | Submissions list loads | β |
| 3 | Verify submission from TC-PUB-002 appears | Submission visible in list | β |
| 4 | Click on submission row | Submission detail view opens | β |
| 5 | Verify all submitted data shows | Name, email, all fields present | β |
| 6 | Verify timestamp is correct | Submission time within expected range | β |
| 7 | Test export to CSV | CSV downloads with correct data | β |
| 8 | Test export to JSON | JSON downloads with correct structure | β |
UJ-004: Workflow Builder Journeyβ
Journey Description: User creates an automated workflow triggered by form submission that sends notifications and saves data.
Personas: Developer, IT Manager
Priority: P0 - Critical
TC-WFL-001: Create Form-to-Email Workflowβ
| Field | Value |
|---|---|
| Module | Workflows |
| Priority | P0 - Critical |
| Estimated Time | 15 minutes |
Preconditions:
- Published form exists with submissions enabled
- User is logged in
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to Workflows | Workflow list page loads | β |
| 2 | Click "Create Workflow" | Workflow creation options appear | β |
| 3 | Select "Blank Workflow" | Workflow editor opens with empty canvas | β |
| 4 | Enter workflow name: [TEST] Contact Form Notifications | Name saved | β |
| 5 | Drag "Form Trigger" node to canvas | Trigger node appears | β |
| 6 | Click on trigger node | Properties panel opens | β |
| 7 | Select form: [TEST] Contact Form | Form connected to trigger | β |
| 8 | Drag "Send Email" node to canvas | Email node appears | β |
| 9 | Connect trigger output to email input | Edge drawn between nodes | β |
| 10 | Click on email node | Email properties panel opens | β |
| 11 | Set "To": admin@test.com | Recipient configured | β |
| 12 | Set "Subject": New Contact: {{trigger.data.name}} | Subject with template variable | β |
| 13 | Set "Body": Email: {{trigger.data.email}}\nMessage: {{trigger.data.message}} | Body with template variables | β |
| 14 | Click "Save" | Workflow saved | β |
| 15 | Toggle "Active" to ON | Workflow activated | β |
TC-WFL-002: Test Workflow Executionβ
| Field | Value |
|---|---|
| Module | Workflows |
| Priority | P0 - Critical |
| Estimated Time | 10 minutes |
Preconditions:
- Workflow from TC-WFL-001 is active
- Email service is configured
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Open published form in new window | Form loads | β |
| 2 | Submit form with test data | Submission successful | β |
| 3 | Return to workflow in dashboard | Workflow page loads | β |
| 4 | Click "Execution History" or "Logs" | Execution log opens | β |
| 5 | Verify new execution appears | Execution logged with timestamp | β |
| 6 | Click on execution | Execution detail shows | β |
| 7 | Verify trigger data captured | Form submission data visible | β |
| 8 | Verify email node executed | Email node shows "Success" | β |
| 9 | Check email inbox (admin@test.com) | Email received with correct data | β |
| 10 | Verify template variables replaced | Subject and body show actual values, not {{}} | β |
TC-WFL-003: Conditional Workflow Logicβ
| Field | Value |
|---|---|
| Module | Workflows |
| Priority | P1 - High |
| Estimated Time | 20 minutes |
Preconditions:
- Form exists with "Priority" field (Low/Medium/High/Critical options)
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Create new workflow | Workflow editor opens | β |
| 2 | Add Form Trigger β connect to form | Trigger configured | β |
| 3 | Drag "Condition" node to canvas | Condition node appears | β |
| 4 | Connect trigger to condition | Edge created | β |
| 5 | Configure condition: trigger.data.priority equals Critical | Condition set | β |
| 6 | Add two "Send Email" nodes | Two email nodes on canvas | β |
| 7 | Connect condition "True" output β first email (urgent@team.com) | Edge created | β |
| 8 | Connect condition "False" output β second email (support@team.com) | Edge created | β |
| 9 | Save and activate workflow | Workflow active | β |
| 10 | Submit form with Priority = "Critical" | Submission successful | β |
| 11 | Verify urgent@team.com received email | Email received | β |
| 12 | Verify support@team.com did NOT receive email | No email | β |
| 13 | Submit form with Priority = "Low" | Submission successful | β |
| 14 | Verify support@team.com received email | Email received | β |
| 15 | Verify urgent@team.com did NOT receive email | No email | β |
UJ-005: Data Management Journeyβ
Journey Description: User connects a MongoDB database, browses data, and manages connections securely.
Personas: Developer, Database Admin
Priority: P1 - High
TC-DAT-001: Add MongoDB Connectionβ
| Field | Value |
|---|---|
| Module | Data Management |
| Priority | P1 - High |
| Estimated Time | 10 minutes |
Preconditions:
- User has MongoDB Atlas connection string
- User is logged in as Admin or Owner
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to Settings β Connection Vault | Connection vault page loads | β |
| 2 | Click "Add Connection" | Connection form opens | β |
| 3 | Enter connection name: [TEST] Atlas Dev | Name accepted | β |
| 4 | Paste MongoDB connection string | String accepted (hidden/masked) | β |
| 5 | Click "Test Connection" | Connection test runs | β |
| 6 | Verify "Connection Successful" message | Success message appears | β |
| 7 | Click "Save" | Connection saved | β |
| 8 | Verify connection appears in list | Connection visible with status | β |
| 9 | Verify connection string is masked | String shows as mongodb+srv://*** | β |
Edge Cases to Test:
- Invalid connection string format
- Valid format but wrong credentials
- Connection timeout (unreachable server)
- Connection with special characters in password
TC-DAT-002: Browse MongoDB Dataβ
| Field | Value |
|---|---|
| Module | Data Management |
| Priority | P1 - High |
| Estimated Time | 10 minutes |
Preconditions:
- MongoDB connection is configured
- Database has at least one collection with data
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to Data Browser | Data browser loads | β |
| 2 | Select connection from dropdown | Databases list loads | β |
| 3 | Expand database | Collections list appears | β |
| 4 | Click on collection | Documents load in table view | β |
| 5 | Verify document data displays | Fields and values visible | β |
| 6 | Click on a document row | Document detail view opens | β |
| 7 | Verify nested objects display | Nested data expandable/visible | β |
| 8 | Use filter: {"status": "active"} | Filtered results show | β |
| 9 | Use sort: {"createdAt": -1} | Results sorted descending | β |
| 10 | Paginate through results | Pagination works correctly | β |
UJ-006: AI & Conversational Forms Journeyβ
Journey Description: User creates an AI-powered conversational form and tests the chat-based data collection experience.
Personas: Developer, Product Manager
Priority: P2 - Medium
TC-AI-001: Generate Form with AIβ
| Field | Value |
|---|---|
| Module | AI |
| Priority | P2 - Medium |
| Estimated Time | 10 minutes |
Preconditions:
- User is logged in
- AI features are enabled for the account
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to Forms β Create Form | Creation options appear | β |
| 2 | Select "Generate with AI" | AI generation interface opens | β |
| 3 | Enter prompt: Create a job application form with personal info, work history, and resume upload | Prompt accepted | β |
| 4 | Click "Generate" | Loading indicator, AI processing | β |
| 5 | Wait for generation (may take 10-30 seconds) | Form fields generated | β |
| 6 | Review generated fields | Relevant fields present (name, email, experience, file upload) | β |
| 7 | Verify field types are appropriate | Email field for email, file upload for resume, etc. | β |
| 8 | Click "Use This Form" or "Accept" | Form loaded into builder | β |
| 9 | Customize if needed | Fields editable | β |
| 10 | Save form | Form saved | β |
TC-AI-002: Conversational Form Experienceβ
| Field | Value |
|---|---|
| Module | Conversational Forms |
| Priority | P2 - Medium |
| Estimated Time | 15 minutes |
Preconditions:
- Conversational form template exists
- AI service is configured
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to form with conversational mode | Form loads | β |
| 2 | Click "Preview as Conversational" | Chat interface opens | β |
| 3 | Observe initial AI greeting | AI introduces itself and purpose | β |
| 4 | Type: Hi, I need help with a software issue | AI responds and asks clarifying question | β |
| 5 | Answer AI's question | AI acknowledges and asks next question | β |
| 6 | Continue conversation until all data collected | AI guides through all required fields | β |
| 7 | Verify AI summarizes collected information | Summary presented | β |
| 8 | Confirm submission | Submission successful | β |
| 9 | View submission in data browser | All fields populated from conversation | β |
Edge Cases to Test:
- User provides incomplete information
- User goes off-topic
- User provides conflicting information
- User asks to change previous answer
UJ-007: Team Collaboration Journeyβ
Journey Description: Organization owner invites team members with different roles and verifies permission boundaries.
Personas: Organization Owner, Team Admin, Team Member
Priority: P1 - High
TC-TEAM-001: Invite Team Memberβ
| Field | Value |
|---|---|
| Module | Team Management |
| Priority | P1 - High |
| Estimated Time | 10 minutes |
Preconditions:
- User is logged in as Organization Owner
- Have access to a second email for the invitee
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Navigate to Settings β Team | Team management page loads | β |
| 2 | Click "Invite Member" | Invitation form opens | β |
| 3 | Enter email: newmember@test.com | Email accepted | β |
| 4 | Select role: Member | Role selected | β |
| 5 | Click "Send Invitation" | Invitation sent, success message | β |
| 6 | Verify pending invitation appears in list | Invitation shown with "Pending" status | β |
| 7 | Check invitee's email inbox | Invitation email received | β |
| 8 | Click invitation link (as invitee) | Invitation acceptance page loads | β |
| 9 | Create account or sign in (as invitee) | Account created/linked | β |
| 10 | Verify invitee sees organization | Organization appears in invitee's dashboard | β |
| 11 | Verify invitee has Member permissions | Can view but not delete forms | β |
TC-TEAM-002: Role-Based Access Controlβ
| Field | Value |
|---|---|
| Module | Permissions |
| Priority | P1 - High |
| Estimated Time | 15 minutes |
Preconditions:
- Team has members with different roles (Owner, Admin, Member, Viewer)
Test Steps:
| Step | Action | Expected Result | Status |
|---|---|---|---|
| 1 | Log in as Viewer | Dashboard loads | β |
| 2 | Navigate to Forms | Forms list visible | β |
| 3 | Try to create new form | "Create" button disabled or hidden | β |
| 4 | Try to edit existing form | "Edit" button disabled or hidden | β |
| 5 | Verify can view form submissions | Submissions readable | β |
| 6 | Log in as Member | Dashboard loads | β |
| 7 | Create new form | Form created successfully | β |
| 8 | Try to delete form created by Owner | Delete fails or button hidden | β |
| 9 | Log in as Admin | Dashboard loads | β |
| 10 | Delete form created by Member | Delete successful | β |
| 11 | Navigate to Team settings | Team settings accessible | β |
| 12 | Log in as Owner | Dashboard loads | β |
| 13 | Access Billing settings | Billing accessible (Admin cannot) | β |
Field Type Testing Matrixβ
Use this matrix to ensure all 30+ field types are tested:
| Field Type | Add to Form | Configure | Validate | Submit | View Data | Notes |
|---|---|---|---|---|---|---|
| Short Text | β | β | β | β | β | |
| Long Text | β | β | β | β | β | |
| β | β | β | β | β | ||
| Phone | β | β | β | β | β | |
| URL | β | β | β | β | β | |
| Number | β | β | β | β | β | |
| Currency | β | β | β | β | β | |
| Percentage | β | β | β | β | β | |
| Date | β | β | β | β | β | |
| Time | β | β | β | β | β | |
| DateTime | β | β | β | β | β | |
| Dropdown | β | β | β | β | β | |
| Radio | β | β | β | β | β | |
| Checkbox | β | β | β | β | β | |
| Toggle | β | β | β | β | β | |
| Rating | β | β | β | β | β | |
| Slider | β | β | β | β | β | |
| File Upload | β | β | β | β | β | |
| Image Upload | β | β | β | β | β | |
| Signature | β | β | β | β | β | |
| Rich Text | β | β | β | β | β | |
| Hidden | β | β | β | β | β | |
| Computed | β | β | β | β | β | |
| Address | β | β | β | β | β | |
| Name (composite) | β | β | β | β | β | |
| Matrix | β | β | β | β | β | |
| Ranking | β | β | β | β | β | |
| NPS | β | β | β | β | β | |
| Legal/Consent | β | β | β | β | β | |
| Section Header | β | β | β | β | β | |
| Divider | β | β | β | β | β |
Workflow Node Testing Matrixβ
| Node Type | Add to Canvas | Configure | Connect | Execute | View Logs | Notes |
|---|---|---|---|---|---|---|
| Triggers | ||||||
| Form Trigger | β | β | β | β | β | |
| Webhook Trigger | β | β | β | β | β | |
| Schedule Trigger | β | β | β | β | β | |
| Manual Trigger | β | β | β | β | β | |
| Logic | ||||||
| Condition | β | β | β | β | β | |
| Switch | β | β | β | β | β | |
| Loop | β | β | β | β | β | |
| Delay | β | β | β | β | β | |
| Data | ||||||
| Transform | β | β | β | β | β | |
| Filter | β | β | β | β | β | |
| Aggregate | β | β | β | β | β | |
| Set Variable | β | β | β | β | β | |
| MongoDB | ||||||
| Find | β | β | β | β | β | |
| Insert | β | β | β | β | β | |
| Update | β | β | β | β | β | |
| Delete | β | β | β | β | β | |
| Aggregate | β | β | β | β | β | |
| Actions | ||||||
| Send Email | β | β | β | β | β | |
| HTTP Request | β | β | β | β | β | |
| Slack Message | β | β | β | β | β | |
| AI | ||||||
| AI Generate | β | β | β | β | β | |
| AI Classify | β | β | β | β | β | |
| AI Extract | β | β | β | β | β |
Testing Checklist Templatesβ
Pre-Release Checklistβ
Use this checklist before any production release:
Critical Path (Must Pass):
- User can sign up and create organization
- User can create form with basic fields
- User can publish form
- End user can submit form
- Admin can view submissions
- Workflow triggers on form submission
- Email notifications send correctly
Regression (Should Pass):
- All 30+ field types render correctly
- Conditional logic shows/hides fields
- Validation errors display properly
- Multi-page forms navigate correctly
- File uploads complete successfully
- Form themes apply correctly
- Mobile responsive layout works
Integration (Should Pass):
- MongoDB connections work
- Webhook triggers fire
- Scheduled workflows run
- Slack integration sends messages
- CSV/JSON export works
Browser Compatibility Checklistβ
| Browser | Version | Forms | Workflows | Data | AI |
|---|---|---|---|---|---|
| Chrome | Latest | β | β | β | β |
| Chrome | Latest-1 | β | β | β | β |
| Firefox | Latest | β | β | β | β |
| Safari | Latest | β | β | β | β |
| Edge | Latest | β | β | β | β |
| Mobile Safari | iOS 17 | β | β | β | β |
| Mobile Chrome | Android 14 | β | β | β | β |
Performance Checklistβ
| Scenario | Target | Actual | Status |
|---|---|---|---|
| Form builder load time | < 3s | ___s | β |
| Form preview load time | < 2s | ___s | β |
| Form submission time | < 1s | ___s | β |
| Workflow editor load time | < 3s | ___s | β |
| Data browser query (1000 docs) | < 2s | ___s | β |
| Dashboard initial load | < 3s | ___s | β |
Appendixβ
Glossaryβ
| Term | Definition |
|---|---|
| Form | A collection of fields used to collect data from users |
| Field | An individual input element in a form (text, dropdown, etc.) |
| Workflow | An automated sequence of actions triggered by events |
| Node | A single step in a workflow (trigger, action, condition) |
| Edge | A connection between two nodes in a workflow |
| Submission | Data entered by a user when completing a form |
| Conditional Logic | Rules that show/hide fields based on other field values |
| Template | A pre-built form or workflow configuration |
Contact & Escalationβ
| Role | Name | Contact | Escalate When |
|---|---|---|---|
| QA Lead | [Name] | [email] | Test blockers, environment issues |
| Dev Lead | [Name] | [email] | Critical bugs, technical questions |
| Product | [Name] | [email] | Requirements unclear, feature questions |
Document generated for NetPad QA Team