Ergänze Auftragsbearbeitung, Disposition, Stammdaten, Kunden- und Transporteurportale, Lagerverwaltung, Abrechnung, Exporte und Statistik. Füge Kontoeinstellungen, Mitteilungen, Automatikdienste und Betriebsstatus sowie die zugehörigen Tests und PHP-Abgleichsdokumentation hinzu. Vergrößere die persönlichen Auftragslisten auf einheitliche Höhen und richte Statusanzeigen sowie die Ranking-Vorschau-Steuerelemente bündig aus. Validierung: 44 Frontendtests und Produktionsbuild erfolgreich. Backend funktional unverändert gegenüber dem vollständigen Lauf mit 1.624 erfolgreichen und drei übersprungenen Tests. Layout im Browser und lokale Bereitstellung geprüft.
29 lines
2.2 KiB
JavaScript
29 lines
2.2 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {statisticsAmountColumns,statisticsAmountOptions} from '../src/statisticsAmountColumns.mjs';
|
|
import {statisticsMetric} from '../src/statisticsChartData.mjs';
|
|
|
|
test('each PHP amount choice keeps only its amount column',()=>{
|
|
for(const key of Object.keys(statisticsAmountOptions).filter(k=>k!=='ALL'))assert.deepEqual(statisticsAmountColumns({displayMetric:key}).map(c=>c.key),[key]);
|
|
assert.equal(statisticsAmountColumns({displayMetric:'ratio'})[0].kind,'percent');
|
|
assert.equal(statisticsAmountColumns({displayMetric:'kilometers'})[0].kind,'number');
|
|
assert.equal(statisticsAmountColumns({displayMetric:'co2eKg'})[0].kind,'number');
|
|
});
|
|
test('all values and older results include EAU and BSG in detail rows',()=>{
|
|
const keys=['revenue','courierRevenue','margin','ratio','serviceRevenue','fuelMarkup','courierService','kilometers','co2eKg'];
|
|
for(const displayMetric of [undefined,'ALL','unknown'])assert.deepEqual(statisticsAmountColumns({displayMetric}).map(c=>c.key),keys);
|
|
});
|
|
test('separate fuel columns follow the selected price basis without duplicates',()=>{
|
|
for(const [displayMetric,extra] of [['revenue','fuelMarkup'],['courierRevenue','courierFuelMarkup'],['margin','fuelMargin']])assert.deepEqual(statisticsAmountColumns({displayMetric,separateFuel:true}).map(c=>c.key),[displayMetric,extra]);
|
|
const all=statisticsAmountColumns({displayMetric:'ALL',separateFuel:true}).map(c=>c.key);assert.equal(new Set(all).size,all.length);
|
|
assert.deepEqual(statisticsAmountColumns({displayMetric:'kilometers',separateFuel:true}).map(c=>c.key),['kilometers']);
|
|
});
|
|
test('amount cells preserve unknown values and use aggregate BSG instead of averaging row ratios',()=>{
|
|
const rows=[{revenue:100,courierRevenue:50},{revenue:900,courierRevenue:810}];
|
|
assert.ok(Math.abs(statisticsMetric({revenue:1000,courierRevenue:860},'ratio')-14)<1e-10);
|
|
assert.notEqual((statisticsMetric(rows[0],'ratio')+statisticsMetric(rows[1],'ratio'))/2,14);
|
|
assert.equal(statisticsMetric({revenue:100,courierRevenue:null},'margin'),null);
|
|
assert.equal(statisticsMetric({revenue:0,courierRevenue:0},'ratio'),null);
|
|
assert.equal(statisticsMetric({co2eKg:0},'co2eKg'),0);
|
|
});
|