Files
kokken/scripts/seed-packages.mjs
Alex Polo 570c41f465 Add comprehensive Playwright tests for calendar functionality
- Implemented tests for debugging browser cache vs server response.
- Verified calendar displays correct dates for November 2025.
- Added visual inspection screenshot for calendar layout.
- Created tests to ensure calendar fits within its container.
- Checked for correct styling of available and blocked dates.
- Debugged login form behavior and cookie handling.
- Added tests for forced browser refresh and cache verification.
- Conducted visual tests to compare actual calendar layout with expected.
- Enhanced logging for better traceability during test execution.
2025-11-07 14:09:22 +01:00

166 lines
4.6 KiB
JavaScript

import mysql from 'mysql2/promise';
import dotenv from 'dotenv';
dotenv.config();
const connection = await mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
});
console.log('=== Seeding Packages ===\n');
const packages = [
{
id: 'basis',
name: 'Basis Pakke',
menuId: 'klassisk-3-retter',
pricePerCover: 295,
minCovers: 15,
maxCovers: 30,
includes: [
'Menu planlægning',
'Indkøb af råvarer',
'Madlavning på lokation',
'Let oprydning i køkken'
],
upsells: [
{ id: 'anretning', label: 'Tallerkenanretning', priceFlat: 500 },
{ id: 'kaffe', label: 'Kaffe/te', pricePerCover: 25 }
],
notes: 'God basis løsning til familiefester. Maden serveres på fade, hvor gæsterne selv tager.'
},
{
id: 'basis-gron',
name: 'Basis Pakke',
menuId: 'gron-3-retter',
pricePerCover: 275,
minCovers: 15,
maxCovers: 30,
includes: [
'Menu planlægning',
'Indkøb af råvarer',
'Madlavning på lokation',
'Let oprydning i køkken'
],
upsells: [
{ id: 'anretning', label: 'Tallerkenanretning', priceFlat: 500 },
{ id: 'kaffe', label: 'Kaffe/te', pricePerCover: 25 }
],
notes: 'God basis løsning til familiefester. Maden serveres på fade, hvor gæsterne selv tager.'
},
{
id: 'basis-italiensk',
name: 'Basis Pakke',
menuId: 'italiensk-aften',
pricePerCover: 250,
minCovers: 15,
maxCovers: 30,
includes: [
'Menu planlægning',
'Indkøb af råvarer',
'Madlavning på lokation',
'Let oprydning i køkken'
],
upsells: [
{ id: 'anretning', label: 'Tallerkenanretning', priceFlat: 500 },
{ id: 'kaffe', label: 'Kaffe/te', pricePerCover: 25 }
],
notes: 'God basis løsning til familiefester. Maden serveres \'family style\' på fade.'
},
{
id: 'service',
name: 'Service Pakke',
menuId: 'klassisk-3-retter',
pricePerCover: 395,
minCovers: 20,
maxCovers: 50,
includes: [
'Menu planlægning',
'Indkøb af råvarer',
'Madlavning på lokation',
'Tallerkenanretning',
'Professionel servering',
'Fuld oprydning'
],
upsells: [
{ id: 'velkomst', label: 'Velkomstdrink & snacks', pricePerCover: 45 },
{ id: 'vinmenu', label: 'Vinmenu (3 glas)', pricePerCover: 225 },
{ id: 'kaffe', label: 'Kaffe/te med sødt', pricePerCover: 35 }
],
notes: 'Komplet løsning med personlig service og professionel servering.'
},
{
id: 'gourmet',
name: 'Gourmet Pakke',
menuId: 'gourmet-upgrade',
pricePerCover: 595,
minCovers: 10,
maxCovers: 30,
includes: [
'Menu planlægning',
'Indkøb af kvalitetsråvarer',
'Madlavning på lokation',
'Tallerkenanretning',
'Professionel servering',
'Vinmenu (3 glas)',
'Kaffe med sødt',
'Fuld oprydning'
],
upsells: [
{ id: 'champagne', label: 'Champagne velkomst', pricePerCover: 95 },
{ id: 'ekstravin', label: 'Ekstra glas vin', pricePerCover: 75 },
{ id: 'natmad', label: 'Let natmad', pricePerCover: 75 }
],
notes: 'Eksklusiv løsning til de særlige anledninger med gourmetmenu og vinmenu inkluderet.'
}
];
try {
console.log(`Inserting ${packages.length} packages...\n`);
for (const pkg of packages) {
await connection.execute(`
INSERT INTO packages (
id, name, menu_id, price_per_cover, min_covers, max_covers,
includes, upsells, notes
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
name = VALUES(name),
menu_id = VALUES(menu_id),
price_per_cover = VALUES(price_per_cover),
min_covers = VALUES(min_covers),
max_covers = VALUES(max_covers),
includes = VALUES(includes),
upsells = VALUES(upsells),
notes = VALUES(notes)
`, [
pkg.id,
pkg.name,
pkg.menuId,
pkg.pricePerCover,
pkg.minCovers,
pkg.maxCovers,
JSON.stringify(pkg.includes),
JSON.stringify(pkg.upsells),
pkg.notes
]);
console.log(`${pkg.name} (${pkg.menuId}) - ${pkg.pricePerCover} kr/person`);
}
// Show summary
const [packageCount] = await connection.execute('SELECT COUNT(*) as count FROM packages');
console.log('\n=== Database Summary ===');
console.log(`Packages: ${packageCount[0].count}`);
console.log('\n✅ Seed completed successfully!');
} catch (error) {
console.error('❌ Seed failed:', error);
process.exit(1);
} finally {
await connection.end();
}