Kostra prezentace s vlastní administrací pro Martina Reinera. Obsah: - kolekce Products (obrázky, volné parametry, cena, dostupnost, skrytí), Media se zmenšeninami, Pages, Users bez veřejné registrace - veřejná část: výpis nabídky, detail položky, statické stránky - /api/health pro Docker HEALTHCHECK Provoz: - Dockerfile, docker-compose.yml (vývoj) a docker-compose.prod.yml (nasazení z Gitea registry) - CI v Gitea Actions: lint -> testy -> build -> push image - úvodní migrace databáze Stránky jsou force-dynamic, aby se úprava položky projevila hned; schéma se za běhu nedomýšlí (push: false), migrace se commitují. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { getPayload, Payload } from 'payload'
|
|
import config from '@/payload.config'
|
|
|
|
import { describe, it, beforeAll, expect } from 'vitest'
|
|
|
|
let payload: Payload
|
|
|
|
describe('Payload API', () => {
|
|
beforeAll(async () => {
|
|
// Schéma vznikne z konfigurace (`push` je zapnuté jen v testech).
|
|
payload = await getPayload({ config: await config })
|
|
})
|
|
|
|
it('má nadefinované všechny kolekce', () => {
|
|
const slugy = Object.keys(payload.collections)
|
|
expect(slugy).toEqual(expect.arrayContaining(['products', 'media', 'pages', 'users']))
|
|
})
|
|
|
|
it('umí založit a najít položku nabídky', async () => {
|
|
const vytvorena = await payload.create({
|
|
collection: 'products',
|
|
data: {
|
|
nazev: 'CZ 75 SP-01 Shadow',
|
|
kategorie: 'zbrane',
|
|
cena: 28900,
|
|
stav: 'skladem',
|
|
},
|
|
})
|
|
|
|
expect(vytvorena.id).toBeDefined()
|
|
// slug se doplňuje hookem z názvu
|
|
expect(vytvorena.slug).toBe('cz-75-sp-01-shadow')
|
|
|
|
const nalezene = await payload.find({
|
|
collection: 'products',
|
|
where: { slug: { equals: 'cz-75-sp-01-shadow' } },
|
|
})
|
|
|
|
expect(nalezene.docs).toHaveLength(1)
|
|
expect(nalezene.docs[0]?.cena).toBe(28900)
|
|
})
|
|
})
|