ofx-parser-bp 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +14 -0
- data/Manifest.txt +14 -0
- data/README.txt +103 -0
- data/Rakefile +17 -0
- data/lib/class-extension.rb +154 -0
- data/lib/mcc.rb +674 -0
- data/lib/ofx-parser.rb +236 -0
- data/lib/ofx.rb +189 -0
- data/test/fixtures/banking.ofx.sgml +87 -0
- data/test/fixtures/creditcard.ofx.sgml +79 -0
- data/test/fixtures/list.ofx.sgml +53 -0
- data/test/fixtures/malformed_header.ofx.sgml +106 -0
- data/test/fixtures/with_spaces.ofx.sgml +28 -0
- data/test/test_ofx_parser.rb +264 -0
- metadata +95 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
OFXHEADER:100
|
2
|
+
DATA:OFXSGML
|
3
|
+
VERSION:102
|
4
|
+
SECURITY:NONE
|
5
|
+
ENCODING:USASCII
|
6
|
+
CHARSET:1252
|
7
|
+
COMPRESSION:NONE
|
8
|
+
OLDFILEUID:NONE
|
9
|
+
NEWFILEUID:NONE
|
10
|
+
|
11
|
+
<OFX>
|
12
|
+
<SIGNONMSGSRSV1>
|
13
|
+
<SONRS>
|
14
|
+
<STATUS>
|
15
|
+
<CODE>0</CODE>
|
16
|
+
<SEVERITY>INFO</SEVERITY>
|
17
|
+
</STATUS>
|
18
|
+
<DTSERVER>20070623192010</DTSERVER>
|
19
|
+
<LANGUAGE>ENG</LANGUAGE>
|
20
|
+
<FI>
|
21
|
+
<ORG>Citigroup</ORG>
|
22
|
+
<FID>24909</FID>
|
23
|
+
</FI>
|
24
|
+
<INTU.BID>24909</INTU.BID>
|
25
|
+
</SONRS>
|
26
|
+
</SIGNONMSGSRSV1>
|
27
|
+
<CREDITCARDMSGSRSV1>
|
28
|
+
<CCSTMTTRNRS>
|
29
|
+
<TRNUID>0</TRNUID>
|
30
|
+
<STATUS>
|
31
|
+
<CODE>0</CODE>
|
32
|
+
<SEVERITY>INFO</SEVERITY>
|
33
|
+
</STATUS>
|
34
|
+
<CCSTMTRS>
|
35
|
+
<CURDEF>USD</CURDEF>
|
36
|
+
<CCACCTFROM>
|
37
|
+
<ACCTID>XXXXXXXXXXXX1111</ACCTID>
|
38
|
+
</CCACCTFROM>
|
39
|
+
<BANKTRANLIST>
|
40
|
+
<DTSTART>20070509120000</DTSTART>
|
41
|
+
<DTEND>20070608120000</DTEND>
|
42
|
+
<STMTTRN>
|
43
|
+
<TRNTYPE>DEBIT</TRNTYPE>
|
44
|
+
<DTPOSTED>20070510170000</DTPOSTED>
|
45
|
+
<TRNAMT>-19.17</TRNAMT>
|
46
|
+
<FITID>xx</FITID>
|
47
|
+
<SIC>5912</SIC>
|
48
|
+
<NAME>WALGREEN 34638675 ANYTOWN</NAME>
|
49
|
+
</STMTTRN>
|
50
|
+
<STMTTRN>
|
51
|
+
<TRNTYPE>DEBIT</TRNTYPE>
|
52
|
+
<DTPOSTED>20070512170000</DTPOSTED>
|
53
|
+
<TRNAMT>-12.0</TRNAMT>
|
54
|
+
<FITID>yy-56</FITID>
|
55
|
+
<SIC>7933</SIC>
|
56
|
+
<NAME>SUNSET BOWL ANYTOWN</NAME>
|
57
|
+
</STMTTRN>
|
58
|
+
<STMTTRN>
|
59
|
+
<TRNTYPE>CREDIT</TRNTYPE>
|
60
|
+
<DTPOSTED>20070526170000</DTPOSTED>
|
61
|
+
<TRNAMT>11.01</TRNAMT>
|
62
|
+
<FITID>78-9</FITID>
|
63
|
+
<SIC>0000</SIC>
|
64
|
+
<NAME>ELECTRONIC PAYMENT-THANK YOU</NAME>
|
65
|
+
</STMTTRN>
|
66
|
+
</BANKTRANLIST>
|
67
|
+
<LEDGERBAL>
|
68
|
+
<BALAMT>-1111.01</BALAMT>
|
69
|
+
<DTASOF>20070623192013</DTASOF>
|
70
|
+
</LEDGERBAL>
|
71
|
+
<AVAILBAL>
|
72
|
+
<BALAMT>19000.99</BALAMT>
|
73
|
+
<DTASOF>20070623192013</DTASOF>
|
74
|
+
</AVAILBAL>
|
75
|
+
</CCSTMTRS>
|
76
|
+
</CCSTMTTRNRS>
|
77
|
+
</CREDITCARDMSGSRSV1>
|
78
|
+
</OFX>
|
79
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
OFXHEADER:100
|
2
|
+
DATA:OFXSGML
|
3
|
+
VERSION:102
|
4
|
+
SECURITY:NONE
|
5
|
+
ENCODING:USASCII
|
6
|
+
CHARSET:1252
|
7
|
+
COMPRESSION:NONE
|
8
|
+
OLDFILEUID:NONE
|
9
|
+
NEWFILEUID:e1dffb32-0a88-1111-12fb-111056c11111
|
10
|
+
|
11
|
+
<OFX>
|
12
|
+
<SIGNONMSGSRSV1>
|
13
|
+
<SONRS>
|
14
|
+
<STATUS>
|
15
|
+
<CODE>0
|
16
|
+
<SEVERITY>INFO
|
17
|
+
</STATUS>
|
18
|
+
<DTSERVER>20070702051227
|
19
|
+
<LANGUAGE>ENG
|
20
|
+
<DTPROFUP>20040828230101
|
21
|
+
<FI>
|
22
|
+
<ORG>Citigroup
|
23
|
+
<FID>24909
|
24
|
+
</FI>
|
25
|
+
<SESSCOOKIE>11111
|
26
|
+
</SONRS>
|
27
|
+
</SIGNONMSGSRSV1>
|
28
|
+
<SIGNUPMSGSRSV1>
|
29
|
+
<ACCTINFOTRNRS>
|
30
|
+
<TRNUID>e1dffb32-0a88-1111-12fb-111056c11111
|
31
|
+
<STATUS>
|
32
|
+
<CODE>0
|
33
|
+
<SEVERITY>INFO
|
34
|
+
</STATUS>
|
35
|
+
<CLTCOOKIE>4
|
36
|
+
<ACCTINFORS>
|
37
|
+
<DTACCTUP>20070702045709
|
38
|
+
<ACCTINFO>
|
39
|
+
<DESC>CREDIT CARD ************1111
|
40
|
+
<CCACCTINFO>
|
41
|
+
<CCACCTFROM>
|
42
|
+
<ACCTID>XXXXXXXXXXXX1111
|
43
|
+
</CCACCTFROM>
|
44
|
+
<SUPTXDL>Y
|
45
|
+
<XFERSRC>N
|
46
|
+
<XFERDEST>N
|
47
|
+
<SVCSTATUS>ACTIVE
|
48
|
+
</CCACCTINFO>
|
49
|
+
</ACCTINFO>
|
50
|
+
</ACCTINFORS>
|
51
|
+
</ACCTINFOTRNRS>
|
52
|
+
</SIGNUPMSGSRSV1>
|
53
|
+
</OFX>
|
@@ -0,0 +1,106 @@
|
|
1
|
+
|
2
|
+
OFXHEADER:100
|
3
|
+
DATA:OFXSGML
|
4
|
+
VERSION:102
|
5
|
+
SECURITY:NONE
|
6
|
+
ENCODING:USASCII
|
7
|
+
CHARSET:1252
|
8
|
+
COMPRESSION:NONE
|
9
|
+
OLDFILEUID:NONE
|
10
|
+
NEWFILEUID:NONE
|
11
|
+
<OFX>
|
12
|
+
<SIGNONMSGSRSV1>
|
13
|
+
<SONRS>
|
14
|
+
<STATUS>
|
15
|
+
<CODE>0
|
16
|
+
<SEVERITY>INFO
|
17
|
+
</STATUS>
|
18
|
+
<DTSERVER>20070820120000[0:GMT]
|
19
|
+
<LANGUAGE>ENG
|
20
|
+
</SONRS>
|
21
|
+
</SIGNONMSGSRSV1>
|
22
|
+
<CREDITCARDMSGSRSV1>
|
23
|
+
<CCSTMTTRNRS>
|
24
|
+
<TRNUID>1
|
25
|
+
<STATUS>
|
26
|
+
<CODE>0
|
27
|
+
<SEVERITY>INFO
|
28
|
+
<MESSAGE>Success
|
29
|
+
</STATUS>
|
30
|
+
<CCSTMTRS>
|
31
|
+
<CURDEF>USD
|
32
|
+
<CCACCTFROM>
|
33
|
+
<ACCTID>xxxxxxxxxxxxxxxx
|
34
|
+
</CCACCTFROM>
|
35
|
+
<BANKTRANLIST>
|
36
|
+
<DTSTART>20070706120000[0:GMT]
|
37
|
+
<DTEND>20070820120000[0:GMT]
|
38
|
+
<STMTTRN>
|
39
|
+
<TRNTYPE>CREDIT
|
40
|
+
<DTPOSTED>20070719120000[0:GMT]
|
41
|
+
<TRNAMT>4.68
|
42
|
+
<FITID>GEN20070719-0000004.68PERFECTCARD_REB00000
|
43
|
+
<NAME>MY CREDIT CARD
|
44
|
+
</STMTTRN>
|
45
|
+
<STMTTRN>
|
46
|
+
<TRNTYPE>DEBIT
|
47
|
+
<DTPOSTED>20070814120000[0:GMT]
|
48
|
+
<TRNAMT>-59.99
|
49
|
+
<FITID>2007081425411177225225085596201
|
50
|
+
<NAME>Another Store
|
51
|
+
</STMTTRN>
|
52
|
+
<STMTTRN>
|
53
|
+
<TRNTYPE>DEBIT
|
54
|
+
<DTPOSTED>20070815120000[0:GMT]
|
55
|
+
<TRNAMT>-1.50
|
56
|
+
<FITID>2007081555541867296004064778618
|
57
|
+
<NAME>PATHTVM 33RD STREET
|
58
|
+
</STMTTRN>
|
59
|
+
<STMTTRN>
|
60
|
+
<TRNTYPE>DEBIT
|
61
|
+
<DTPOSTED>20070817120000[0:GMT]
|
62
|
+
<TRNAMT>-39.37
|
63
|
+
<FITID>2007081755432867228100699618500
|
64
|
+
<NAME>Yet another store
|
65
|
+
</STMTTRN>
|
66
|
+
<STMTTRN>
|
67
|
+
<TRNTYPE>DEBIT
|
68
|
+
<DTPOSTED>20070814120000[0:GMT]
|
69
|
+
<TRNAMT>-381.21
|
70
|
+
<FITID>2007081455432867226000370175054
|
71
|
+
<NAME>Store
|
72
|
+
</STMTTRN>
|
73
|
+
<STMTTRN>
|
74
|
+
<TRNTYPE>DEBIT
|
75
|
+
<DTPOSTED>20070803120000[0:GMT]
|
76
|
+
<TRNAMT>-108.38
|
77
|
+
<FITID>2007080325411178214214070266502
|
78
|
+
<NAME>Store
|
79
|
+
</STMTTRN>
|
80
|
+
<STMTTRN>
|
81
|
+
<TRNTYPE>DEBIT
|
82
|
+
<DTPOSTED>20070819120000[0:GMT]
|
83
|
+
<TRNAMT>-27.00
|
84
|
+
<FITID>2007081955500807229017000653817
|
85
|
+
<NAME>ZENITH PARKING LLC
|
86
|
+
</STMTTRN>
|
87
|
+
<STMTTRN>
|
88
|
+
<TRNTYPE>DEBIT
|
89
|
+
<DTPOSTED>20070730120000[0:GMT]
|
90
|
+
<TRNAMT>-59.61
|
91
|
+
<FITID>2007073085486757210101972840130
|
92
|
+
<NAME>CHRYSLER CAMERA REPAIR
|
93
|
+
</STMTTRN>
|
94
|
+
</BANKTRANLIST>
|
95
|
+
<LEDGERBAL>
|
96
|
+
<BALAMT>-2.00
|
97
|
+
<DTASOF>20070820120000[0:GMT]
|
98
|
+
</LEDGERBAL>
|
99
|
+
<AVAILBAL>
|
100
|
+
<BALAMT>1.00
|
101
|
+
<DTASOF>20070820120000[0:GMT]
|
102
|
+
</AVAILBAL>
|
103
|
+
</CCSTMTRS>
|
104
|
+
</CCSTMTTRNRS>
|
105
|
+
</CREDITCARDMSGSRSV1>
|
106
|
+
</OFX>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
OFXHEADER:100
|
2
|
+
DATA:OFXSGML
|
3
|
+
VERSION:102
|
4
|
+
SECURITY:NONE
|
5
|
+
ENCODING:USASCII
|
6
|
+
CHARSET:1252
|
7
|
+
COMPRESSION:NONE
|
8
|
+
OLDFILEUID:
|
9
|
+
NEWFILEUID:NONE
|
10
|
+
|
11
|
+
<OFX>
|
12
|
+
<SIGNONMSGSRSV1>
|
13
|
+
<SONRS>
|
14
|
+
<STATUS>
|
15
|
+
<CODE> 0
|
16
|
+
<SEVERITY> INFO
|
17
|
+
<MESSAGE> The user is authentic; operation succeeded.
|
18
|
+
</STATUS>
|
19
|
+
<DTSERVER> 20070623142635.169[-5:CDT]
|
20
|
+
<LANGUAGE>ENG
|
21
|
+
<FI>
|
22
|
+
<ORG> U.S. Bank
|
23
|
+
<FID> 1402
|
24
|
+
</FI>
|
25
|
+
<INTU.BID>1402
|
26
|
+
</SONRS>
|
27
|
+
</SIGNONMSGSRSV1>
|
28
|
+
</OFX>
|
@@ -0,0 +1,264 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'ofx-parser'
|
3
|
+
|
4
|
+
class OfxParserTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
OFX_FILES = {}
|
7
|
+
|
8
|
+
fixtures_dir = File.dirname(__FILE__) + '/fixtures'
|
9
|
+
|
10
|
+
# Load up the xml files
|
11
|
+
Dir.open(fixtures_dir).each do |fn|
|
12
|
+
next unless fn =~ /\.ofx\.sgml$/
|
13
|
+
|
14
|
+
ofx = File.read(fixtures_dir + "/#{fn}")
|
15
|
+
ofx.gsub!(/\r?\n/,"\r\n") # change line endings to \r\n
|
16
|
+
|
17
|
+
OFX_FILES[fn.scan(/^[^.]*/).to_s.to_sym] = ofx
|
18
|
+
end
|
19
|
+
|
20
|
+
def setup
|
21
|
+
# empty ofx parser - useful for testing other methods independently
|
22
|
+
@parser = OfxParser::OfxParser
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_pre_process_strips_spaces
|
26
|
+
header, body = @parser.pre_process(OFX_FILES[:with_spaces])
|
27
|
+
|
28
|
+
assert_no_match(/>\s+.*?</, body, "should be no spaces after a tag close")
|
29
|
+
assert_no_match(/>.*?\s+</, body, "should be no spaces before a tag close")
|
30
|
+
assert_no_match(/>\s+</, body, "should be no spaces between two tags")
|
31
|
+
assert_match("The user is authentic; operation succeeded.", body, "content in tags should not be altered")
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_pre_process_header
|
35
|
+
header, body = @parser.pre_process(OFX_FILES[:with_spaces])
|
36
|
+
|
37
|
+
assert_equal 9, header.keys.size
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_parse_datetime
|
41
|
+
assert_equal DateTime.civil(2007, 6, 22, 19, 0, 0, Rational(-5,24)), @parser.parse_datetime('20070622190000.200[-5:CDT]')
|
42
|
+
assert_equal DateTime.civil(2007, 6, 22, 19, 0, 0, Rational(9,24)), @parser.parse_datetime('20070622190000.200[+9.0:JST]')
|
43
|
+
assert_equal DateTime.civil(2007, 6, 22), @parser.parse_datetime('20070622')
|
44
|
+
assert_equal DateTime.civil(2007, 6, 22, 19, 0, 0), @parser.parse_datetime('20070622190000')
|
45
|
+
assert_equal DateTime.civil(2007, 6, 22, 19, 0, 0), @parser.parse_datetime('20070622190000.200')
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_sign_on
|
49
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:with_spaces])
|
50
|
+
|
51
|
+
assert_equal '0', ofx.sign_on.status.code
|
52
|
+
assert_equal 'INFO', ofx.sign_on.status.severity
|
53
|
+
assert_equal 'The user is authentic; operation succeeded.', ofx.sign_on.status.message
|
54
|
+
assert_equal 'Success', ofx.sign_on.status.code_desc
|
55
|
+
|
56
|
+
assert_equal DateTime.civil(2007,6,23,14,26,35,Rational(-5, 24)), ofx.sign_on.date
|
57
|
+
assert_equal 'ENG', ofx.sign_on.language
|
58
|
+
assert_equal 'U.S. Bank', ofx.sign_on.institute.name
|
59
|
+
assert_equal '1402', ofx.sign_on.institute.id
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_no_accounts
|
63
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:with_spaces])
|
64
|
+
|
65
|
+
assert_equal 0, ofx.accounts.size
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_banking
|
69
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:banking])
|
70
|
+
|
71
|
+
acct = ofx.bank_account
|
72
|
+
|
73
|
+
assert_equal '103333333333', acct.number
|
74
|
+
assert_equal '033000033', acct.routing_number
|
75
|
+
assert_equal :CHECKING, acct.type
|
76
|
+
assert_equal '1234.09', acct.balance
|
77
|
+
assert_equal 123409, acct.balance_in_pennies
|
78
|
+
assert_equal DateTime.civil(2007,6,23,14,26,35,Rational(-5, 24)), acct.balance_date
|
79
|
+
assert_equal '9C24229A0077EAA50000011353C9E00743FC', acct.transaction_uid
|
80
|
+
|
81
|
+
statement = acct.statement
|
82
|
+
|
83
|
+
assert_equal 'USD', statement.currency
|
84
|
+
assert_equal DateTime.civil(2007,6,4,19,0,0,Rational(-5, 24)), statement.start_date
|
85
|
+
assert_equal DateTime.civil(2007,6,22,19,0,0,Rational(-5, 24)), statement.end_date
|
86
|
+
|
87
|
+
transactions = statement.transactions
|
88
|
+
assert_equal 4, transactions.size
|
89
|
+
|
90
|
+
assert_equal :PAYMENT, transactions[0].type
|
91
|
+
assert_equal OfxParser::Transaction::TYPE[:PAYMENT], transactions[0].type_desc
|
92
|
+
assert_equal DateTime.civil(2007,6,6,12,0,0), transactions[0].date
|
93
|
+
assert_equal '-11.11', transactions[0].amount
|
94
|
+
assert_equal -1111, transactions[0].amount_in_pennies
|
95
|
+
assert_equal '11111111 22', transactions[0].fit_id
|
96
|
+
assert_equal nil, transactions[0].check_number
|
97
|
+
assert_equal nil, transactions[0].sic
|
98
|
+
assert_equal nil, transactions[0].sic_desc
|
99
|
+
assert_equal 'WEB AUTHORIZED PMT FOO INC', transactions[0].payee
|
100
|
+
assert_equal 'Download from usbank.com. FOO INC', transactions[0].memo
|
101
|
+
|
102
|
+
assert_equal :CHECK, transactions[1].type
|
103
|
+
assert_equal OfxParser::Transaction::TYPE[:CHECK], transactions[1].type_desc
|
104
|
+
assert_equal DateTime.civil(2007,6,7,12,0,0), transactions[1].date
|
105
|
+
assert_equal '-111.11', transactions[1].amount
|
106
|
+
assert_equal -11111, transactions[1].amount_in_pennies
|
107
|
+
assert_equal '22222A', transactions[1].fit_id
|
108
|
+
assert_equal '0000009611', transactions[1].check_number
|
109
|
+
assert_equal nil, transactions[1].sic
|
110
|
+
assert_equal nil, transactions[1].sic_desc
|
111
|
+
assert_equal 'CHECK', transactions[1].payee
|
112
|
+
assert_equal 'Download from usbank.com.', transactions[1].memo
|
113
|
+
|
114
|
+
assert_equal :DIRECTDEP, transactions[2].type
|
115
|
+
assert_equal OfxParser::Transaction::TYPE[:DIRECTDEP], transactions[2].type_desc
|
116
|
+
assert_equal DateTime.civil(2007,6,14,12,0,0), transactions[2].date
|
117
|
+
assert_equal '1111.11', transactions[2].amount
|
118
|
+
assert_equal 111111, transactions[2].amount_in_pennies
|
119
|
+
assert_equal 'X34AE33', transactions[2].fit_id
|
120
|
+
assert_equal nil, transactions[2].check_number
|
121
|
+
assert_equal nil, transactions[2].sic
|
122
|
+
assert_equal nil, transactions[2].sic_desc
|
123
|
+
assert_equal 'ELECTRONIC DEPOSIT BAR INC', transactions[2].payee
|
124
|
+
assert_equal 'Download from usbank.com. BAR INC', transactions[2].memo
|
125
|
+
|
126
|
+
assert_equal :CREDIT, transactions[3].type
|
127
|
+
assert_equal OfxParser::Transaction::TYPE[:CREDIT], transactions[3].type_desc
|
128
|
+
assert_equal DateTime.civil(2007,6,19,12,0,0), transactions[3].date
|
129
|
+
assert_equal '11.11', transactions[3].amount
|
130
|
+
assert_equal 1111, transactions[3].amount_in_pennies
|
131
|
+
assert_equal '8 8 9089743', transactions[3].fit_id
|
132
|
+
assert_equal nil, transactions[3].check_number
|
133
|
+
assert_equal nil, transactions[3].sic
|
134
|
+
assert_equal nil, transactions[3].sic_desc
|
135
|
+
assert_equal 'ATM DEPOSIT US BANK ANYTOWNAS', transactions[3].payee
|
136
|
+
assert_equal 'Download from usbank.com. US BANK ANYTOWN ASUS1', transactions[3].memo
|
137
|
+
|
138
|
+
assert_equal 1, ofx.accounts.size
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_creditcard
|
142
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:creditcard])
|
143
|
+
|
144
|
+
acct = ofx.credit_card
|
145
|
+
|
146
|
+
assert_equal 'XXXXXXXXXXXX1111', acct.number
|
147
|
+
assert_equal '19000.99', acct.remaining_credit
|
148
|
+
assert_equal 1900099, acct.remaining_credit_in_pennies
|
149
|
+
assert_equal DateTime.civil(2007,6,23,19,20,13), acct.remaining_credit_date
|
150
|
+
assert_equal '-1111.01', acct.balance
|
151
|
+
assert_equal -111101, acct.balance_in_pennies
|
152
|
+
assert_equal DateTime.civil(2007,6,23,19,20,13), acct.balance_date
|
153
|
+
assert_equal '0', acct.transaction_uid
|
154
|
+
|
155
|
+
statement = acct.statement
|
156
|
+
|
157
|
+
assert_equal 'USD', statement.currency
|
158
|
+
assert_equal DateTime.civil(2007,5,9,12,0,0), statement.start_date
|
159
|
+
assert_equal DateTime.civil(2007,6,8,12,0,0), statement.end_date
|
160
|
+
|
161
|
+
transactions = statement.transactions
|
162
|
+
assert_equal 3, transactions.size
|
163
|
+
|
164
|
+
assert_equal :DEBIT, transactions[0].type
|
165
|
+
assert_equal OfxParser::Transaction::TYPE[:DEBIT], transactions[0].type_desc
|
166
|
+
assert_equal DateTime.civil(2007,5,10,17,0,0), transactions[0].date
|
167
|
+
assert_equal '-19.17', transactions[0].amount
|
168
|
+
assert_equal -1917, transactions[0].amount_in_pennies
|
169
|
+
assert_equal 'xx', transactions[0].fit_id
|
170
|
+
assert_equal nil, transactions[0].check_number
|
171
|
+
assert_equal '5912', transactions[0].sic
|
172
|
+
assert_equal OfxParser::Mcc::CODES['5912'], transactions[0].sic_desc
|
173
|
+
assert_equal 'WALGREEN 34638675 ANYTOWN', transactions[0].payee
|
174
|
+
assert_equal '', transactions[0].memo
|
175
|
+
|
176
|
+
assert_equal :DEBIT, transactions[1].type
|
177
|
+
assert_equal OfxParser::Transaction::TYPE[:DEBIT], transactions[1].type_desc
|
178
|
+
assert_equal DateTime.civil(2007,5,12,17,0,0), transactions[1].date
|
179
|
+
assert_equal '-12.0', transactions[1].amount
|
180
|
+
assert_equal -1200, transactions[1].amount_in_pennies
|
181
|
+
assert_equal 'yy-56', transactions[1].fit_id
|
182
|
+
assert_equal nil, transactions[1].check_number
|
183
|
+
assert_equal '7933', transactions[1].sic
|
184
|
+
assert_equal OfxParser::Mcc::CODES['7933'], transactions[1].sic_desc
|
185
|
+
assert_equal 'SUNSET BOWL ANYTOWN', transactions[1].payee
|
186
|
+
assert_equal '', transactions[1].memo
|
187
|
+
|
188
|
+
assert_equal :CREDIT, transactions[2].type
|
189
|
+
assert_equal OfxParser::Transaction::TYPE[:CREDIT], transactions[2].type_desc
|
190
|
+
assert_equal DateTime.civil(2007,5,26,17,0,0), transactions[2].date
|
191
|
+
assert_equal '11.01', transactions[2].amount
|
192
|
+
assert_equal 1101, transactions[2].amount_in_pennies
|
193
|
+
assert_equal '78-9', transactions[2].fit_id
|
194
|
+
assert_equal nil, transactions[2].check_number
|
195
|
+
assert_equal '0000', transactions[2].sic
|
196
|
+
assert_equal nil, transactions[2].sic_desc
|
197
|
+
assert_equal 'ELECTRONIC PAYMENT-THANK YOU', transactions[2].payee
|
198
|
+
assert_equal '', transactions[2].memo
|
199
|
+
|
200
|
+
assert_equal 1, ofx.accounts.size
|
201
|
+
assert_equal [], ofx.signup_account_info
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_account_listing
|
205
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:list])
|
206
|
+
|
207
|
+
cc_info = ofx.signup_account_info.first
|
208
|
+
assert_equal 'CREDIT CARD ************1111', cc_info.desc
|
209
|
+
assert_equal 'XXXXXXXXXXXX1111', cc_info.number
|
210
|
+
|
211
|
+
assert_equal 0, ofx.accounts.size
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_monetary_support_call
|
215
|
+
t = OfxParser::Transaction.new
|
216
|
+
t.amount = '-11.1'
|
217
|
+
|
218
|
+
assert_nothing_raised { t.amount_in_pennies }
|
219
|
+
assert_raise(NoMethodError) { t.amount_in_whatever }
|
220
|
+
|
221
|
+
assert t.respond_to?(:amount_in_pennies)
|
222
|
+
assert !t.respond_to?(:amount_in_whatever)
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_malformed_header_parses
|
226
|
+
assert_nothing_raised do
|
227
|
+
OfxParser::OfxParser.parse(OFX_FILES[:malformed_header])
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
class X
|
232
|
+
include OfxParser::MonetarySupport
|
233
|
+
attr_accessor :amount
|
234
|
+
monetary_vars :amount
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_original_method
|
238
|
+
x = X.new
|
239
|
+
assert_equal :a_b, x.original_method('a_b_in_pennies')
|
240
|
+
assert_equal :a, x.original_method('a_in_pennies')
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_for_pennies
|
244
|
+
amounts = {
|
245
|
+
'-11.1' => -111,
|
246
|
+
'-11.110' => -1111,
|
247
|
+
'-11.11101' => -1111,
|
248
|
+
'11.11' => 1111,
|
249
|
+
'11,11' => 1111,
|
250
|
+
'1' => 100,
|
251
|
+
'1.0' => 100,
|
252
|
+
'-1.0' => -100,
|
253
|
+
'' => nil
|
254
|
+
}
|
255
|
+
|
256
|
+
x = X.new
|
257
|
+
|
258
|
+
amounts.each do |actual, expected|
|
259
|
+
x.amount = actual
|
260
|
+
assert_equal expected, x.amount_in_pennies, "#{actual.inspect} should give #{expected.inspect}"
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|