mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-10 20:07:04 +01:00
billsplit was a standalone Flutter app in ~/Downloads with one commit and no git remote — that directory was the only copy of its history. Three things the move needed beyond copying the tree: - The root .gitignore silently swallowed 32 of its files (*.png, *.ico, *.manifest). Ignored files do not error on `git add`, they just vanish, so this would have committed an app that cannot build. Added a trailing block of ! overrides plus .binary-allowlist (which did not exist yet) — the documented in-repo exception for binaries a build genuinely needs. The ../testsAndMisc_binaries/ symlink scheme does not apply: those directories are gone, and a symlinked PNG breaks a fresh clone. - billsplit/.github/workflows/ci.yaml was inert once nested; GitHub only reads workflows at the repository root. Relocated with a working-directory and a billsplit/** path filter. - The app's coverage gate moved to python_pkg/billsplit_coverage/ so every Python file stays under python_pkg/, and gained a test suite at 100% branch coverage as that location requires. billsplit/ now holds only Dart. Also replaces the stock Flutter icon with a family icon from the shared generator. The glyph is a filled silhouette because the family's 72px stroke cannot carry a fine torn edge, and the split is an evenodd-cut perforation so the holes stay transparent on the foreground and monochrome layers. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
32 lines
1.0 KiB
Dart
32 lines
1.0 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:billsplit/domain/eparagon_parser.dart';
|
|
import 'package:billsplit/domain/models.dart';
|
|
import 'package:billsplit/domain/xlsx_export.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
test('exports a non-trivial xlsx for the real receipt', () {
|
|
final receipt = parseEParagon(
|
|
File('test/fixtures/sample_receipt.json').readAsStringSync(),
|
|
);
|
|
final people = [
|
|
for (var i = 0; i < 8; i++)
|
|
Person(id: 'p$i', name: 'Person ${i + 1}', drinks: i < 6),
|
|
];
|
|
receipt.participantIds.addAll(people.map((p) => p.id));
|
|
|
|
final bytes = exportXlsx(receipt: receipt, roster: people, groups: []);
|
|
expect(bytes.length, greaterThan(4000));
|
|
// PK zip magic.
|
|
expect(bytes[0], 0x50);
|
|
expect(bytes[1], 0x4B);
|
|
|
|
// Write out for external validation (recalc via LibreOffice + openpyxl).
|
|
final out = File('build/test_export.xlsx')
|
|
..createSync(recursive: true)
|
|
..writeAsBytesSync(bytes);
|
|
expect(out.existsSync(), isTrue);
|
|
});
|
|
}
|