feat: export validated bid sheets as real Excel workbooks
This commit is contained in:
@@ -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'));
|
||||
});
|
||||
Reference in New Issue
Block a user