Analyse: Runner-Auftrag
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
813c56e6a4
commit
62f196f705
2 files changed
+110
-3
No files matched your search
@@ -112,7 +112,7 @@ test('an: Auftrag mit entschlüsselten Variablen, sofortige Rückgabe, Ergebnis
|
||||
assert.equal(aw.get('websiteProjects', id).previewState, 'building')
|
||||
const [sub] = submits()
|
||||
assert.equal(sub.auth, 'Bearer sekret')
|
||||
assert.deepEqual(sub.body, { sub: repo.split('/')[1], repo, sha: SHA, branch: 'main', mode: 'auto', displayName: 'Mein Projekt', env: { API_URL: 'https://x.test' } })
|
||||
assert.deepEqual(sub.body, { sub: repo.split('/')[1], repo, sha: SHA, branch: 'main', mode: 'auto', displayName: 'Mein Projekt', env: { API_URL: 'https://x.test' }, analytics: null })
|
||||
await pd.waitForRunFollowers()
|
||||
const d = aw.get('websiteProjects', id)
|
||||
assert.equal(d.previewState, 'online')
|
||||
@@ -366,3 +366,78 @@ test('dev-Ergebnis: PUT /dev/<sub> mit vollständigem Auftrag inkl. Variablen',
|
||||
const put = rs.calls.find((c) => c.method === 'PUT')
|
||||
assert.deepEqual(put.body, { sub: repo.split('/')[1], repo, sha: SHA, branch: 'main', mode: 'dev', env: { A: 'wert1234' } })
|
||||
})
|
||||
|
||||
// ---- Analyse-Feld im Build-Auftrag (Task 10) ----
|
||||
async function analyseProject({ feature = {}, customer = {}, project: pextra = {}, noFeature = false, noCustomer = false } = {}) {
|
||||
const { createDocument } = await import('../server/services/appwriteAdmin.js')
|
||||
const cid = `cust-an-${n + 1}`
|
||||
const p = await project({ customerId: cid, subdomain: `an-${n + 1}`, isPublic: true, ...pextra })
|
||||
if (!noCustomer) {
|
||||
await createDocument('customers', { name: 'Max Muster', companyName: 'Muster GmbH', email: 'info@muster.test', street: 'Hauptstr. 1', postalCode: '12345', city: 'Berlin', ...customer }, cid)
|
||||
}
|
||||
if (!noFeature) {
|
||||
await createDocument('portalFeatures', { customerId: cid, projectId: p.id, featureKey: 'analyse', state: 'active', enabled: true, siteKey: 'abcdef0123456789abcd', accentColor: '#ff0066', ...feature }, `f_${p.id}_analyse`)
|
||||
}
|
||||
return p
|
||||
}
|
||||
async function submitFor(p) {
|
||||
await pd.runDeploy(p.repo, 'main', cfg(p.repo), { project: p.doc, sha: SHA })
|
||||
await pd.waitForRunFollowers()
|
||||
return submits().at(-1).body
|
||||
}
|
||||
|
||||
test('Analyse: aktiv + öffentlich ⇒ analytics mit siteKey, Farbe, Datenschutzangaben', async () => {
|
||||
const body = await submitFor(await analyseProject())
|
||||
assert.deepEqual(body.analytics, {
|
||||
siteKey: 'abcdef0123456789abcd',
|
||||
color: '#ff0066',
|
||||
privacy: { company: 'Muster GmbH', address: 'Hauptstr. 1, 12345 Berlin', email: 'info@muster.test' },
|
||||
})
|
||||
})
|
||||
|
||||
test('Analyse: Standardfarbe, Firma fällt auf Name zurück, Adresse optional', async () => {
|
||||
const p = await analyseProject({ feature: { accentColor: '' }, customer: { companyName: '', street: '', postalCode: '', city: '' } })
|
||||
const body = await submitFor(p)
|
||||
assert.equal(body.analytics.color, '#111111')
|
||||
assert.equal(body.analytics.privacy.company, 'Max Muster')
|
||||
assert.equal(body.analytics.privacy.address, '')
|
||||
})
|
||||
|
||||
test('Analyse: aus ⇒ null', async () => {
|
||||
assert.equal((await submitFor(await analyseProject({ feature: { state: 'off', enabled: false } }))).analytics, null)
|
||||
assert.equal((await submitFor(await analyseProject({ noFeature: true }))).analytics, null)
|
||||
})
|
||||
|
||||
test('Analyse: nicht öffentlich oder ohne Subdomain ⇒ null', async () => {
|
||||
assert.equal((await submitFor(await analyseProject({ project: { isPublic: false } }))).analytics, null)
|
||||
assert.equal((await submitFor(await analyseProject({ project: { subdomain: '' } }))).analytics, null)
|
||||
})
|
||||
|
||||
test('Analyse: fehlende E-Mail oder Firma ⇒ null mit Warnung, Build läuft trotzdem', async (t) => {
|
||||
const warn = t.mock.method(console, 'warn', () => {})
|
||||
const a = await analyseProject({ customer: { email: '' } })
|
||||
assert.equal((await submitFor(a)).analytics, null)
|
||||
assert.ok(warn.mock.calls.some((c) => String(c.arguments[0]).includes(a.id)))
|
||||
assert.equal((await submitFor(await analyseProject({ customer: { companyName: '', name: '' } }))).analytics, null)
|
||||
assert.equal((await submitFor(await analyseProject({ noCustomer: true }))).analytics, null)
|
||||
})
|
||||
|
||||
test('Analyse: Fehler bei der Funktions-Abfrage ⇒ null, Auftrag wird trotzdem gesendet', async (t) => {
|
||||
t.mock.method(console, 'warn', () => {})
|
||||
const p = await analyseProject()
|
||||
aw.failNext({ method: 'GET', pathIncludes: 'portalFeatures', status: 500 })
|
||||
const before = submits().length
|
||||
const body = await submitFor(p)
|
||||
assert.equal(submits().length, before + 1)
|
||||
assert.equal(body.analytics, null)
|
||||
})
|
||||
|
||||
test('Analyse: Dev-PUT nach erfolgreichem Build (Modus dev) enthält kein analytics', async () => {
|
||||
rs.script = done({ result: 'dev' })
|
||||
const p = await analyseProject({ project: { previewMode: 'dev' } })
|
||||
const body = await submitFor(p)
|
||||
assert.ok(body.analytics)
|
||||
const puts = rs.calls.filter((c) => c.method === 'PUT' && c.url.startsWith('/dev/'))
|
||||
assert.ok(puts.length >= 1)
|
||||
for (const c of puts) assert.equal('analytics' in c.body, false)
|
||||
})
|
||||
Reference in new issue
Block a user