docs: update Memory Bank and implementation plan with development environment progress
- Update activeContext.md with current focus and status - Add development environment decisions to decisionLog.md - Update progress.md with completed tasks - Add development patterns to systemPatterns.md - Update productContext.md with environment details - Add Development Environment Setup section to implementation plan"
This commit is contained in:
parent
1d7fe2e071
commit
44b8d62722
13 changed files with 700 additions and 33 deletions
229
docs/design_guidance.md
Normal file
229
docs/design_guidance.md
Normal file
|
|
@ -0,0 +1,229 @@
|
|||
# Design Guidance for HVAC Community Events
|
||||
|
||||
This document provides design guidance for implementing the HVAC Community Events Management System based on the design references and WordPress theme integration requirements.
|
||||
|
||||
## Design Reference Analysis
|
||||
|
||||
The design references in the `design_references/` directory provide valuable insights into the desired user interface and experience. These references should be used as guides for implementing the various pages of the plugin.
|
||||
|
||||
## Core UI Elements and Patterns
|
||||
|
||||
### 1. Navigation and Header Elements
|
||||
|
||||
- **Global Header**: The site uses the standard Upskill HVAC header with main navigation
|
||||
- **Sub-navigation**: Pages have contextual navigation with clear action buttons
|
||||
- **Breadcrumbs**: Event Summary page includes breadcrumb navigation (Trainer Home > Event Summary)
|
||||
- **Action Buttons**: Consistently styled blue buttons with icons for primary actions
|
||||
|
||||
### 2. Layout Patterns
|
||||
|
||||
- **Card-based Layout**: Information is organized in clean card sections with white backgrounds
|
||||
- **Section Headers**: Clear typographic hierarchy with section titles
|
||||
- **Grid Structure**: Responsive grid layout for statistics cards and information sections
|
||||
- **Table Layout**: Clean tables with clear headers and alternating row colors
|
||||
- **Form Layout**: Well-structured forms with logical grouping and clear labels
|
||||
|
||||
### 3. Visual Elements
|
||||
|
||||
- **Color Scheme**: Light blue page backgrounds with white cards and blue accents
|
||||
- **Typography**: Consistent heading hierarchy and paragraph styling
|
||||
- **Icons**: Used to enhance recognition of statistics and action buttons
|
||||
- **Spacing**: Consistent padding and margin patterns throughout
|
||||
|
||||
## WordPress Theme Integration
|
||||
|
||||
### 1. Leveraging Astra Theme
|
||||
|
||||
The Upskill HVAC site uses a child theme of Astra (4.9.0). To ensure consistency:
|
||||
|
||||
- Use Astra's hook system:
|
||||
- `astra_header_before`/`astra_header_after` for header content
|
||||
- `astra_primary_content_top`/`astra_primary_content_bottom` for main content area
|
||||
- `astra_entry_content_before`/`astra_entry_content_after` for content containers
|
||||
|
||||
- Use Astra's styling classes:
|
||||
- `.ast-container` for main content containers
|
||||
- `.ast-row` for grid layouts
|
||||
- `.ast-col-*` for column structures
|
||||
- `.ast-button` and variants for button styling
|
||||
|
||||
### 2. Essential Blocks and Spectra Pro Integration
|
||||
|
||||
- **Content Blocks**: Use Essential Blocks for advanced content structures when appropriate
|
||||
- **Layout Elements**: Leverage Spectra Pro's advanced layout options for complex page sections
|
||||
- **Component Styling**: Apply Spectra's pre-styled components rather than custom CSS when possible
|
||||
|
||||
### 3. Custom Templates
|
||||
|
||||
When creating custom templates, follow these guidelines:
|
||||
|
||||
1. Start by extending default theme templates:
|
||||
```php
|
||||
// Example template hierarchy
|
||||
get_header();
|
||||
?>
|
||||
<div id="primary" class="ast-container">
|
||||
<main id="main" class="site-main">
|
||||
<!-- Your custom content here -->
|
||||
</main>
|
||||
</div>
|
||||
<?php
|
||||
get_footer();
|
||||
```
|
||||
|
||||
2. Use Astra's content wrappers:
|
||||
```php
|
||||
<div class="ast-container">
|
||||
<div class="ast-row">
|
||||
<div class="ast-col-lg-8">
|
||||
<!-- Main content -->
|
||||
</div>
|
||||
<div class="ast-col-lg-4">
|
||||
<!-- Sidebar content -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
## Page-Specific Implementation Guidelines
|
||||
|
||||
### 1. Trainer Dashboard
|
||||
|
||||
Based on `upskillhvac.com_hce-dashboard_ (4).png`:
|
||||
|
||||
- **Page Structure**:
|
||||
- Top navigation bar with action buttons
|
||||
- "Your Stats" section with 5 stat cards in a responsive grid
|
||||
- "Your Events" section with tabbed filtering and table display
|
||||
|
||||
- **Theme Integration**:
|
||||
```php
|
||||
// Stat cards implementation example
|
||||
echo '<div class="ast-row">';
|
||||
foreach ($stats as $stat) {
|
||||
echo '<div class="ast-col-md-6 ast-col-lg-3">';
|
||||
echo '<div class="hvac-stat-card">';
|
||||
// Card content
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
}
|
||||
echo '</div>';
|
||||
```
|
||||
|
||||
- **Responsive Behavior**:
|
||||
- Statistics cards stack on mobile (1 column)
|
||||
- Table becomes scrollable on smaller screens
|
||||
- Action buttons adapt to mobile layout
|
||||
|
||||
### 2. Event Summary Page
|
||||
|
||||
Based on `upskillhvac.com_hce-event-summary__event_id=1662 (1).png`:
|
||||
|
||||
- **Page Structure**:
|
||||
- Breadcrumb navigation
|
||||
- Event title with action buttons
|
||||
- Event details section with 4 info cards
|
||||
- Event description with formatted sections
|
||||
- Transactions table
|
||||
|
||||
- **Theme Integration**:
|
||||
```php
|
||||
// Event details cards implementation example
|
||||
echo '<div class="ast-row">';
|
||||
echo '<div class="ast-col-md-6 ast-col-lg-3">';
|
||||
echo '<div class="hvac-event-detail-card">';
|
||||
echo '<h4>Date & Time</h4>';
|
||||
// Card content
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
// Repeat for other cards
|
||||
echo '</div>';
|
||||
```
|
||||
|
||||
- **Typography**:
|
||||
- Use theme's heading hierarchy: `<h1>` for event title, `<h2>` for main sections, `<h3>` for subsections
|
||||
- Follow theme's paragraph styling for descriptions
|
||||
|
||||
### 3. Login Page
|
||||
|
||||
Based on `upskillhvac.com_hce-login_.png`:
|
||||
|
||||
- **Form Styling**:
|
||||
- Center-aligned form on a card background
|
||||
- Standard form field spacing
|
||||
- Consistent button styling
|
||||
|
||||
- **Theme Integration**:
|
||||
- Use Astra's form styling classes
|
||||
- Maintain consistent padding and margin with theme
|
||||
|
||||
### 4. Modify Event Page
|
||||
|
||||
Based on `upskillhvac.com_hce-modify-event__event_id=1662.png`:
|
||||
|
||||
- **Form Structure**:
|
||||
- Clearly labeled sections
|
||||
- Logical grouping of related fields
|
||||
- Consistent form element styling
|
||||
|
||||
- **Theme Integration**:
|
||||
- Use theme's form element styling
|
||||
- Follow theme's spacing patterns
|
||||
|
||||
## Responsive Design Guidelines
|
||||
|
||||
1. **Breakpoints**: Use Astra theme's breakpoints:
|
||||
- Mobile: < 544px
|
||||
- Tablet: 544px - 921px
|
||||
- Desktop: > 921px
|
||||
|
||||
2. **Mobile Adaptations**:
|
||||
- Cards stack vertically
|
||||
- Tables become scrollable
|
||||
- Form fields expand to full width
|
||||
- Navigation adapts to mobile patterns
|
||||
|
||||
3. **Testing across Devices**:
|
||||
- Test on multiple screen sizes
|
||||
- Verify theme's responsive behavior is maintained
|
||||
- Ensure tap targets are appropriately sized on mobile
|
||||
|
||||
## Theme Compatibility Testing
|
||||
|
||||
1. **Visual Regression Testing**:
|
||||
- Test across different screen sizes
|
||||
- Compare against design references
|
||||
- Verify consistent spacing and alignment
|
||||
|
||||
2. **Plugin Compatibility**:
|
||||
- Test with all active plugins:
|
||||
- The Events Calendar suite
|
||||
- Spectra Pro
|
||||
- Essential Blocks
|
||||
- Premium Starter Templates
|
||||
|
||||
3. **Performance Testing**:
|
||||
- Check load times with theme integration
|
||||
- Monitor CSS specificity conflicts
|
||||
- Test JavaScript interactions
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **CSS Approach**:
|
||||
- Use theme's CSS variables when available
|
||||
- Avoid overriding theme styles with `!important`
|
||||
- Use the WordPress CSS specificity cascade appropriately
|
||||
- Keep custom CSS minimal and targeted
|
||||
|
||||
2. **JavaScript Integration**:
|
||||
- Follow theme's JavaScript patterns and dependencies
|
||||
- Initialize components after DOM is ready
|
||||
- Use event delegation for dynamically loaded content
|
||||
- Namespace custom JavaScript functions
|
||||
|
||||
3. **Template Organization**:
|
||||
- Keep templates modular and reusable
|
||||
- Use get_template_part() for component reuse
|
||||
- Follow Astra's naming conventions for consistency
|
||||
|
||||
By following these guidelines, the implementation will maintain consistency with the existing WordPress theme while achieving the design goals shown in the reference screenshots.
|
||||
|
|
@ -1,28 +1,15 @@
|
|||
FROM php:7.4-fpm
|
||||
WORKDIR /var/www/html
|
||||
FROM wordpress:6.7.2-php8.1-fpm
|
||||
|
||||
# Install system dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install -y \
|
||||
git \
|
||||
unzip \
|
||||
libpng-dev \
|
||||
libjpeg-dev \
|
||||
libpq-dev \
|
||||
# Install dependencies
|
||||
RUN apt-get update && apt-get install -y \
|
||||
vim \
|
||||
libzip-dev \
|
||||
mariadb-client \
|
||||
&& docker-php-ext-configure gd --with-jpeg \
|
||||
&& docker-php-ext-install -j$(nproc) gd mysqli pdo_mysql zip
|
||||
procps \
|
||||
net-tools \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install Composer
|
||||
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
# Install PHP extensions
|
||||
RUN docker-php-ext-install mysqli pdo pdo_mysql zip
|
||||
|
||||
# Copy composer files first to cache dependencies
|
||||
COPY composer.json composer.lock ./
|
||||
RUN composer install --no-dev --no-scripts --no-autoloader
|
||||
|
||||
# Copy remaining files
|
||||
COPY . .
|
||||
|
||||
# Finish composer setup
|
||||
RUN composer dump-autoload --optimize
|
||||
# Verify PDO MySQL installation
|
||||
RUN php -r "if (!extension_loaded('pdo_mysql')) { exit(1); }"
|
||||
|
|
@ -1,12 +1,13 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Load environment variables
|
||||
if [ ! -f ../.env ]; then
|
||||
if [ ! -f ./.env ]; then
|
||||
echo "Error: .env file not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source ../.env
|
||||
echo "Sourcing .env file from: $(pwd)/.env"
|
||||
source ./.env
|
||||
|
||||
# Colors for output
|
||||
GREEN='\033[0;32m'
|
||||
|
|
@ -19,6 +20,7 @@ RUN_UNIT=false
|
|||
RUN_INTEGRATION=false
|
||||
RUN_E2E=false
|
||||
DEBUG=false
|
||||
TEST_SUITE=""
|
||||
|
||||
# Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
|
|
@ -35,6 +37,11 @@ while [[ $# -gt 0 ]]; do
|
|||
RUN_E2E=true
|
||||
shift
|
||||
;;
|
||||
--login)
|
||||
RUN_E2E=true
|
||||
TEST_SUITE="login"
|
||||
shift
|
||||
;;
|
||||
--debug)
|
||||
DEBUG=true
|
||||
shift
|
||||
|
|
@ -87,5 +94,9 @@ fi
|
|||
|
||||
# Run E2E tests
|
||||
if $RUN_E2E; then
|
||||
if [ -n "$TEST_SUITE" ]; then
|
||||
run_tests "E2E" "npx playwright test --config=tests/e2e/playwright.config.ts --grep @$TEST_SUITE"
|
||||
else
|
||||
run_tests "E2E" "npx playwright test --config=tests/e2e/playwright.config.ts"
|
||||
fi
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -31,11 +31,6 @@ services:
|
|||
- WORDPRESS_DB_NAME=${DEV_DB_NAME}
|
||||
- WORDPRESS_DEBUG=1
|
||||
- O=${O:-}
|
||||
- WORDPRESS_CONFIG_EXTRA=|
|
||||
define('WP_DEBUG_LOG', true);
|
||||
define('WP_DEBUG_DISPLAY', false);
|
||||
define('SCRIPT_DEBUG', true);
|
||||
define('FORCE_SSL_ADMIN', true);
|
||||
|
||||
nginx:
|
||||
depends_on:
|
||||
|
|
|
|||
30
wordpress-dev/package-lock.json
generated
Normal file
30
wordpress-dev/package-lock.json
generated
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"name": "wordpress-dev",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "wordpress-dev",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"typescript": "^5.8.2"
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.8.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
|
||||
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
18
wordpress-dev/package.json
Normal file
18
wordpress-dev/package.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name": "wordpress-dev",
|
||||
"version": "1.0.0",
|
||||
"description": "**Status**: Active/Authoritative **Last Updated**: March 12, 2025 **Scope**: Development environment setup and configuration",
|
||||
"main": "index.js",
|
||||
"directories": {
|
||||
"test": "tests"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"typescript": "^5.8.2"
|
||||
}
|
||||
}
|
||||
14
wordpress-dev/php-fpm.conf
Normal file
14
wordpress-dev/php-fpm.conf
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[www]
|
||||
user = www-data
|
||||
group = www-data
|
||||
listen = 0.0.0.0:9000
|
||||
pm = dynamic
|
||||
pm.max_children = 5
|
||||
pm.start_servers = 2
|
||||
pm.min_spare_servers = 1
|
||||
pm.max_spare_servers = 3
|
||||
|
||||
php_admin_value[error_log] = /proc/self/fd/2
|
||||
php_admin_flag[log_errors] = on
|
||||
php_admin_value[post_max_size] = 64M
|
||||
php_admin_value[upload_max_filesize] = 64M
|
||||
4
wordpress-dev/php.ini/custom.ini
Normal file
4
wordpress-dev/php.ini/custom.ini
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
memory_limit = 256M
|
||||
post_max_size = 64M
|
||||
upload_max_filesize = 64M
|
||||
max_execution_time = 300
|
||||
71
wordpress-dev/playwright-report/index.html
Normal file
71
wordpress-dev/playwright-report/index.html
Normal file
File diff suppressed because one or more lines are too long
30
wordpress-dev/tests/e2e/playwright.config.ts
Normal file
30
wordpress-dev/tests/e2e/playwright.config.ts
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
import type { PlaywrightTestConfig } from '@playwright/test';
|
||||
|
||||
const config: PlaywrightTestConfig = {
|
||||
testDir: './tests',
|
||||
timeout: 30000,
|
||||
forbidOnly: !!process.env.CI,
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
workers: process.env.CI ? 1 : undefined,
|
||||
reporter: [
|
||||
['list'],
|
||||
['html', { open: 'never' }],
|
||||
['junit', { outputFile: '../test-results/e2e-results.xml' }]
|
||||
],
|
||||
use: {
|
||||
baseURL: process.env.WORDPRESS_URL || 'http://localhost:8080',
|
||||
trace: 'on-first-retry',
|
||||
video: 'on-first-retry',
|
||||
screenshot: 'only-on-failure'
|
||||
},
|
||||
projects: [
|
||||
{
|
||||
name: 'chromium',
|
||||
use: {
|
||||
browserName: 'chromium',
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export default config;
|
||||
45
wordpress-dev/tests/e2e/tests/login.spec.ts
Normal file
45
wordpress-dev/tests/e2e/tests/login.spec.ts
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test.describe('Login Functionality @login', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/hce-login');
|
||||
});
|
||||
|
||||
test('displays login form', async ({ page }) => {
|
||||
await expect(page.locator('#trainer-login-form')).toBeVisible();
|
||||
await expect(page.locator('input[name="username"]')).toBeVisible();
|
||||
await expect(page.locator('input[name="password"]')).toBeVisible();
|
||||
await expect(page.locator('input[name="remember"]')).toBeVisible();
|
||||
await expect(page.locator('button[type="submit"]')).toBeVisible();
|
||||
});
|
||||
|
||||
test('shows error on invalid credentials', async ({ page }) => {
|
||||
await page.fill('input[name="username"]', 'invalid@example.com');
|
||||
await page.fill('input[name="password"]', 'wrongpassword');
|
||||
await page.click('button[type="submit"]');
|
||||
|
||||
await expect(page.locator('#login-message')).toContainText('Invalid username or password');
|
||||
});
|
||||
|
||||
test('redirects to dashboard on successful login', async ({ page }) => {
|
||||
await page.fill('input[name="username"]', process.env.WP_ADMIN_USER || 'devadmin');
|
||||
await page.fill('input[name="password"]', process.env.WP_ADMIN_PASSWORD || '');
|
||||
await page.click('button[type="submit"]');
|
||||
|
||||
await expect(page).toHaveURL(/.*trainer-dashboard/);
|
||||
});
|
||||
|
||||
test('remembers login state', async ({ page, context }) => {
|
||||
await page.fill('input[name="username"]', process.env.WP_ADMIN_USER || 'devadmin');
|
||||
await page.fill('input[name="password"]', process.env.WP_ADMIN_PASSWORD || '');
|
||||
await page.check('input[name="remember"]');
|
||||
await page.click('button[type="submit"]');
|
||||
|
||||
await expect(page).toHaveURL(/.*trainer-dashboard/);
|
||||
|
||||
// Create a new page in the same context to verify persistent login
|
||||
const newPage = await context.newPage();
|
||||
await newPage.goto('/trainer-dashboard');
|
||||
await expect(newPage).not.toHaveURL(/.*hce-login/);
|
||||
});
|
||||
});
|
||||
120
wordpress-dev/tests/test-results/e2e-results.xml
Normal file
120
wordpress-dev/tests/test-results/e2e-results.xml
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
<testsuites id="" name="" tests="4" failures="4" skipped="0" errors="0" time="3.341389">
|
||||
<testsuite name="login.spec.ts" timestamp="2025-03-25T15:01:39.745Z" hostname="chromium" tests="4" failures="4" skipped="0" time="0.927" errors="0">
|
||||
<testcase name="Login Functionality @login › displays login form" classname="login.spec.ts" time="0.341">
|
||||
<failure message="login.spec.ts:8:7 displays login form" type="FAILURE">
|
||||
<![CDATA[ [chromium] › login.spec.ts:8:7 › Login Functionality @login › displays login form ────────────────
|
||||
|
||||
Error: page.goto: net::ERR_CONNECTION_RESET at http://localhost:8080/hce-login
|
||||
Call log:
|
||||
- navigating to "http://localhost:8080/hce-login", waiting until "load"
|
||||
|
||||
|
||||
3 | test.describe('Login Functionality @login', () => {
|
||||
4 | test.beforeEach(async ({ page }) => {
|
||||
> 5 | await page.goto('/hce-login');
|
||||
| ^
|
||||
6 | });
|
||||
7 |
|
||||
8 | test('displays login form', async ({ page }) => {
|
||||
at /Users/ben/dev/upskill-event-manager/wordpress-dev/tests/e2e/tests/login.spec.ts:5:16
|
||||
|
||||
attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
|
||||
test-results/login-Login-Functionality-login-displays-login-form-chromium/test-failed-1.png
|
||||
────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
]]>
|
||||
</failure>
|
||||
<system-out>
|
||||
<![CDATA[
|
||||
[[ATTACHMENT|../../test-results/login-Login-Functionality-login-displays-login-form-chromium/test-failed-1.png]]
|
||||
]]>
|
||||
</system-out>
|
||||
</testcase>
|
||||
<testcase name="Login Functionality @login › shows error on invalid credentials" classname="login.spec.ts" time="0.176">
|
||||
<failure message="login.spec.ts:16:7 shows error on invalid credentials" type="FAILURE">
|
||||
<![CDATA[ [chromium] › login.spec.ts:16:7 › Login Functionality @login › shows error on invalid credentials
|
||||
|
||||
Error: page.goto: net::ERR_CONNECTION_RESET at http://localhost:8080/hce-login
|
||||
Call log:
|
||||
- navigating to "http://localhost:8080/hce-login", waiting until "load"
|
||||
|
||||
|
||||
3 | test.describe('Login Functionality @login', () => {
|
||||
4 | test.beforeEach(async ({ page }) => {
|
||||
> 5 | await page.goto('/hce-login');
|
||||
| ^
|
||||
6 | });
|
||||
7 |
|
||||
8 | test('displays login form', async ({ page }) => {
|
||||
at /Users/ben/dev/upskill-event-manager/wordpress-dev/tests/e2e/tests/login.spec.ts:5:16
|
||||
|
||||
attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
|
||||
test-results/login-Login-Functionality--5805a-rror-on-invalid-credentials-chromium/test-failed-1.png
|
||||
────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
]]>
|
||||
</failure>
|
||||
<system-out>
|
||||
<![CDATA[
|
||||
[[ATTACHMENT|../../test-results/login-Login-Functionality--5805a-rror-on-invalid-credentials-chromium/test-failed-1.png]]
|
||||
]]>
|
||||
</system-out>
|
||||
</testcase>
|
||||
<testcase name="Login Functionality @login › redirects to dashboard on successful login" classname="login.spec.ts" time="0.218">
|
||||
<failure message="login.spec.ts:24:7 redirects to dashboard on successful login" type="FAILURE">
|
||||
<![CDATA[ [chromium] › login.spec.ts:24:7 › Login Functionality @login › redirects to dashboard on successful login
|
||||
|
||||
Error: page.goto: net::ERR_CONNECTION_RESET at http://localhost:8080/hce-login
|
||||
Call log:
|
||||
- navigating to "http://localhost:8080/hce-login", waiting until "load"
|
||||
|
||||
|
||||
3 | test.describe('Login Functionality @login', () => {
|
||||
4 | test.beforeEach(async ({ page }) => {
|
||||
> 5 | await page.goto('/hce-login');
|
||||
| ^
|
||||
6 | });
|
||||
7 |
|
||||
8 | test('displays login form', async ({ page }) => {
|
||||
at /Users/ben/dev/upskill-event-manager/wordpress-dev/tests/e2e/tests/login.spec.ts:5:16
|
||||
|
||||
attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
|
||||
test-results/login-Login-Functionality--0d214-shboard-on-successful-login-chromium/test-failed-1.png
|
||||
────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
]]>
|
||||
</failure>
|
||||
<system-out>
|
||||
<![CDATA[
|
||||
[[ATTACHMENT|../../test-results/login-Login-Functionality--0d214-shboard-on-successful-login-chromium/test-failed-1.png]]
|
||||
]]>
|
||||
</system-out>
|
||||
</testcase>
|
||||
<testcase name="Login Functionality @login › remembers login state" classname="login.spec.ts" time="0.192">
|
||||
<failure message="login.spec.ts:32:7 remembers login state" type="FAILURE">
|
||||
<![CDATA[ [chromium] › login.spec.ts:32:7 › Login Functionality @login › remembers login state ─────────────
|
||||
|
||||
Error: page.goto: net::ERR_CONNECTION_RESET at http://localhost:8080/hce-login
|
||||
Call log:
|
||||
- navigating to "http://localhost:8080/hce-login", waiting until "load"
|
||||
|
||||
|
||||
3 | test.describe('Login Functionality @login', () => {
|
||||
4 | test.beforeEach(async ({ page }) => {
|
||||
> 5 | await page.goto('/hce-login');
|
||||
| ^
|
||||
6 | });
|
||||
7 |
|
||||
8 | test('displays login form', async ({ page }) => {
|
||||
at /Users/ben/dev/upskill-event-manager/wordpress-dev/tests/e2e/tests/login.spec.ts:5:16
|
||||
|
||||
attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
|
||||
test-results/login-Login-Functionality-login-remembers-login-state-chromium/test-failed-1.png
|
||||
────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
]]>
|
||||
</failure>
|
||||
<system-out>
|
||||
<![CDATA[
|
||||
[[ATTACHMENT|../../test-results/login-Login-Functionality-login-remembers-login-state-chromium/test-failed-1.png]]
|
||||
]]>
|
||||
</system-out>
|
||||
</testcase>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
113
wordpress-dev/tsconfig.json
Normal file
113
wordpress-dev/tsconfig.json
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "libReplacement": true, /* Enable lib replacement. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
||||
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
||||
|
||||
/* Modules */
|
||||
"module": "commonjs", /* Specify what module code is generated. */
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
||||
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
||||
// "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
|
||||
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
||||
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
||||
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
||||
// "noUncheckedSideEffectImports": true, /* Check side effect imports. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files. */
|
||||
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
||||
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
||||
// "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
|
||||
// "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
||||
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue