Seit AM hinter dem Buchungsstatus "Zahlung erfassen" anzeigt, lieferte der letzte Teil der Statuszeile kein Buchungsdatum mehr. Fallback fürs alte Layout sucht den Teil mit "gebucht". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
94 lines
3.7 KiB
JavaScript
94 lines
3.7 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const http = require('node:http');
|
|
const test = require('node:test');
|
|
|
|
const { AgrarmonitorConnector, MemoryCookieStore } = require('../dist');
|
|
|
|
// Kopfzeile der Detailseite /eingangsrechnungen/detail/<id>, wie sie AM aktuell liefert.
|
|
const statusZeile = inhalt => `<html><body><div class="content"><h3>${inhalt}</h3></div></body></html>`;
|
|
|
|
const seiten = {
|
|
// Seit AM den Link "Zahlung erfassen" hinter dem Buchungsstatus anzeigt.
|
|
387605: statusZeile(`
|
|
<a id="receivedStatus" class="pointer">Empfangen am 21.09.26</a> -
|
|
<a id="bookedStatus" class="pointer">Gebucht am 27.09.26</a>
|
|
- <a class="pointer" id="addPayment">Zahlung erfassen</a>`),
|
|
387606: statusZeile(`
|
|
<a id="receivedStatus" class="pointer">Empfangen am 21.09.26</a> -
|
|
<a id="bookedStatus" class="pointer">Nicht gebucht</a>`),
|
|
387607: statusZeile(`
|
|
<a id="receivedStatus" class="pointer">Nicht empfangen</a> -
|
|
<a id="bookedStatus" class="pointer">Nicht gebucht</a>`),
|
|
// Altes Layout ohne id am Buchungsstatus.
|
|
387608: statusZeile(`
|
|
<a id="receivedStatus" class="pointer">Empfangen am 01.10.26</a> - Gebucht am 02.10.26`),
|
|
};
|
|
|
|
async function startConnector(t) {
|
|
const server = http.createServer((req, res) => {
|
|
req.resume();
|
|
req.on('end', () => {
|
|
if (req.method === 'POST' && req.url === '/login/api/login.php') {
|
|
res.writeHead(200, { 'Content-Type': 'application/json', 'Set-Cookie': 'agrar_session=test; Path=/' });
|
|
res.end(JSON.stringify({ success: true }));
|
|
return;
|
|
}
|
|
if (req.method === 'GET' && req.url === '/') {
|
|
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
res.end('<html><body>Mein AM</body></html>');
|
|
return;
|
|
}
|
|
const match = /^\/eingangsrechnungen\/detail\/(\d+)$/.exec(req.url ?? '');
|
|
if (req.method === 'GET' && match && seiten[match[1]]) {
|
|
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
res.end(seiten[match[1]]);
|
|
return;
|
|
}
|
|
res.writeHead(404);
|
|
res.end('not found');
|
|
});
|
|
});
|
|
|
|
await new Promise(resolve => server.listen(0, '127.0.0.1', resolve));
|
|
t.after(() => new Promise(resolve => server.close(resolve)));
|
|
|
|
const connector = new AgrarmonitorConnector({
|
|
baseUrl: `http://127.0.0.1:${server.address().port}`,
|
|
username: 'demo',
|
|
password: 'secret',
|
|
cookieStore: new MemoryCookieStore(),
|
|
});
|
|
await connector.init();
|
|
return connector;
|
|
}
|
|
|
|
const tag = d => d && [d.getFullYear(), d.getMonth() + 1, d.getDate()];
|
|
|
|
test('Detailseite: Buchungsdatum trotz nachfolgendem "Zahlung erfassen"', async t => {
|
|
const connector = await startConnector(t);
|
|
const meta = await connector.getEingangsrechnungDetailMeta(387605);
|
|
assert.deepEqual(tag(meta.eingangsDatum), [2026, 9, 21]);
|
|
assert.deepEqual(tag(meta.buchungsDatum), [2026, 9, 27]);
|
|
});
|
|
|
|
test('Detailseite: nicht gebucht liefert kein Buchungsdatum', async t => {
|
|
const connector = await startConnector(t);
|
|
const meta = await connector.getEingangsrechnungDetailMeta(387606);
|
|
assert.deepEqual(tag(meta.eingangsDatum), [2026, 9, 21]);
|
|
assert.equal(meta.buchungsDatum, null);
|
|
});
|
|
|
|
test('Detailseite: nicht empfangen und nicht gebucht', async t => {
|
|
const connector = await startConnector(t);
|
|
const meta = await connector.getEingangsrechnungDetailMeta(387607);
|
|
assert.equal(meta.eingangsDatum, null);
|
|
assert.equal(meta.buchungsDatum, null);
|
|
});
|
|
|
|
test('Detailseite: altes Layout ohne #bookedStatus', async t => {
|
|
const connector = await startConnector(t);
|
|
const meta = await connector.getEingangsrechnungDetailMeta(387608);
|
|
assert.deepEqual(tag(meta.eingangsDatum), [2026, 10, 1]);
|
|
assert.deepEqual(tag(meta.buchungsDatum), [2026, 10, 2]);
|
|
});
|