feat: export validated bid sheets as real Excel workbooks

This commit is contained in:
2026-09-06 08:56:12 +03:00
parent 2dfd32aa9c
commit ca92bebb45
7 changed files with 1083 additions and 8 deletions
+24
View File
@@ -0,0 +1,24 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import ExcelJS from 'exceljs';
import {createBidWorkbook} from '../src/services/bidWorkbook.js';
import {teklifCetveliHtml} from '../src/services/bidDocs.js';
test('real XLSX roundtrip preserves 100 Turkish rows, numeric decimals and matching total',async()=>{
const rows=Array.from({length:100},(_,i)=>({name:i===0?'=1+2':`Ölçüm kiti ${i}`,quantity:'2 adet',birimFiyat:'125,50'}));
const buffer=await createBidWorkbook({ikn:'2026/QA',firmaUnvan:'İğdır Test',kisim:'1'},rows);
const read=new ExcelJS.Workbook();await read.xlsx.load(buffer);const sheet=read.getWorksheet('Teklif Cetveli');
assert.equal(sheet.rowCount,107);assert.equal(sheet.getCell('B3').value,'İğdır Test');
assert.equal(sheet.getCell('B7').type,ExcelJS.ValueType.String);assert.equal(sheet.getCell('B7').value,'=1+2');
assert.equal(sheet.getCell('E7').value,125.5);assert.equal(sheet.getCell('F7').result,251);
assert.equal(sheet.getCell('F107').result,25100);assert.equal(sheet.getCell('B106').value,'Ölçüm kiti 99');
assert.ok(teklifCetveliHtml({},rows,25100).includes('25.100,00'));
assert.equal(sheet.pageSetup.printTitlesRow,'1:6');
});
test('XLSX refuses empty and invalid prices; fractional unit precision is preserved',async()=>{
await assert.rejects(createBidWorkbook({},[]));
const row={name:'Kit',quantity:'3 adet',birimFiyat:'0,335'};
const book=new ExcelJS.Workbook();await book.xlsx.load(await createBidWorkbook({},[row]));
assert.equal(book.worksheets[0].getCell('E7').value,0.335);
assert.equal(book.worksheets[0].getCell('F7').result,1.01);
assert.ok(teklifCetveliHtml({},[row],1.01).includes('0,335'));
});