summaryrefslogtreecommitdiff
path: root/tests/FundLab.Domain.Tests/DomainTests.fs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/FundLab.Domain.Tests/DomainTests.fs')
-rw-r--r--tests/FundLab.Domain.Tests/DomainTests.fs21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/FundLab.Domain.Tests/DomainTests.fs b/tests/FundLab.Domain.Tests/DomainTests.fs
index 6a9fc66..46516d5 100644
--- a/tests/FundLab.Domain.Tests/DomainTests.fs
+++ b/tests/FundLab.Domain.Tests/DomainTests.fs
@@ -539,3 +539,24 @@ module RedemptionPolicyTests =
Assert.Equal(Error "redemption fee exceeds redemption value", RedemptionPolicy.compute 1.00000000m 2.5m 3.00m 100.00m 40.00000000m)
Assert.Equal(Error "redemption proceeds rounds to zero", RedemptionPolicy.compute 0.00000001m 1500000m 0.01m 100.00m 40.00000000m)
Assert.Equal(Error "redemption cash rounds to zero", RedemptionPolicy.compute 0.00000001m 2m 0.00m 100.00m 40.00000000m)
+
+module CapitalPolicyTests =
+
+ open Xunit
+ open FundLab.Domain
+
+ [<Fact>]
+ let ``deposit validation rejects non positive or imprecise amounts`` () =
+ Assert.Equal(Error "deposit amount must be positive", CapitalPolicy.validateDeposit 0m)
+ Assert.Equal(Error "deposit amount must be positive", CapitalPolicy.validateDeposit -100.00m)
+ Assert.Equal(Error "deposit amount exceeds cash precision", CapitalPolicy.validateDeposit 100.005m)
+ Assert.Equal(Ok(), CapitalPolicy.validateDeposit 500.00m)
+
+ [<Fact>]
+ let ``settlement adds to available cash without touching units or nav`` () =
+ Assert.Equal(Ok 5398.51m, CapitalPolicy.settle 4898.51m 500.00m)
+ Assert.Equal(Ok 10000.00m, CapitalPolicy.settle 9000.00m 1000.00m)
+
+ let overflow = CapitalPolicy.settle CapitalPolicy.cashMaximum 0.01m
+
+ Assert.Equal(Error "available cash exceeds database precision", overflow)