const assert = require('node:assert/strict'); const http = require('node:http'); const test = require('node:test'); const { AgrarmonitorConnector, MemoryCookieStore } = require('../dist'); const loginPage = ` Anmeldung - AGRARMONITOR
`; // Regulaere Inhaltsseite einer gueltigen Session, die die Woerter "Anmeldung" // und "Einloggen" im Fliesstext enthaelt - z. B. die FAQ-Seite. const faqPage = ` FAQ - AGRARMONITOR

Haeufige Fragen

Wie aendere ich mein Passwort fuer die Anmeldung?

Warum kann ich mich nicht Einloggen?

`; function createServer() { let loggedIn = false; const requests = []; const server = http.createServer((req, res) => { requests.push({ method: req.method, url: req.url }); if (req.method === 'GET' && req.url === '/') { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(loggedIn ? 'Mein AM' : loginPage); return; } if (req.method === 'GET' && req.url === '/faq') { if (!loggedIn) { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(loginPage); return; } res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(faqPage); return; } if (req.method === 'POST' && req.url === '/login/api/login.php') { let body = ''; req.on('data', chunk => { body += chunk; }); req.on('end', () => { loggedIn = true; res.writeHead(200, { 'Content-Type': 'application/json', 'Set-Cookie': 'agrar_session=test; Path=/', }); res.end(JSON.stringify({ success: true })); }); return; } res.writeHead(404); res.end('not found'); }); return { server, requests }; } test('content pages mentioning Anmeldung do not count as expired session', async t => { const { server, requests } = createServer(); await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)); t.after(() => new Promise(resolve => server.close(resolve))); const baseUrl = `http://127.0.0.1:${server.address().port}`; const connector = new AgrarmonitorConnector({ baseUrl, username: 'demo', password: 'secret', cookieStore: new MemoryCookieStore(), }); await connector.init(); const loginsAfterInit = requests.filter(request => request.url === '/login/api/login.php').length; assert.equal(loginsAfterInit, 1, 'init soll genau einmal einloggen'); const response = await connector.http.get('/faq'); assert.equal(response.status, 200); assert.match(response.data, /Haeufige Fragen/); assert.equal( requests.filter(request => request.url === '/login/api/login.php').length, loginsAfterInit, 'gueltige Inhaltsseite darf keinen erneuten Login ausloesen' ); });