2026-03-06 07:14:57 -06:00
|
|
|
namespace FiscalOS.Infra.Tests.Data;
|
|
|
|
|
|
|
|
|
|
internal sealed class AccountBuilder
|
|
|
|
|
{
|
|
|
|
|
private string _name = "accountName";
|
|
|
|
|
private AccountMetadata? _metadata;
|
2026-03-08 07:18:27 -05:00
|
|
|
private readonly List<Transaction> _transactions = [];
|
2026-03-06 07:14:57 -06:00
|
|
|
|
|
|
|
|
private AccountBuilder()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static AccountBuilder Create()
|
|
|
|
|
{
|
|
|
|
|
return new();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public AccountBuilder WithName(string name)
|
|
|
|
|
{
|
|
|
|
|
_name = name;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public AccountBuilder WithMetadata(Action<AccountMetadataBuilder>? action = null)
|
|
|
|
|
{
|
|
|
|
|
var imb = AccountMetadataBuilder.Create();
|
|
|
|
|
action?.Invoke(imb);
|
|
|
|
|
_metadata = imb.Build();
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-08 16:14:51 -05:00
|
|
|
public AccountBuilder WithMetadata(AccountMetadata metadata)
|
|
|
|
|
{
|
|
|
|
|
_metadata = metadata;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-08 07:18:27 -05:00
|
|
|
public AccountBuilder WithTransaction(Action<TransactionBuilder>? action = null)
|
|
|
|
|
{
|
|
|
|
|
var tb = TransactionBuilder.Create();
|
|
|
|
|
action?.Invoke(tb);
|
|
|
|
|
_transactions.Add(tb.Build());
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-06 07:14:57 -06:00
|
|
|
public Account Build()
|
|
|
|
|
{
|
|
|
|
|
if (_metadata is null)
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidOperationException($"You must call {nameof(WithMetadata)} prior to building");
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-08 07:18:27 -05:00
|
|
|
var account = Account.From(_name, _metadata);
|
|
|
|
|
|
|
|
|
|
foreach (var transaction in _transactions)
|
|
|
|
|
{
|
|
|
|
|
account.AddTransaction(transaction);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return account;
|
2026-03-06 07:14:57 -06:00
|
|
|
}
|
|
|
|
|
}
|