1
+ package net .finmath .smartcontract .settlement ;
2
+
3
+ import net .finmath .smartcontract .model .SDCException ;
4
+ import net .finmath .smartcontract .product .SmartDerivativeContractDescriptor ;
5
+ import net .finmath .smartcontract .product .xml .SDCXMLParser ;
6
+ import org .junit .jupiter .api .Test ;
7
+ import org .xml .sax .SAXException ;
8
+
9
+ import javax .xml .parsers .ParserConfigurationException ;
10
+ import java .io .IOException ;
11
+ import java .io .InputStream ;
12
+ import java .math .BigDecimal ;
13
+ import java .time .ZonedDateTime ;
14
+ import java .util .List ;
15
+
16
+ import static org .junit .jupiter .api .Assertions .*;
17
+
18
+ class SettlementGeneratorTest {
19
+
20
+ @ Test
21
+ void generateInitialSettlement () throws IOException , ParserConfigurationException , SAXException {
22
+ InputStream inputStream = SettlementGeneratorTest .class .getClassLoader ().getResourceAsStream ("net/finmath/smartcontract/valuation/historicalMarketData/marketdata_2008-05-02.xml" );
23
+ String marketDataString = new String (inputStream .readAllBytes ());
24
+
25
+ inputStream = SettlementGeneratorTest .class .getClassLoader ().getResourceAsStream ("net.finmath.smartcontract.product.xml/smartderivativecontract_with_rics.xml" );
26
+ String productString = new String (inputStream .readAllBytes ());
27
+ SmartDerivativeContractDescriptor sdc = SDCXMLParser .parse (productString );
28
+
29
+ String settlementString = new SettlementGenerator ().generateInitialSettlementXml (marketDataString , sdc )
30
+ .marginLimits (List .of (BigDecimal .ONE , BigDecimal .ZERO ))
31
+ .settlementValue (BigDecimal .ZERO )
32
+ //.settlementValuePrevious(BigDecimal.ZERO)
33
+ .settlementTimeNext (ZonedDateTime .now ())
34
+ .settlementValueNext (BigDecimal .ZERO )
35
+ .build ();
36
+
37
+ System .out .println (settlementString );
38
+
39
+ assertTrue (settlementString .contains ("ESTRSWP3Y" ));
40
+ assertTrue (settlementString .contains ("ESTRSWP1W" ));
41
+ assertTrue (settlementString .contains ("INITIAL" ));
42
+ assertFalse (settlementString .contains ("REGULAR" ));
43
+ assertTrue (settlementString .contains ("<marginValue>0</marginValue>" ));
44
+ assertTrue (settlementString .contains ("<marketData>" ));
45
+ assertTrue (settlementString .contains ("<requestTimeStamp>" ));
46
+ assertTrue (settlementString .contains ("<item>" ));
47
+ assertTrue (settlementString .contains ("<value>" ));
48
+ assertTrue (settlementString .contains ("<settlementTimeNext>" ));
49
+ assertTrue (settlementString .contains ("<settlementValueNext>" ));
50
+ assertTrue (settlementString .contains ("<settlementValuePrevious>" ));
51
+ assertTrue (settlementString .contains ("<settlementValue>" ));
52
+ assertTrue (settlementString .contains ("<marginLimits>" ));
53
+ }
54
+
55
+ @ Test
56
+ void generateRegularSettlement () throws IOException , ParserConfigurationException , SAXException {
57
+ InputStream inputStream = SettlementGeneratorTest .class .getClassLoader ().getResourceAsStream ("net/finmath/smartcontract/valuation/historicalMarketData/marketdata_2008-05-02.xml" );
58
+ String marketDataString = new String (inputStream .readAllBytes ());
59
+
60
+ inputStream = SettlementGeneratorTest .class .getClassLoader ().getResourceAsStream ("net.finmath.smartcontract.product.xml/smartderivativecontract_with_rics.xml" );
61
+ String productString = new String (inputStream .readAllBytes ());
62
+ SmartDerivativeContractDescriptor sdc = SDCXMLParser .parse (productString );
63
+
64
+ String settlementString = new SettlementGenerator ().generateRegularSettlementXml (marketDataString , sdc , BigDecimal .ONE )
65
+ .marginLimits (List .of (BigDecimal .ONE , BigDecimal .ZERO ))
66
+ .settlementValue (BigDecimal .ZERO )
67
+ .settlementValuePrevious (BigDecimal .ZERO )
68
+ .settlementTimeNext (ZonedDateTime .now ())
69
+ .settlementValueNext (BigDecimal .ZERO )
70
+ .build ();
71
+
72
+ System .out .println (settlementString );
73
+
74
+ assertTrue (settlementString .contains ("ESTRSWP3Y" ));
75
+ assertTrue (settlementString .contains ("ESTRSWP1W" ));
76
+ assertTrue (settlementString .contains ("REGULAR" ));
77
+ assertFalse (settlementString .contains ("INITIAL" ));
78
+ assertTrue (settlementString .contains ("<marginValue>1</marginValue>" ));
79
+ assertTrue (settlementString .contains ("<marketData>" ));
80
+ assertTrue (settlementString .contains ("<requestTimeStamp>" ));
81
+ assertTrue (settlementString .contains ("<item>" ));
82
+ assertTrue (settlementString .contains ("<value>" ));
83
+ assertTrue (settlementString .contains ("<settlementTimeNext>" ));
84
+ assertTrue (settlementString .contains ("<settlementValueNext>" ));
85
+ assertTrue (settlementString .contains ("<settlementValuePrevious>" ));
86
+ assertTrue (settlementString .contains ("<settlementValue>" ));
87
+ assertTrue (settlementString .contains ("<marginLimits>" ));
88
+ }
89
+
90
+ @ Test
91
+ void generateIncompleteSettlement_Exception () throws IOException , ParserConfigurationException , SAXException {
92
+ InputStream inputStream = SettlementGeneratorTest .class .getClassLoader ().getResourceAsStream ("net/finmath/smartcontract/valuation/historicalMarketData/marketdata_2008-05-02.xml" );
93
+ String marketDataString = new String (inputStream .readAllBytes ());
94
+
95
+ inputStream = SettlementGeneratorTest .class .getClassLoader ().getResourceAsStream ("net.finmath.smartcontract.product.xml/smartderivativecontract_with_rics.xml" );
96
+ String productString = new String (inputStream .readAllBytes ());
97
+ SmartDerivativeContractDescriptor sdc = SDCXMLParser .parse (productString );
98
+
99
+ SettlementGenerator generator = new SettlementGenerator ().generateRegularSettlementXml (marketDataString , sdc , BigDecimal .ONE )
100
+ .marginLimits (List .of (BigDecimal .ONE , BigDecimal .ZERO ))
101
+ .settlementValue (BigDecimal .ZERO )
102
+ .settlementValuePrevious (BigDecimal .ZERO )
103
+ .settlementTimeNext (ZonedDateTime .now ());
104
+ //.settlementValueNext(BigDecimal.ZERO);
105
+
106
+ assertThrows (SDCException .class , generator ::build );
107
+ }
108
+ }
0 commit comments