feat: implement Marco's customer changes
- Remove 'Flotte ansehen' button from hero section - Remove '24/7 Support' stat from hero section - Remove 'Unsere Flotte' eyebrow from fleet section - Remove ALL 'Warum wir' / 'Why us' references from nav links, i18n keys, and legal pages - Update reviews: Ferrari references only (removed GT3 mentions) - Update Impressum with correct company data (MC Cars GmbH) - Add multi-photo gallery: DB migration (17-vehicle-photos.sql), admin UI for photo management, frontend carousel on cards and dialog - Update SEO: Ferrari-focused meta tags, title, keywords, JSON-LD - Clean up dead i18n keys (viewFleet, statSupport, fleetEyebrow, navWhy, why* keys) - Fix legal page issues: add config.js script, fix logo references to SVG - Add Playwright E2E tests (26/26 passing) - Update footer tagline across all pages
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test.describe('Legal Pages - Warum wir removed', () => {
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
});
|
||||
|
||||
test('Impressum page - Warum wir nav link removed', async ({ page }) => {
|
||||
await page.goto('/impressum.html');
|
||||
await expect(page.getByText('Warum wir')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('AGB page - Warum wir nav link removed', async ({ page }) => {
|
||||
await page.goto('/agb.html');
|
||||
await expect(page.getByText('Warum wir')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('Datenschutz page - Warum wir nav link removed', async ({ page }) => {
|
||||
await page.goto('/datenschutz.html');
|
||||
await expect(page.getByText('Warum wir')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('Mietbedingungen page - Warum wir nav link removed', async ({ page }) => {
|
||||
await page.goto('/mietbedingungen.html');
|
||||
await expect(page.getByText('Warum wir')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('All legal pages - other nav links present', async ({ page }) => {
|
||||
await page.goto('/impressum.html');
|
||||
const nav = page.getByLabel('Hauptnavigation');
|
||||
await expect(nav.getByRole('link', { name: 'Fahrzeuge' }).first()).toBeVisible();
|
||||
await expect(nav.getByRole('link', { name: 'Buchen' }).first()).toBeVisible();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,109 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test.describe('MC Cars - Customer Changes Verification', () => {
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
await page.waitForTimeout(1000);
|
||||
});
|
||||
|
||||
test('Page loads successfully', async ({ page }) => {
|
||||
await expect(page).toHaveTitle(/MC Cars/);
|
||||
});
|
||||
|
||||
test('Hero section - Flotte ansehen button removed', async ({ page }) => {
|
||||
await expect(page.getByText('Flotte ansehen')).not.toBeVisible();
|
||||
await expect(page.getByText('View fleet')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('Hero section - 24/7 Support stat removed', async ({ page }) => {
|
||||
await expect(page.getByText('24/7')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('Hero section - Faire Kaution stat still visible', async ({ page }) => {
|
||||
const kautionStat = page.getByText('Faire Kaution', { exact: true });
|
||||
await expect(kautionStat).toBeVisible();
|
||||
});
|
||||
|
||||
test('Hero section - Fahrzeuge stat still visible', async ({ page }) => {
|
||||
const vehiclesSection = page.locator('.hero-stats');
|
||||
await expect(vehiclesSection).toBeVisible();
|
||||
});
|
||||
|
||||
test('Fleet section - Unsere Flotte eyebrow removed', async ({ page }) => {
|
||||
await expect(page.getByText('Unsere Flotte')).not.toBeVisible();
|
||||
await expect(page.getByText('Our Fleet')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('Fleet section - Title still visible', async ({ page }) => {
|
||||
await expect(page.getByText('Handverlesen. Gepflegt. Startklar.')).toBeVisible();
|
||||
});
|
||||
|
||||
test('Navigation - Warum wir link removed', async ({ page }) => {
|
||||
await expect(page.getByText('Warum wir')).not.toBeVisible();
|
||||
await expect(page.getByText('Why us')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('Navigation - Other links still present', async ({ page }) => {
|
||||
const nav = page.getByLabel('Hauptnavigation');
|
||||
await expect(nav.getByRole('link', { name: 'Fahrzeuge' }).first()).toBeVisible();
|
||||
await expect(nav.getByRole('link', { name: 'Stimmen' })).toBeVisible();
|
||||
await expect(nav.getByRole('link', { name: 'Buchen' }).first()).toBeVisible();
|
||||
await expect(nav.getByRole('link', { name: 'Jetzt buchen' })).toBeVisible();
|
||||
});
|
||||
|
||||
test('Reviews - Ferrari references in reviews', async ({ page }) => {
|
||||
await page.locator('#stimmen').scrollIntoViewIfNeeded();
|
||||
const reviewsSection = page.locator('#stimmen');
|
||||
await expect(reviewsSection).toBeVisible();
|
||||
});
|
||||
|
||||
test('Reviews - GT3 references removed', async ({ page }) => {
|
||||
await expect(page.getByText('GT3')).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('Footer - correct content', async ({ page }) => {
|
||||
await expect(page.getByText('Rechtliches')).toBeVisible();
|
||||
await expect(page.getByText('Impressum')).toBeVisible();
|
||||
await expect(page.getByText('Datenschutz')).toBeVisible();
|
||||
await expect(page.getByText('hello@mccars.at')).toBeVisible();
|
||||
});
|
||||
|
||||
test('Footer - Steiermark reference updated', async ({ page }) => {
|
||||
await expect(page.getByText('Made in Steiermark')).toBeVisible();
|
||||
});
|
||||
|
||||
test('Language toggle works', async ({ page }) => {
|
||||
const langToggle = page.locator('.lang-toggle');
|
||||
await expect(langToggle).toBeVisible();
|
||||
|
||||
// Switch to English
|
||||
await langToggle.click();
|
||||
await page.waitForTimeout(500);
|
||||
await expect(langToggle).toHaveText('DE');
|
||||
await expect(page.getByText('Drive at the highest level.')).toBeVisible();
|
||||
|
||||
// Switch back to German
|
||||
await langToggle.click();
|
||||
await page.waitForTimeout(500);
|
||||
await expect(langToggle).toHaveText('EN');
|
||||
await expect(page.getByRole('heading', { name: /Niveau/ })).toBeVisible();
|
||||
});
|
||||
|
||||
test('Fleet section - vehicle cards visible', async ({ page }) => {
|
||||
await page.locator('#fahrzeuge').scrollIntoViewIfNeeded();
|
||||
const vehicleCards = page.locator('.vehicle-card');
|
||||
await expect(vehicleCards.first()).toBeVisible();
|
||||
});
|
||||
|
||||
test('Booking section visible', async ({ page }) => {
|
||||
await page.locator('#buchen').scrollIntoViewIfNeeded();
|
||||
await expect(page.getByRole('heading', { name: 'Jetzt buchen' })).toBeVisible();
|
||||
});
|
||||
|
||||
test('SEO title updated', async ({ page }) => {
|
||||
const title = await page.title();
|
||||
expect(title).toContain('Ferrari');
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,41 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test.describe('Photo Gallery Feature', () => {
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
await page.waitForTimeout(1000);
|
||||
});
|
||||
|
||||
test('Vehicle cards render correctly', async ({ page }) => {
|
||||
await page.locator('#fahrzeuge').scrollIntoViewIfNeeded();
|
||||
const cards = page.locator('.vehicle-card');
|
||||
await expect(cards.first()).toBeVisible();
|
||||
});
|
||||
|
||||
test('Vehicle card has photo', async ({ page }) => {
|
||||
await page.locator('#fahrzeuge').scrollIntoViewIfNeeded();
|
||||
const firstPhoto = page.locator('.vehicle-card').first().locator('.vehicle-photo img');
|
||||
await expect(firstPhoto).toBeVisible();
|
||||
const src = await firstPhoto.getAttribute('src');
|
||||
expect(src).not.toBeNull();
|
||||
expect(src).not.toBe('');
|
||||
});
|
||||
|
||||
test('Vehicle details dialog opens', async ({ page }) => {
|
||||
await page.locator('#fahrzeuge').scrollIntoViewIfNeeded();
|
||||
const detailsBtn = page.locator('[data-details]').first();
|
||||
if (await detailsBtn.isVisible()) {
|
||||
await detailsBtn.click();
|
||||
const dialog = page.locator('#carDialog');
|
||||
await expect(dialog).toBeVisible();
|
||||
}
|
||||
});
|
||||
|
||||
test('Booking wizard - vehicle selector works', async ({ page }) => {
|
||||
await page.locator('#buchen').scrollIntoViewIfNeeded();
|
||||
const carSelect = page.locator('#bpfCar');
|
||||
await expect(carSelect).toBeVisible();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user