egg2ofx 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -0
- data/Rakefile +118 -0
- data/bin/egg2ofx +13 -0
- data/lib/egg/account.rb +8 -0
- data/lib/egg/date.rb +10 -0
- data/lib/egg/description.rb +14 -0
- data/lib/egg/money.rb +13 -0
- data/lib/egg/parser.rb +32 -0
- data/lib/egg/parsers/document_parser.rb +42 -0
- data/lib/egg/parsers/recent_transactions_document_parser.rb +19 -0
- data/lib/egg/parsers/recent_transactions_transaction_parser.rb +12 -0
- data/lib/egg/parsers/statement_document_parser.rb +17 -0
- data/lib/egg/parsers/statement_transaction_parser.rb +19 -0
- data/lib/egg/parsers/transaction_parser.rb +29 -0
- data/lib/egg/statement.rb +24 -0
- data/lib/egg/transaction.rb +33 -0
- data/lib/egg.rb +15 -0
- data/lib/ofx.rb +49 -0
- data/test/fixtures/recent_transactions.html +299 -0
- data/test/fixtures/statement.html +429 -0
- data/test/integration/recent_transactions_integration_test.rb +92 -0
- data/test/integration/statement_integration_test.rb +103 -0
- data/test/test_helper.rb +7 -0
- data/test/unit/description_test.rb +27 -0
- data/test/unit/ofx_test.rb +15 -0
- data/test/unit/parser_test.rb +24 -0
- data/test/unit/parsers/recent_transactions_transaction_parser_test.rb +23 -0
- data/test/unit/parsers/statement_transaction_parser_test.rb +23 -0
- metadata +102 -0
@@ -0,0 +1,429 @@
|
|
1
|
+
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<style type="text/css">
|
6
|
+
.visiblebyjs { display: none; }
|
7
|
+
</style>
|
8
|
+
|
9
|
+
|
10
|
+
<script type="text/javascript">
|
11
|
+
/* <![CDATA[ */
|
12
|
+
rum_script_host = "your.egg.com";
|
13
|
+
rum_image_host = "phonehome.egg.com";
|
14
|
+
if (typeof FM_Key == "undefined" && location.protocol.match(/^http/)) {
|
15
|
+
_FTop=new Date().getTime();
|
16
|
+
_FTopKey="3.3.48.21";
|
17
|
+
document.write("<s" + "cript s" + "rc=\"" + location.protocol +
|
18
|
+
"//" + rum_script_host + "/scripts/autogenerated/rum.js\">" +
|
19
|
+
"<\/s" + "cript>");
|
20
|
+
}
|
21
|
+
/* ]]> */
|
22
|
+
</script>
|
23
|
+
|
24
|
+
<script type="text/javascript">
|
25
|
+
/* <![CDATA[ */
|
26
|
+
if ((typeof $AA == "undefined") && location.protocol.indexOf("http") != -1) {
|
27
|
+
(BmonImage = new Image).src = location.protocol
|
28
|
+
+ "//" + rum_image_host + "/rum/data.gif?DT=2&vp=1&vt=3.3.48.21&l="
|
29
|
+
+ escape(document.location) + "&ts=" + (new Date).getTime();
|
30
|
+
}
|
31
|
+
/* ]]> */
|
32
|
+
</script>
|
33
|
+
|
34
|
+
<link rel="stylesheet" type="text/css" href="/styles/x-standard.css" /><link rel="stylesheet" type="text/css" href="/styles/x-options.css" /><link rel="stylesheet" type="text/css" href="/styles/x-new-options.css" /><link rel="stylesheet" type="text/css" href="/styles/x-navigation.css" /><link rel="stylesheet" type="text/css" href="/styles/x-progressbar.css" /><link rel="stylesheet" type="text/css" href="/styles/x-servicing.css" /><link rel="stylesheet" type="text/css" href="/sifr/sIFR-screen.css" media="screen" /><link rel="stylesheet" type="text/css" href="/sifr/sIFR-print.css" media="print" />
|
35
|
+
|
36
|
+
<!--[if IE 6]>
|
37
|
+
<link rel="stylesheet" type="text/css" href="/styles/ie6styles.css" />
|
38
|
+
<![endif]-->
|
39
|
+
|
40
|
+
<script type="text/javascript">
|
41
|
+
/* <![CDATA[ */
|
42
|
+
|
43
|
+
function createStyleRule(css) {
|
44
|
+
var style = document.createElement('style');
|
45
|
+
style.setAttribute('type', 'text/css');
|
46
|
+
if (style.styleSheet) //for IE
|
47
|
+
{
|
48
|
+
style.styleSheet.cssText = css;
|
49
|
+
} else //Nice browsers
|
50
|
+
{
|
51
|
+
var txt = document.createTextNode(css);
|
52
|
+
style.appendChild(txt);
|
53
|
+
}
|
54
|
+
|
55
|
+
var head = document.getElementsByTagName('head')[0];
|
56
|
+
head.appendChild(style);
|
57
|
+
}
|
58
|
+
|
59
|
+
createStyleRule("div.page *.hiddenbyjs {display:none;}");
|
60
|
+
createStyleRule("div.page *.visiblebyjs {display:block;}");
|
61
|
+
/* ]]> */
|
62
|
+
</script>
|
63
|
+
|
64
|
+
<script src="/scripts/prototype.js" type="text/javascript" ></script>
|
65
|
+
<script src="/scripts/scriptaculous.js?load=effects" type="text/javascript"></script>
|
66
|
+
<script src="/scripts/ProgressiveEnhancements.js" type="text/javascript" ></script>
|
67
|
+
|
68
|
+
<script src="/scripts/standard.js" type="text/javascript" ></script>
|
69
|
+
<script src="/scripts/iebugfix.js" type="text/javascript" ></script>
|
70
|
+
<script src="/sifr/sifr.js" type="text/javascript" ></script>
|
71
|
+
<script src="/scripts/sec.js" type="text/javascript" ></script>
|
72
|
+
|
73
|
+
<meta http-equiv="Pragma" content="no-cache" /><meta http-equiv="Cache-Control" content="no-cache" /><meta http-equiv="Expires" content="Mon, 01 Sep 2008 06:37:06 GMT" /><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
|
74
|
+
Egg Card Statements
|
75
|
+
</title></head>
|
76
|
+
<body id="layouta">
|
77
|
+
<form method="post" action="statements.aspx?index=0" id="aspnetForm" autocomplete="off">
|
78
|
+
<div>
|
79
|
+
<input type="hidden" name="sh1" id="sh1" value="478b22eace2d4df861ad50214413f5225b718a84" />
|
80
|
+
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
|
81
|
+
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
|
82
|
+
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="mPcwXWBROcjOda7dDY6sl8LEopZhhEFFgW3/7LqbHEphah1dl06zNe1HbYHffjfKWsDtIRB7wLi3CpGz7TcSee+XaBvTKXGd/hlWgJFpriCAFe63g2akIa/PWYSG/9s9zKqQC1NuEldN75XrNIvM/kFEL6phMkj4JYXeCgVq7A08AJ1UTI2/1ay6CubjdXusJ7ceRu6dgKGXkVKV7PKtqbcl//26xRF8FRXp71RMxegBYyI3svrJ5RHaVUxraXY7UoLjbJV2kZtMR8dSHRFnkZxIofeUVlZuuqFgmZSqYB4W5KRp00z5AqLnCLaYN4riaIbQyZp7dPRuYLQMwo7Ssh7FJ6qY4/JrbDWAFHak1S3oGqZ/sh1rjAJWdi1YP3mWmnShG09YCvqAKrtgIW387AgEAlYhOLOVab43Um2Z1jTtSe81T+pRBCunDAqOioJsU3Dz1QGxt8YO8R5baZxWq1b35nRjjSELR0mq+tmpmNCZqFh9aOoQjYY8huLwqMe5k88T2JH3Hf+8KyBK72YKYEeGBvhU9UUiqNyt3YRLLPsgcKXMf9ORSKz7mvE1sNU3eRDzehdcf5hpZQl5jt6QizmufJyorcOq2LC4YbuRByIR2TLrD8/sX6DSU0tgXgp9DA2QkaFlD2qoivP26zlEZXEKS/URDyfvyMsngjUSvhiLaSesfwdI/kpwgw8mF/o5XMFK1wIcaD30bJtm5cBqOLPDWOlJsFA5uHm+lytS2TrmLZgAS0/xwzE5PRDeUig7kdhoowCYX5Ja8UU3qWceZoeUVOozODGIfMWaoN9EWftY4CgbByUF5GK6qEbLtKUDGZSsflndkHS2YmvGIwl4EXreGs5nIz3f55eG5mLV+sS6qds8VXCakNwLjbYx/aGdEc5ShagPn0S6SUbGvSh5Xw2ZGn4DUAFnXSKMlwXMXjQ70xp5Si0aocVlCxTx2dlocgOFSDxnMg0o2Dsv6ZEXBaWufkr1/Mdv80+5CeIGdmenIoG6b6Ulg+A+15vujZjcCixU0znuyrYO80IfGDieUDlTu/9kb2KN/2kY5ODp1HkzC0p0V+aUSLBDRnEmloccn4d5/raESTr3AbMhC/tgh96UWSfXc4MrWKo0WuWVuudoR1/ckp/HmHwPJlEExahXHVWnnO8PVoWJFQBH/Dao4UrfL9/TrT/yYknyJs8/3UlrKmExAtRiYcGjCrY3P/2y9WP/095jmvI3aJ8ETK+VkEjs7K41SfDWSnVNz+e4A8mDBYtF1llfjnEhSh61qKU4" />
|
83
|
+
</div>
|
84
|
+
|
85
|
+
<script type="text/javascript">
|
86
|
+
<!--
|
87
|
+
var theForm = document.forms['aspnetForm'];
|
88
|
+
if (!theForm) {
|
89
|
+
theForm = document.aspnetForm;
|
90
|
+
}
|
91
|
+
function __doPostBack(eventTarget, eventArgument) {
|
92
|
+
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
|
93
|
+
theForm.__EVENTTARGET.value = eventTarget;
|
94
|
+
theForm.__EVENTARGUMENT.value = eventArgument;
|
95
|
+
theForm.submit();
|
96
|
+
}
|
97
|
+
}
|
98
|
+
// -->
|
99
|
+
</script>
|
100
|
+
|
101
|
+
|
102
|
+
<div class="topnav">
|
103
|
+
|
104
|
+
|
105
|
+
<div class="title"></div>
|
106
|
+
<div class="mainnavigation">
|
107
|
+
<h2>Main navigation</h2>
|
108
|
+
<ul>
|
109
|
+
<li class="skip"><a href="#maincontent">Skip to main content</a></li>
|
110
|
+
<li id="ctl00_topbar_ctl00_liApply"><a href="/customer/apply/select.aspx">Apply</a></li>
|
111
|
+
<li id="ctl00_topbar_ctl00_liLegalInfo"><a href="/customer/legalinfo.aspx">Legal info</a></li>
|
112
|
+
<li id="ctl00_topbar_ctl00_liContactUs"><a href="/customer/contactus.aspx">Contact us</a></li>
|
113
|
+
<li id="ctl00_topbar_ctl00_liNeedHelp" class="lastchild"><a href="/customer/needhelp.aspx">Need help?</a></li>
|
114
|
+
</ul>
|
115
|
+
</div>
|
116
|
+
<div class="servicingnavigation">
|
117
|
+
<div class="tabs">
|
118
|
+
<h2>Servicing options</h2>
|
119
|
+
<ul>
|
120
|
+
<li id="ctl00_topbar_ctl00_liYourMoney" class="active"><a href="/customer/yourmoney.aspx"><span>Your money</span></a></li>
|
121
|
+
<li id="ctl00_topbar_ctl00_liMoveMoney" class="inactive"><a href="/customer/movemoney/select.aspx"><span>Move money</span></a></li>
|
122
|
+
<li id="ctl00_topbar_ctl00_liSecurityDetails" class="inactive"><a href="/customer/securitydetails/select.aspx"><span>Security details</span></a></li>
|
123
|
+
<li id="ctl00_topbar_ctl00_liPersonalDetails" class="inactive"><a href="/customer/personaldetails/yourinformation.aspx"><span>Personal details</span></a></li>
|
124
|
+
</ul>
|
125
|
+
</div>
|
126
|
+
<a href="/security/logouthandler.ashx" class="logout"><span>log out</span></a>
|
127
|
+
</div>
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
</div>
|
132
|
+
<div id="page">
|
133
|
+
<div id="area1">
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
<div class="menu">
|
138
|
+
<h3>Egg Card</h3>
|
139
|
+
<ul>
|
140
|
+
<li id="ctl00_leftsidebar_ctl00_liRecentTransactions"><a href="/customer/eggcard/recenttransactions.aspx" id="ctl00_leftsidebar_ctl00_lnkRecentTransactions">Recent transactions</a></li>
|
141
|
+
<li id="ctl00_leftsidebar_ctl00_liStatements" class="selected"><a href="/customer/eggcard/statements.aspx" id="ctl00_leftsidebar_ctl00_lnkStatements">Statements</a></li>
|
142
|
+
<li id="ctl00_leftsidebar_ctl00_liViewPin"><a href="/customer/eggcard/viewpin.aspx" id="ctl00_leftsidebar_ctl00_lnkViewPin">View your PIN</a></li>
|
143
|
+
<li id="ctl00_leftsidebar_ctl00_liOneOffPayment"><a href="/customer/eggcard/makepayment.aspx" id="ctl00_leftsidebar_ctl00_lnkOneOffPayment">One-off payment</a></li>
|
144
|
+
<li id="ctl00_leftsidebar_ctl00_liBalanceTransfer"><a href="/customer/eggcard/balancetransfer.aspx" id="ctl00_leftsidebar_ctl00_lnkBalanceTransfer">Balance transfers</a></li>
|
145
|
+
<li id="ctl00_leftsidebar_ctl00_liDirectDebit"><a href="/customer/eggcard/directdebit/select.aspx" id="ctl00_leftsidebar_ctl00_lnkDirectDebit">Your Direct Debit</a></li>
|
146
|
+
<li id="ctl00_leftsidebar_ctl00_liCashBack"><a href="/customer/eggcard/cashback.aspx" id="ctl00_leftsidebar_ctl00_lnkCashBack">Cash back and offers</a></li>
|
147
|
+
<li id="ctl00_leftsidebar_ctl00_liCardAdmin"><a href="/customer/eggcard/admin/select.aspx" id="ctl00_leftsidebar_ctl00_lnkCardAdmin">Egg Card admin</a></li>
|
148
|
+
<li id="ctl00_leftsidebar_ctl00_liRquestLimit"><a href="/customer/eggcard/creditlimit.aspx" id="ctl00_leftsidebar_ctl00_lnkRequestLimit">Request credit limit</a></li>
|
149
|
+
<li id="ctl00_leftsidebar_ctl00_liCreditAgreement"><a href="/customer/eggcard/creditagreement.aspx" id="ctl00_leftsidebar_ctl00_lnkCreditAgreement">Credit agreements</a></li>
|
150
|
+
</ul>
|
151
|
+
</div>
|
152
|
+
|
153
|
+
|
154
|
+
</div>
|
155
|
+
<div id="area2">
|
156
|
+
|
157
|
+
<h1>Your Egg Card statement.</h1>
|
158
|
+
<script type="text/javascript">
|
159
|
+
/* <![CDATA[ */
|
160
|
+
function openTransactionsHelp() {
|
161
|
+
helpwin=window.open("/customer/eggcard/help/transactions.aspx",'EggCardTransactionsHelpHome','width=490,height=500,resize=yes,status=no,scrollbars=yes');
|
162
|
+
}
|
163
|
+
function openPaymentHelp() {
|
164
|
+
helpwin=window.open("/customer/eggcard/help/payment.aspx",'EggCardPaymentsHelpHome','width=490,height=500,resize=yes,status=no,scrollbars=yes');
|
165
|
+
}
|
166
|
+
function openCashBackHelp() {
|
167
|
+
helpwin=window.open("/customer/eggcard/help/cashback.aspx",'EggCardCashBackHelpHome','width=490,height=500,resize=yes,status=no,scrollbars=yes');
|
168
|
+
}
|
169
|
+
/* ]]> */
|
170
|
+
</script>
|
171
|
+
|
172
|
+
|
173
|
+
<fieldset>
|
174
|
+
<h2>Card details</h2>
|
175
|
+
<legend>Card details</legend>
|
176
|
+
<div class="input">
|
177
|
+
<label class="narrowed" for="lblCardTypeName">card</label>
|
178
|
+
<span id="lblCardTypeName" class="value">Egg Card</span>
|
179
|
+
</div>
|
180
|
+
<div class="input">
|
181
|
+
<label class="narrowed" for="lblCardNumber">card number</label>
|
182
|
+
<span id="lblCardNumber" class="creditcard">1234 4321 1234 4321</span>
|
183
|
+
<span id="lblCardNumberForPrint" class="creditcardforprint">1234 **** **** 4321</span>
|
184
|
+
</div>
|
185
|
+
<div class="input">
|
186
|
+
<label class="narrowed" for="lblCreditLimit">credit limit</label>
|
187
|
+
<span id="lblCreditLimit" class="value">£7,000.00</span>
|
188
|
+
</div>
|
189
|
+
<div class="calltoaction clear">
|
190
|
+
<a href="/customer/eggcard/admin/aboutyoureggcard.aspx">more details about your Egg Card</a>
|
191
|
+
</div>
|
192
|
+
</fieldset>
|
193
|
+
|
194
|
+
|
195
|
+
<fieldset>
|
196
|
+
<h2>Statement information</h2>
|
197
|
+
<legend>Statement information</legend>
|
198
|
+
<div class="input">
|
199
|
+
<label class="narrowed" for="ctl00_content_eggCardStatements_lstPreviousStatements">statement period</label>
|
200
|
+
<select name="ctl00$content$eggCardStatements$lstPreviousStatements" id="ctl00_content_eggCardStatements_lstPreviousStatements" class="superwide">
|
201
|
+
<option value="recent transactions">recent transactions</option>
|
202
|
+
<option selected="selected" value="18 July 2009 to 18 August 2009">18 July 2009 to 18 August 2009</option>
|
203
|
+
<option value="18 June 2009 to 18 July 2009">18 June 2009 to 18 July 2009</option>
|
204
|
+
<option value="18 May 2009 to 18 June 2009">18 May 2009 to 18 June 2009</option>
|
205
|
+
<option value="18 April 2009 to 18 May 2009">18 April 2009 to 18 May 2009</option>
|
206
|
+
<option value="18 March 2009 to 18 April 2009">18 March 2009 to 18 April 2009</option>
|
207
|
+
<option value="18 February 2009 to 18 March 2009">18 February 2009 to 18 March 2009</option>
|
208
|
+
<option value="18 January 2009 to 18 February 2009">18 January 2009 to 18 February 2009</option>
|
209
|
+
<option value="18 December 2008 to 18 January 2009">18 December 2008 to 18 January 2009</option>
|
210
|
+
<option value="18 November 2008 to 18 December 2008">18 November 2008 to 18 December 2008</option>
|
211
|
+
<option value="18 October 2008 to 18 November 2008">18 October 2008 to 18 November 2008</option>
|
212
|
+
<option value="18 September 2008 to 18 October 2008">18 September 2008 to 18 October 2008</option>
|
213
|
+
<option value="18 August 2008 to 18 September 2008">18 August 2008 to 18 September 2008</option>
|
214
|
+
</select><a id="ctl00_content_eggCardStatements_lbGotoStatement" class="calltoaction" title="View selected statement" href="javascript:__doPostBack('ctl00$content$eggCardStatements$lbGotoStatement','')">go</a>
|
215
|
+
</div>
|
216
|
+
<div class="input">
|
217
|
+
<label class="narrowed" for="lblStatementDate">statement date</label>
|
218
|
+
<span id="lblStatementDate" class="value">18 August 2009</span>
|
219
|
+
</div>
|
220
|
+
</fieldset>
|
221
|
+
|
222
|
+
|
223
|
+
<fieldset>
|
224
|
+
<h2>Payment details</h2>
|
225
|
+
<legend>Payment details</legend>
|
226
|
+
|
227
|
+
<div class="input">
|
228
|
+
<label class="narrowed" for="lblMinimumPayment">minimum payment due<br /><span class="subtext">(minimum payment plus any arrears)</span></label>
|
229
|
+
<span class="valuemonetary" id="lblMinimumPayment">£25.36</span>
|
230
|
+
<a id="help-minpayment-anchor" href="#help-minpayment" class="helpLink" rel="help" title="help with minimum payment due"><img alt="help with minimum payment due" src="/images/icons/icon_questmarkorange.gif" width="17" height="17" class="helpBtn"/></a>
|
231
|
+
</div>
|
232
|
+
<div class="input">
|
233
|
+
<label class="narrowed" for="lblNextPaymentDue">next payment due</label>
|
234
|
+
<span class="value" id="lblNextPaymentDue">01 September 2009</span>
|
235
|
+
</div>
|
236
|
+
|
237
|
+
<div class="calltoaction clear">
|
238
|
+
<a href="#" onclick="JavaScript:openPaymentHelp();return false;">ways to make an additional payment</a>
|
239
|
+
</div>
|
240
|
+
</fieldset>
|
241
|
+
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
|
246
|
+
<table id="tblTransactionsTable" class="grid" cellspacing="1" summary="Your transaction details">
|
247
|
+
<caption>Transaction details</caption>
|
248
|
+
<thead>
|
249
|
+
<tr>
|
250
|
+
<th class="date">date</th>
|
251
|
+
<th class="description">description</th>
|
252
|
+
<th class="amount">amount</th>
|
253
|
+
</tr>
|
254
|
+
</thead>
|
255
|
+
<tfoot>
|
256
|
+
<tr>
|
257
|
+
<th colspan="2">closing balance:</th>
|
258
|
+
<td class="money">£1,268.00 DR</td>
|
259
|
+
</tr>
|
260
|
+
</tfoot>
|
261
|
+
<tbody>
|
262
|
+
|
263
|
+
<tr>
|
264
|
+
<td class="date"></td>
|
265
|
+
<td class="description">OPENING BALANCE</td>
|
266
|
+
<td class="money">£4.59 DR</td>
|
267
|
+
</tr>
|
268
|
+
|
269
|
+
<tr class="alt">
|
270
|
+
<td class="date">20 Jul 2009</td>
|
271
|
+
<td class="description">LONDON S E RAIL RAMSGATE SS GB</td>
|
272
|
+
<td class="money">£87.50 DR</td>
|
273
|
+
</tr>
|
274
|
+
|
275
|
+
|
276
|
+
<tr>
|
277
|
+
<td class="date">03 Aug 2009</td>
|
278
|
+
<td class="description">AMZN PMTS 811-209-1987 WA</td>
|
279
|
+
<td class="money">£0.03 DR</td>
|
280
|
+
</tr>
|
281
|
+
|
282
|
+
<tr class="alt">
|
283
|
+
<td class="date"></td>
|
284
|
+
<td class="description">0.05 USD @ 1.6666666670</td>
|
285
|
+
<td class="money"></td>
|
286
|
+
</tr>
|
287
|
+
|
288
|
+
<tr>
|
289
|
+
<td class="date">03 Aug 2009</td>
|
290
|
+
<td class="description">PAYMENT 2 EGG . GB</td>
|
291
|
+
<td class="money">£9.79 CR</td>
|
292
|
+
</tr>
|
293
|
+
|
294
|
+
<tr class="alt">
|
295
|
+
<td class="date">18 Aug 2009</td>
|
296
|
+
<td class="description">CASH INTEREST AT 1.736 PER MONTH</td>
|
297
|
+
<td class="money">£10.07 DR</td>
|
298
|
+
</tr>
|
299
|
+
|
300
|
+
</tbody>
|
301
|
+
</table>
|
302
|
+
<div class="calltoaction">
|
303
|
+
<a href="#" onclick="JavaScript:openTransactionsHelp();return false;">find out more about your transactions</a>
|
304
|
+
</div>
|
305
|
+
<p><strong>If you do not pay off the full outstanding amount, we will allocate your payment to the outstanding balance in a specific order, which is set out in the <a href="/customer/eggcard/statementinformation.aspx">summary box</a> within
|
306
|
+
the statement information page. The way in which payments are allocated can make a significant difference to the amount of interest you will pay until the balance is cleared completely.</strong></p>
|
307
|
+
|
308
|
+
|
309
|
+
|
310
|
+
|
311
|
+
|
312
|
+
<fieldset>
|
313
|
+
<h2>Cash back details</h2>
|
314
|
+
<legend>Cash back details</legend>
|
315
|
+
<div class="input">
|
316
|
+
<label class="narrowed" for="lblCashBackThisMonth">cash back this month</label>
|
317
|
+
<span class="value" id="lblCashBackThisMonth">£1.11</span>
|
318
|
+
</div>
|
319
|
+
<div class="input">
|
320
|
+
<label class="narrowed" for="lblCashBackToDate">cash back to date</label>
|
321
|
+
<span id="lblCashBackToDate" class="value">£7.77</span>
|
322
|
+
</div>
|
323
|
+
<div class="calltoaction clear">
|
324
|
+
<a href="#" onclick="JavaScript:openCashBackHelp();return false;">learn more about cash back</a>
|
325
|
+
</div>
|
326
|
+
</fieldset>
|
327
|
+
|
328
|
+
|
329
|
+
|
330
|
+
<div class="informationmessage">
|
331
|
+
<h3>Information</h3>
|
332
|
+
|
333
|
+
<p>
|
334
|
+
|
335
|
+
IF YOU ONLY PAY YOUR MINIMUM PAYMENT, YOUR
|
336
|
+
|
337
|
+
ESTIMATED INTEREST (SEE EXPLANATION) ON YOUR
|
338
|
+
|
339
|
+
NEXT STATEMENT WILL BE 24.21
|
340
|
+
|
341
|
+
</p>
|
342
|
+
<p><strong>Minimum payments - if you make only the minimum payment each month, it will take you longer and cost you more to clear your balance.</strong> If you are unable to make the minimum repayment or are in financial difficulty, please call <strong>08456 000 296.</strong></p><p>The exchange rates we use to convert foreign transactions to Sterling are those in force when we process the transaction. To see the rest of your statement (including information about foreign transactions, estimated interest and interest calculation) select the link below.</p>
|
343
|
+
<div class="calltoaction">
|
344
|
+
<a href="/customer/eggcard/statementinformation.aspx" title="statement information">statement information</a>
|
345
|
+
</div>
|
346
|
+
</div>
|
347
|
+
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
<div class="choices">
|
354
|
+
<h3>Options</h3>
|
355
|
+
<ul>
|
356
|
+
<li><div class="colTwo"><span class="home anchor"><a href="/customer/yourmoney.aspx">your money</a></span></div></li>
|
357
|
+
</ul>
|
358
|
+
</div>
|
359
|
+
|
360
|
+
<div id="helpContents" class="hiddenbyjs" >
|
361
|
+
<h2>Need Help?</h2>
|
362
|
+
|
363
|
+
<div id="help-minpayment">
|
364
|
+
<p>If your account is up to date you are only required to pay the minimum payment. If you are in arrears, then the arrears amount will be added to your minimum payment to show you what you need to pay to bring your account up to date.</p>
|
365
|
+
</div>
|
366
|
+
<a href="#help-minpayment-anchor">back to where you were</a>
|
367
|
+
|
368
|
+
</div>
|
369
|
+
</div>
|
370
|
+
|
371
|
+
|
372
|
+
<!-- MarketingSidebar -->
|
373
|
+
|
374
|
+
<div id="divMarketing" class="tcs">
|
375
|
+
<h3>Promotional Links</h3>
|
376
|
+
<ul>
|
377
|
+
<li>
|
378
|
+
<script language='javascript' type='text/javascript'>
|
379
|
+
//<![CDATA[
|
380
|
+
document.write('<!-- Egg Banking plc Tue Sep 01 06:38:16 2009 --><!-- begin ContentInfo:Detail --><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="left"> <font face="Arial, Helvetica, sans-serif" size="2"> <TABLE width="128" border="0" cellspacing="0" cellpadding="0"><tr><td> <a href=\'http://new.egg.com/visitor/0,,3_11217--View_822,00.html\' target=\'_blank\'><img border="0" src="https://new.egg.com/com.egg/images/Prop/10Feb06_SecPhishing.gif" alt="find out more about security"></a></td> </tr></table><br><br> </font> </td> </tr></table><!-- end ContentInfo:Detail -->');
|
381
|
+
//]]>
|
382
|
+
</script></li>
|
383
|
+
<li>
|
384
|
+
<script language='javascript' type='text/javascript'>
|
385
|
+
//<![CDATA[
|
386
|
+
document.write('<!-- Egg Banking plc Tue Sep 01 06:38:16 2009 --><!-- begin ContentInfo:Detail --><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="left"> <font face="Arial, Helvetica, sans-serif" size="2"> <TABLE width="128" border="0" cellspacing="0" cellpadding="0"><tr><td><a href="https://new.egg.com/viewpin"><img border="0" src="https://new.egg.com/com.egg/images/Prop/tcs_doyouknowpin.gif" alt="check your PIN"></a></td></tr></table><br><br> </font> </td> </tr></table><!-- end ContentInfo:Detail -->');
|
387
|
+
//]]>
|
388
|
+
</script></li>
|
389
|
+
</ul>
|
390
|
+
</div>
|
391
|
+
|
392
|
+
<!-- MarketingSidebar end -->
|
393
|
+
|
394
|
+
</div>
|
395
|
+
<div>
|
396
|
+
<input name="PAGE_ID" id="PAGE_ID" type="hidden" value="EggCardStatements" />
|
397
|
+
</div>
|
398
|
+
<div>
|
399
|
+
<input type="hidden" id="individual_id" name="individual_id" value="1176359" /></div>
|
400
|
+
|
401
|
+
<div>
|
402
|
+
|
403
|
+
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="QB2GKCgzAwFbuglOtGomrlki7bELc9tThAZtGgKFlAAyigI4AosQP/FFUBdM6noX" />
|
404
|
+
</div></form>
|
405
|
+
|
406
|
+
|
407
|
+
<div>
|
408
|
+
<span style="behavior:url(#default#clientCaps)" id="oCC"></span>
|
409
|
+
</div>
|
410
|
+
<script type="text/javascript">
|
411
|
+
/* <![CDATA[ */
|
412
|
+
_FBottomKey="3.3.48.21";
|
413
|
+
if(typeof($FM_MarkStop)=="function") $FM_MarkStop();
|
414
|
+
/* ]]> */
|
415
|
+
</script>
|
416
|
+
<noscript>
|
417
|
+
<div>
|
418
|
+
<img src="https://phonehome.egg.com/rum/data.gif?DT=3&vp=1&vt=3.3.48.21" style="border:0;" width="1" height="1" alt=" " />
|
419
|
+
</div>
|
420
|
+
</noscript>
|
421
|
+
<script type="text/javascript">
|
422
|
+
/* <![CDATA[ */
|
423
|
+
if(typeof sIFR == "function"){
|
424
|
+
sIFR.replaceElement(named({sSelector:"h1", sFlashSrc:"/sifr/sifr.swf", sColor:"#333333", sEmColor:"#999999", sStrongColor:"#cccccc", sSpanColor:"#FF9900", sLinkColor:"#444444", sBgColor:"#FFFFFF", sHoverColor:"#999999"}));
|
425
|
+
}
|
426
|
+
/* ]]> */
|
427
|
+
</script>
|
428
|
+
</body>
|
429
|
+
</html>
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
+
|
3
|
+
module Egg
|
4
|
+
|
5
|
+
class RecentTransactionsParserIntegrationTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
html = File.read(File.join(FIXTURES, 'recent_transactions.html'))
|
9
|
+
@ofx = Egg::Parser.new(html).to_ofx
|
10
|
+
@xml = Hpricot::XML(@ofx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_include_the_xml_processing_instruction
|
14
|
+
xml_processing_instruction = @ofx.split("\n")[0] # Should be on the first line
|
15
|
+
doc = Hpricot::XML(xml_processing_instruction)
|
16
|
+
assert (doc%':eq(0)').xmldecl?
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_include_the_ofx_processing_instruction
|
20
|
+
ofx_processing_instruction = @ofx.split("\n")[1] # Should be on the second line
|
21
|
+
doc = Hpricot::XML(ofx_processing_instruction)
|
22
|
+
assert (doc%':eq(0)').procins?
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_have_the_ofxheader_version_as_the_first_ofx_processing_instruction_attribute_for_wesabe_compatibility
|
26
|
+
ofx_processing_instruction = @ofx.split("\n")[1] # Should be on the second line
|
27
|
+
assert_match /\?OFX OFXHEADER="200"/, ofx_processing_instruction
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_declare_the_currency_as_gbp
|
31
|
+
assert_equal 'GBP', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:CURDEF).inner_text
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_extract_the_account_number_from_the_html
|
35
|
+
assert_equal '1234 4321 1234 4321', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:CCACCTFROM/:ACCTID).inner_text
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_extract_the_start_date_of_the_transactions_from_the_html
|
39
|
+
assert_equal '20091018', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/:DTSTART).inner_text
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_extract_the_end_date_of_the_transactions_from_the_html
|
43
|
+
assert_equal '20091105', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/:DTEND).inner_text
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_contain_the_three_transactions_extracted_from_the_html
|
47
|
+
assert_equal 3, (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/:STMTTRN).length
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_extract_the_first_debit_transaction
|
51
|
+
(@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/"STMTTRN:eq(0)").each do |transaction|
|
52
|
+
assert_equal 'DEBIT', (transaction/:TRNTYPE).inner_text
|
53
|
+
assert_equal '20091018', (transaction/:DTPOSTED).inner_text
|
54
|
+
assert_equal 'EST ANGLIA HGH LDG CR', (transaction/:NAME).inner_text
|
55
|
+
assert_equal 'BRANDON', (transaction/:MEMO).inner_text
|
56
|
+
assert_equal '-6.4', (transaction/:TRNAMT).inner_text
|
57
|
+
assert_equal '4c24622f339bfcd2650bf124935225b1', (transaction/:FITID).inner_text
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_should_extract_the_second_credit_transaction
|
62
|
+
(@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/"STMTTRN:eq(1)").each do |transaction|
|
63
|
+
assert_equal 'CREDIT', (transaction/:TRNTYPE).inner_text
|
64
|
+
assert_equal '20091102', (transaction/:DTPOSTED).inner_text
|
65
|
+
assert_equal 'PAYMENT 2 EGG', (transaction/:NAME).inner_text
|
66
|
+
assert_equal '.', (transaction/:MEMO).inner_text
|
67
|
+
assert_equal '71.77', (transaction/:TRNAMT).inner_text
|
68
|
+
assert_equal 'eecbd3a8bb9789a9af61575d5133fbcd', (transaction/:FITID).inner_text
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_should_extract_the_third_debit_transaction
|
73
|
+
(@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/"STMTTRN:eq(2)").each do |transaction|
|
74
|
+
assert_equal 'DEBIT', (transaction/:TRNTYPE).inner_text
|
75
|
+
assert_equal '20091105', (transaction/:DTPOSTED).inner_text
|
76
|
+
assert_equal 'LONDON & S E RAIL', (transaction/:NAME).inner_text
|
77
|
+
assert_equal 'LONDON BRIDG', (transaction/:MEMO).inner_text
|
78
|
+
assert_equal '-16.65', (transaction/:TRNAMT).inner_text
|
79
|
+
assert_equal '33c33de7e823d9d1c2f9ea68671e5589', (transaction/:FITID).inner_text
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_should_extract_the_statement_balance_from_the_html
|
84
|
+
assert_equal '-4708.31', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:LEDGERBAL/:BALAMT).inner_text
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_should_extract_the_date_of_the_statement_balance_from_the_html
|
88
|
+
assert_equal '20091105', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:LEDGERBAL/:DTASOF).inner_text
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
+
|
3
|
+
module Egg
|
4
|
+
|
5
|
+
class StatmentParserIntegrationTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
html = File.read(File.join(FIXTURES, 'statement.html'))
|
9
|
+
@ofx = Egg::Parser.new(html).to_ofx
|
10
|
+
@xml = Hpricot::XML(@ofx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_include_the_xml_processing_instruction
|
14
|
+
xml_processing_instruction = @ofx.split("\n")[0] # Should be on the first line
|
15
|
+
doc = Hpricot::XML(xml_processing_instruction)
|
16
|
+
assert (doc%':eq(0)').xmldecl?
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_include_the_ofx_processing_instruction
|
20
|
+
ofx_processing_instruction = @ofx.split("\n")[1] # Should be on the second line
|
21
|
+
doc = Hpricot::XML(ofx_processing_instruction)
|
22
|
+
assert (doc%':eq(0)').procins?
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_have_the_ofxheader_version_as_the_first_ofx_processing_instruction_attribute_for_wesabe_compatibility
|
26
|
+
ofx_processing_instruction = @ofx.split("\n")[1] # Should be on the second line
|
27
|
+
assert_match /\?OFX OFXHEADER="200"/, ofx_processing_instruction
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_declare_the_currency_as_gbp
|
31
|
+
assert_equal 'GBP', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:CURDEF).inner_text
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_extract_the_account_number_from_the_html
|
35
|
+
assert_equal '1234 4321 1234 4321', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:CCACCTFROM/:ACCTID).inner_text
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_extract_the_start_date_of_the_transactions_from_the_html
|
39
|
+
assert_equal '20090718', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/:DTSTART).inner_text
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_extract_the_end_date_of_the_transactions_from_the_html
|
43
|
+
assert_equal '20090818', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/:DTEND).inner_text
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_contain_the_four_transactions_extracted_from_the_html
|
47
|
+
assert_equal 4, (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/:STMTTRN).length
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_extract_the_first_debit_transaction
|
51
|
+
(@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/"STMTTRN:eq(0)").each do |transaction|
|
52
|
+
assert_equal 'DEBIT', (transaction/:TRNTYPE).inner_text
|
53
|
+
assert_equal '20090720', (transaction/:DTPOSTED).inner_text
|
54
|
+
assert_equal 'LONDON S E RAIL', (transaction/:NAME).inner_text
|
55
|
+
assert_equal 'RAMSGATE SS', (transaction/:MEMO).inner_text
|
56
|
+
assert_equal '-87.5', (transaction/:TRNAMT).inner_text
|
57
|
+
assert_equal 'aff05b64c9f603848051ba9afe8ff666', (transaction/:FITID).inner_text
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_should_extract_the_second_multiline_debit_transaction
|
62
|
+
(@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/"STMTTRN:eq(1)").each do |transaction|
|
63
|
+
assert_equal 'DEBIT', (transaction/:TRNTYPE).inner_text
|
64
|
+
assert_equal '20090803', (transaction/:DTPOSTED).inner_text
|
65
|
+
assert_equal 'AMZN PMTS', (transaction/:NAME).inner_text
|
66
|
+
assert_equal '811-209-1987', (transaction/:MEMO).inner_text
|
67
|
+
assert_equal '-0.03', (transaction/:TRNAMT).inner_text
|
68
|
+
assert_equal 'f8f014252d03edd2a2d2bdf3b6fac940', (transaction/:FITID).inner_text
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_should_extract_the_third_credit_transaction
|
73
|
+
(@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/"STMTTRN:eq(2)").each do |transaction|
|
74
|
+
assert_equal 'CREDIT', (transaction/:TRNTYPE).inner_text
|
75
|
+
assert_equal '20090803', (transaction/:DTPOSTED).inner_text
|
76
|
+
assert_equal 'PAYMENT 2 EGG', (transaction/:NAME).inner_text
|
77
|
+
assert_equal '.', (transaction/:MEMO).inner_text
|
78
|
+
assert_equal '9.79', (transaction/:TRNAMT).inner_text
|
79
|
+
assert_equal '0f7f4f3274e4042be4c51d5cd6e151e0', (transaction/:FITID).inner_text
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_should_extract_the_interest_transaction
|
84
|
+
(@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:BANKTRANLIST/"STMTTRN:eq(3)").each do |transaction|
|
85
|
+
assert_equal 'INT', (transaction/:TRNTYPE).inner_text
|
86
|
+
assert_equal '20090818', (transaction/:DTPOSTED).inner_text
|
87
|
+
assert_equal 'CASH INTEREST AT 1.736 PER MONTH', (transaction/:NAME).inner_text
|
88
|
+
assert_equal '', (transaction/:MEMO).inner_text
|
89
|
+
assert_equal '-10.07', (transaction/:TRNAMT).inner_text
|
90
|
+
assert_equal 'dda1fbfc6316ab5287bef98b0f251250', (transaction/:FITID).inner_text
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_should_extract_the_statement_balance_from_the_html
|
95
|
+
assert_equal '-1268.0', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:LEDGERBAL/:BALAMT).inner_text
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_should_extract_the_date_of_the_statement_balance_from_the_html
|
99
|
+
assert_equal '20090818', (@xml/:OFX/:CREDITCARDMSGSRSV1/:CCSTMTTRNRS/:CCSTMTRS/:LEDGERBAL/:DTASOF).inner_text
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|