213 lines
6.0 KiB
JavaScript
Executable File
213 lines
6.0 KiB
JavaScript
Executable File
// @ts-check
|
|
const { test, expect } = require('@playwright/test');
|
|
|
|
test.describe('Property Filters AJAX', () => {
|
|
test('should have homeprozAjax global defined', async ({ page }) => {
|
|
await page.goto('/properties/');
|
|
|
|
// Check if homeprozAjax is defined
|
|
const hasAjaxGlobal = await page.evaluate(() => {
|
|
return typeof window.homeprozAjax !== 'undefined';
|
|
});
|
|
|
|
console.log('homeprozAjax defined:', hasAjaxGlobal);
|
|
|
|
if (hasAjaxGlobal) {
|
|
const ajaxConfig = await page.evaluate(() => {
|
|
return {
|
|
ajaxUrl: window.homeprozAjax?.ajaxUrl,
|
|
nonce: window.homeprozAjax?.nonce,
|
|
archiveUrl: window.homeprozAjax?.archiveUrl
|
|
};
|
|
});
|
|
console.log('AJAX Config:', ajaxConfig);
|
|
}
|
|
|
|
expect(hasAjaxGlobal).toBe(true);
|
|
});
|
|
|
|
test('should have jQuery loaded', async ({ page }) => {
|
|
await page.goto('/properties/');
|
|
|
|
const hasJquery = await page.evaluate(() => {
|
|
return typeof window.jQuery !== 'undefined';
|
|
});
|
|
|
|
console.log('jQuery loaded:', hasJquery);
|
|
expect(hasJquery).toBe(true);
|
|
});
|
|
|
|
test('should have filter form elements', async ({ page }) => {
|
|
await page.goto('/properties/');
|
|
|
|
// Check for form elements
|
|
const filtersForm = page.locator('.filters-form');
|
|
const propertyResults = page.locator('#property-results');
|
|
|
|
await expect(filtersForm).toBeVisible();
|
|
await expect(propertyResults).toBeVisible();
|
|
|
|
// List all select elements
|
|
const selects = await page.locator('.filters-form select').all();
|
|
console.log('Number of select elements:', selects.length);
|
|
|
|
for (const select of selects) {
|
|
const name = await select.getAttribute('name');
|
|
const options = await select.locator('option').count();
|
|
console.log(`Select "${name}" has ${options} options`);
|
|
}
|
|
});
|
|
|
|
test('should trigger AJAX on dropdown change', async ({ page }) => {
|
|
// Listen for network requests
|
|
const ajaxRequests = [];
|
|
page.on('request', request => {
|
|
if (request.url().includes('admin-ajax.php')) {
|
|
ajaxRequests.push({
|
|
url: request.url(),
|
|
postData: request.postData()
|
|
});
|
|
}
|
|
});
|
|
|
|
const ajaxResponses = [];
|
|
page.on('response', async response => {
|
|
if (response.url().includes('admin-ajax.php')) {
|
|
let body;
|
|
try {
|
|
body = await response.text();
|
|
} catch (e) {
|
|
body = 'Could not read body';
|
|
}
|
|
ajaxResponses.push({
|
|
url: response.url(),
|
|
status: response.status(),
|
|
body: body.substring(0, 500)
|
|
});
|
|
}
|
|
});
|
|
|
|
// Listen for console errors
|
|
const consoleErrors = [];
|
|
page.on('console', msg => {
|
|
if (msg.type() === 'error') {
|
|
consoleErrors.push(msg.text());
|
|
}
|
|
});
|
|
|
|
await page.goto('/properties/');
|
|
|
|
// Wait for page to fully load
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Get the sort dropdown (most likely to have multiple options)
|
|
const sortSelect = page.locator('select[name="sort"]');
|
|
|
|
if (await sortSelect.count() > 0) {
|
|
console.log('Changing sort dropdown...');
|
|
|
|
// Change the value
|
|
await sortSelect.selectOption('price_low');
|
|
|
|
// Wait a moment for AJAX
|
|
await page.waitForTimeout(2000);
|
|
|
|
console.log('AJAX Requests made:', ajaxRequests.length);
|
|
console.log('AJAX Responses received:', ajaxResponses.length);
|
|
|
|
if (ajaxRequests.length > 0) {
|
|
console.log('Request details:', JSON.stringify(ajaxRequests, null, 2));
|
|
}
|
|
|
|
if (ajaxResponses.length > 0) {
|
|
console.log('Response details:', JSON.stringify(ajaxResponses, null, 2));
|
|
}
|
|
|
|
if (consoleErrors.length > 0) {
|
|
console.log('Console errors:', consoleErrors);
|
|
}
|
|
}
|
|
|
|
// Check if any AJAX request was made
|
|
expect(ajaxRequests.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
test('should check for JavaScript errors on page load', async ({ page }) => {
|
|
const jsErrors = [];
|
|
|
|
page.on('pageerror', error => {
|
|
jsErrors.push(error.message);
|
|
});
|
|
|
|
page.on('console', msg => {
|
|
if (msg.type() === 'error') {
|
|
jsErrors.push(msg.text());
|
|
}
|
|
});
|
|
|
|
await page.goto('/properties/');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
console.log('JavaScript errors found:', jsErrors.length);
|
|
if (jsErrors.length > 0) {
|
|
console.log('Errors:', jsErrors);
|
|
}
|
|
|
|
// This test reports errors but doesn't fail - we want to see what's happening
|
|
expect(true).toBe(true);
|
|
});
|
|
|
|
test('manual AJAX call test', async ({ page }) => {
|
|
await page.goto('/properties/');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Try making a manual AJAX call to see what happens
|
|
const result = await page.evaluate(async () => {
|
|
if (typeof window.homeprozAjax === 'undefined') {
|
|
return { error: 'homeprozAjax not defined' };
|
|
}
|
|
|
|
if (typeof window.jQuery === 'undefined') {
|
|
return { error: 'jQuery not defined' };
|
|
}
|
|
|
|
return new Promise((resolve) => {
|
|
window.jQuery.ajax({
|
|
url: window.homeprozAjax.ajaxUrl,
|
|
type: 'POST',
|
|
data: {
|
|
action: 'homeproz_filter_properties',
|
|
nonce: window.homeprozAjax.nonce,
|
|
property_type: '',
|
|
property_status: '',
|
|
property_location: '',
|
|
min_price: '',
|
|
max_price: '',
|
|
beds: '',
|
|
sort: 'newest',
|
|
paged: 1
|
|
},
|
|
success: function(response) {
|
|
resolve({ success: true, response: response });
|
|
},
|
|
error: function(xhr, status, error) {
|
|
resolve({
|
|
success: false,
|
|
status: xhr.status,
|
|
statusText: xhr.statusText,
|
|
responseText: xhr.responseText?.substring(0, 500),
|
|
error: error
|
|
});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
console.log('Manual AJAX result:', JSON.stringify(result, null, 2));
|
|
|
|
if (result.error) {
|
|
console.log('ERROR:', result.error);
|
|
}
|
|
});
|
|
});
|