upskill-event-manager/docs/automatic-page-creation-plan.md
bengizmo 37f7b426b6 feat: Implement auto page creation & fix login E2E tests
Implements automatic creation of required plugin pages (Community Login,
Trainer Registration, Trainer Dashboard) upon plugin activation. This
addresses E2E test failures caused by missing pages in the test
environment.

- Adds activation hook in `hvac-community-events.php` to call
  `hvac_ce_create_required_pages`.
- The callback function checks for existing pages by slug and creates
  them using `wp_insert_post` if missing. Includes debug logging.

Also fixes issues identified during E2E test debugging:
- Corrects fatal error in `includes/community/class-login-handler.php`
  by replacing undefined constant `HVAC_COMMUNITY_EVENTS_PATH` with
  `HVAC_CE_PLUGIN_DIR`.
- Updates `tests/e2e/tests/login.spec.ts` to use the correct selector
  `#wp-submit` for the login form submit button instead of
  `button[type="submit"]`.

Documentation updates:
- Adds `docs/automatic-page-creation-plan.md`.
- Updates `README.md` regarding automatic page creation.
- Updates Memory Bank files (`decisionLog.md`, `progress.md`,
  `activeContext.md`).

Note: Activation hook logging did not appear during WP-CLI activation,
requiring further investigation if page creation issues persist. E2E
test confirmation pending.
2025-03-28 17:18:21 -03:00

98 lines
No EOL
5.7 KiB
Markdown

# Automatic Page Creation Plan
**Date:** 2025-03-28
**Status:** Approved
## 1. Goal
Implement automatic creation of required plugin pages (Login, Registration, Dashboard) upon plugin activation. This ensures a consistent setup across environments, simplifies the user experience, and resolves E2E test failures caused by missing pages (specifically the Community Login page).
## 2. Background
The initial task was to fix failing E2E tests for the Community Login page. Investigation revealed:
* The tests targeted `/community-login/`, but this page was not guaranteed to exist or contain the `[hvac_community_login]` shortcode in the development environment restored from backup.
* Searches confirmed the plugin did not include logic (`wp_insert_post`) to automatically create this or other required pages.
* Manual page creation is possible but less reliable and adds setup steps.
* The decision was made to add functionality to the plugin to create necessary pages automatically upon activation.
## 3. Required Pages & Shortcodes (Phase 1)
The following pages will be created automatically if they do not already exist with the specified slug:
| Feature | Title | Slug | Shortcode / Content | Notes |
| :------------------- | :--------------------- | :--------------------- | :---------------------------------------------------------------------- | :----------------------------------------- |
| Community Login | Community Login | `community-login` | `<!-- wp:shortcode -->[hvac_community_login]<!-- /wp:shortcode -->` | Shortcode confirmed. |
| Trainer Registration | Trainer Registration | `trainer-registration` | `<!-- wp:shortcode -->[hvac_trainer_registration]<!-- /wp:shortcode -->` | Shortcode confirmed. |
| Trainer Dashboard | Trainer Dashboard | `hvac-dashboard` | *(Empty)* | Relies on template redirect or assignment. |
*(Phase 2 pages like Email Attendees, Order Summary can be added later once their shortcodes/implementation details are confirmed).*
## 4. Implementation Plan
1. **Activation Hook:** Use `register_activation_hook` in the main plugin file (`hvac-community-events.php`) to register a callback function that runs only when the plugin is activated.
2. **Callback Function (`hvac_ce_create_required_pages`):**
* Define an array containing the details for the required pages (Title, Slug, Content) as shown in the table above.
* Iterate through this array.
* For each page definition:
* Check if a page with the specified `slug` already exists using `get_page_by_path( $slug, OBJECT, 'page' )`.
* **If the page does NOT exist:**
* Prepare the post data array for `wp_insert_post()`:
* `post_title`: From the page definition array.
* `post_name` (slug): From the page definition array key.
* `post_content`: From the page definition array (using Gutenberg block format for shortcodes).
* `post_status`: `'publish'`.
* `post_type`: `'page'`.
* `comment_status`: `'closed'`.
* `ping_status`: `'closed'`.
* Call `wp_insert_post( $post_data )` to create the page.
* *(Optional but Recommended):* Store the returned `$page_id` in a WordPress option (e.g., `hvac_community_pages` array) keyed by the feature (e.g., 'login', 'registration') for potential future use (like cleanup on deactivation or easy lookup).
* **If the page DOES exist:** Do nothing to avoid duplicates or overwriting user changes.
## 5. Testing Strategy
1. **Manual Testing:**
* Ensure the plugin is deactivated.
* Delete any existing pages with the slugs `community-login`, `trainer-registration`, `hvac-dashboard`.
* Activate the plugin.
* Verify in WP Admin -> Pages that the three pages now exist with the correct titles, slugs, and content (shortcodes or empty).
* Verify the pages use the default theme template and are editable with the block editor.
2. **E2E Testing:**
* Run the login test suite: `./bin/run-tests.sh --login`
* Confirm the tests now pass as the `/community-login/` page exists and contains the shortcode.
3. **Unit/Integration Testing (Optional but Recommended):**
* Add tests for the `hvac_ce_create_required_pages` function.
* Mock `get_page_by_path` and `wp_insert_post`.
* Verify `wp_insert_post` is called with the correct data when a page is missing.
* Verify `wp_insert_post` is *not* called when `get_page_by_path` finds an existing page.
## 6. Documentation Updates
* Update `memory-bank/decisionLog.md`: Add decision for automatic page creation.
* Update `memory-bank/progress.md`: Add task for implementing this feature.
* Update `wordpress-dev/README.md`: Note that required pages are now created automatically on activation.
## 7. Process Flow Diagram
```mermaid
graph TD
A[Plugin Activation] --> B{Run Activation Callback};
B --> C{Loop Through Required Pages (Login, Register, Dashboard...)};
C --> D{Page Exists? (Check by Slug)};
D -- No --> E[Prepare Page Data (Title, Slug, Shortcode Block)];
D -- Yes --> C;
E --> F[Create Page via wp_insert_post()];
F --> G{Store Page ID? (Optional)};
G -- Yes --> H[Update WP Option with Page ID];
G -- No --> C;
H --> C;
C -- All Pages Processed --> I[Activation Complete];
subgraph "Activation Logic"
B
C
D
E
F
G
H
end