diff --git a/frontend/pshared/test/ledger/account_mapper_test.dart b/frontend/pshared/test/ledger/account_mapper_test.dart new file mode 100644 index 00000000..5dabb1f0 --- /dev/null +++ b/frontend/pshared/test/ledger/account_mapper_test.dart @@ -0,0 +1,63 @@ +import 'package:test/test.dart'; + +import 'package:pshared/data/dto/describable.dart'; +import 'package:pshared/data/dto/ledger/account.dart'; +import 'package:pshared/data/dto/ledger/role.dart'; +import 'package:pshared/data/dto/ledger/status.dart'; +import 'package:pshared/data/dto/ledger/type.dart'; +import 'package:pshared/data/mapper/ledger/account.dart'; + +LedgerAccountDTO _baseDto({ + DescribableDTO? describable, + Map? metadata, +}) { + return LedgerAccountDTO( + ledgerAccountRef: 'ledger:r1', + organizationRef: 'org:1', + accountCode: 'asset:rub:abc', + accountType: LedgerAccountTypeDTO.asset, + currency: 'RUB', + status: LedgerAccountStatusDTO.active, + allowNegative: false, + role: LedgerAccountRoleDTO.operating, + metadata: metadata, + describable: describable, + ); +} + +void main() { + group('LedgerAccountDTOMapper', () { + test('keeps describable name when it is present', () { + final dto = _baseDto( + describable: const DescribableDTO(name: 'Main RUB', description: 'ops'), + metadata: const {'name': 'Metadata Name'}, + ); + + final domain = dto.toDomain(); + + expect(domain.name, equals('Main RUB')); + expect(domain.description, equals('ops')); + }); + + test('uses metadata name when describable is absent', () { + final dto = _baseDto(metadata: const {'name': 'Metadata Name'}); + + final domain = dto.toDomain(); + + expect(domain.name, equals('Metadata Name')); + expect(domain.description, isNull); + }); + + test('uses metadata name when describable name is blank', () { + final dto = _baseDto( + describable: const DescribableDTO(name: ' ', description: 'ops'), + metadata: const {'name': 'Metadata Name'}, + ); + + final domain = dto.toDomain(); + + expect(domain.name, equals('Metadata Name')); + expect(domain.description, equals('ops')); + }); + }); +}