mirror of
https://github.com/aclindsa/ofxgo.git
synced 2024-11-22 03:30:04 -05:00
Switch Date to contain time.Time instead of being a typedef
This commit is contained in:
parent
7f5ef5751d
commit
1560f44a3c
28
bank_test.go
28
bank_test.go
@ -68,7 +68,7 @@ func TestMarshalBankStatementRequest(t *testing.T) {
|
|||||||
request.SetClientFields(&client)
|
request.SetClientFields(&client)
|
||||||
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
||||||
EST := time.FixedZone("EST", -5*60*60)
|
EST := time.FixedZone("EST", -5*60*60)
|
||||||
request.Signon.DtClient = ofxgo.Date(time.Date(2006, 1, 15, 11, 23, 0, 0, EST))
|
request.Signon.DtClient = *ofxgo.NewDate(2006, 1, 15, 11, 23, 0, 0, EST)
|
||||||
|
|
||||||
marshalCheckRequest(t, &request, expectedString)
|
marshalCheckRequest(t, &request, expectedString)
|
||||||
}
|
}
|
||||||
@ -138,40 +138,36 @@ func TestUnmarshalBankStatementResponse(t *testing.T) {
|
|||||||
</BANKMSGSRSV1>
|
</BANKMSGSRSV1>
|
||||||
</OFX>`)
|
</OFX>`)
|
||||||
var expected ofxgo.Response
|
var expected ofxgo.Response
|
||||||
GMT := time.FixedZone("GMT", 0)
|
|
||||||
|
|
||||||
expected.Version = "203"
|
expected.Version = "203"
|
||||||
expected.Signon.Status.Code = 0
|
expected.Signon.Status.Code = 0
|
||||||
expected.Signon.Status.Severity = "INFO"
|
expected.Signon.Status.Severity = "INFO"
|
||||||
expected.Signon.DtServer = ofxgo.Date(time.Date(2006, 1, 15, 11, 23, 03, 0, GMT))
|
expected.Signon.DtServer = *ofxgo.NewDateGMT(2006, 1, 15, 11, 23, 03, 0)
|
||||||
expected.Signon.Language = "ENG"
|
expected.Signon.Language = "ENG"
|
||||||
dtprofup := ofxgo.Date(time.Date(2005, 2, 21, 9, 13, 0, 0, GMT))
|
expected.Signon.DtProfUp = ofxgo.NewDateGMT(2005, 2, 21, 9, 13, 0, 0)
|
||||||
expected.Signon.DtProfUp = &dtprofup
|
expected.Signon.DtAcctUp = ofxgo.NewDateGMT(2006, 1, 2, 16, 0, 0, 0)
|
||||||
dtacctup := ofxgo.Date(time.Date(2006, 1, 2, 16, 0, 0, 0, GMT))
|
|
||||||
expected.Signon.DtAcctUp = &dtacctup
|
|
||||||
expected.Signon.Org = "BNK"
|
expected.Signon.Org = "BNK"
|
||||||
expected.Signon.Fid = "1987"
|
expected.Signon.Fid = "1987"
|
||||||
|
|
||||||
var trnamt1, trnamt2 ofxgo.Amount
|
var trnamt1, trnamt2 ofxgo.Amount
|
||||||
trnamt1.SetFrac64(-20000, 100)
|
trnamt1.SetFrac64(-20000, 100)
|
||||||
trnamt2.SetFrac64(-30000, 100)
|
trnamt2.SetFrac64(-30000, 100)
|
||||||
dtuser2 := ofxgo.Date(time.Date(2006, 1, 12, 0, 0, 0, 0, GMT))
|
|
||||||
|
|
||||||
banktranlist := ofxgo.TransactionList{
|
banktranlist := ofxgo.TransactionList{
|
||||||
DtStart: ofxgo.Date(time.Date(2006, 1, 1, 0, 0, 0, 0, GMT)),
|
DtStart: *ofxgo.NewDateGMT(2006, 1, 1, 0, 0, 0, 0),
|
||||||
DtEnd: ofxgo.Date(time.Date(2006, 1, 15, 0, 0, 0, 0, GMT)),
|
DtEnd: *ofxgo.NewDateGMT(2006, 1, 15, 0, 0, 0, 0),
|
||||||
Transactions: []ofxgo.Transaction{
|
Transactions: []ofxgo.Transaction{
|
||||||
{
|
{
|
||||||
TrnType: "CHECK",
|
TrnType: "CHECK",
|
||||||
DtPosted: ofxgo.Date(time.Date(2006, 1, 4, 0, 0, 0, 0, GMT)),
|
DtPosted: *ofxgo.NewDateGMT(2006, 1, 4, 0, 0, 0, 0),
|
||||||
TrnAmt: trnamt1,
|
TrnAmt: trnamt1,
|
||||||
FiTId: "00592",
|
FiTId: "00592",
|
||||||
CheckNum: "2002",
|
CheckNum: "2002",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
TrnType: "ATM",
|
TrnType: "ATM",
|
||||||
DtPosted: ofxgo.Date(time.Date(2006, 1, 12, 0, 0, 0, 0, GMT)),
|
DtPosted: *ofxgo.NewDateGMT(2006, 1, 12, 0, 0, 0, 0),
|
||||||
DtUser: &dtuser2,
|
DtUser: ofxgo.NewDateGMT(2006, 1, 12, 0, 0, 0, 0),
|
||||||
TrnAmt: trnamt2,
|
TrnAmt: trnamt2,
|
||||||
FiTId: "00679",
|
FiTId: "00679",
|
||||||
},
|
},
|
||||||
@ -182,8 +178,6 @@ func TestUnmarshalBankStatementResponse(t *testing.T) {
|
|||||||
balamt.SetFrac64(20029, 100)
|
balamt.SetFrac64(20029, 100)
|
||||||
availbalamt.SetFrac64(20029, 100)
|
availbalamt.SetFrac64(20029, 100)
|
||||||
|
|
||||||
availdtasof := ofxgo.Date(time.Date(2006, 1, 14, 16, 0, 0, 0, GMT))
|
|
||||||
|
|
||||||
statementResponse := ofxgo.StatementResponse{
|
statementResponse := ofxgo.StatementResponse{
|
||||||
TrnUID: "1001",
|
TrnUID: "1001",
|
||||||
Status: ofxgo.Status{
|
Status: ofxgo.Status{
|
||||||
@ -198,9 +192,9 @@ func TestUnmarshalBankStatementResponse(t *testing.T) {
|
|||||||
},
|
},
|
||||||
BankTranList: &banktranlist,
|
BankTranList: &banktranlist,
|
||||||
BalAmt: balamt,
|
BalAmt: balamt,
|
||||||
DtAsOf: ofxgo.Date(time.Date(2006, 1, 14, 16, 0, 0, 0, GMT)),
|
DtAsOf: *ofxgo.NewDateGMT(2006, 1, 14, 16, 0, 0, 0),
|
||||||
AvailBalAmt: &availbalamt,
|
AvailBalAmt: &availbalamt,
|
||||||
AvailDtAsOf: &availdtasof,
|
AvailDtAsOf: ofxgo.NewDateGMT(2006, 1, 14, 16, 0, 0, 0),
|
||||||
}
|
}
|
||||||
expected.Bank = append(expected.Bank, &statementResponse)
|
expected.Bank = append(expected.Bank, &statementResponse)
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ func tryProfile(appId, appVer, version string, noindent bool) bool {
|
|||||||
|
|
||||||
profileRequest := ofxgo.ProfileRequest{
|
profileRequest := ofxgo.ProfileRequest{
|
||||||
TrnUID: *uid,
|
TrnUID: *uid,
|
||||||
DtProfUp: ofxgo.Date(time.Unix(0, 0)),
|
DtProfUp: ofxgo.Date{Time: time.Unix(0, 0)},
|
||||||
}
|
}
|
||||||
query.Prof = append(query.Prof, &profileRequest)
|
query.Prof = append(query.Prof, &profileRequest)
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ func getAccounts() {
|
|||||||
|
|
||||||
acctInfo := ofxgo.AcctInfoRequest{
|
acctInfo := ofxgo.AcctInfoRequest{
|
||||||
TrnUID: *uid,
|
TrnUID: *uid,
|
||||||
DtAcctUp: ofxgo.Date(time.Unix(0, 0)),
|
DtAcctUp: ofxgo.Date{Time: time.Unix(0, 0)},
|
||||||
}
|
}
|
||||||
query.Signup = append(query.Signup, &acctInfo)
|
query.Signup = append(query.Signup, &acctInfo)
|
||||||
|
|
||||||
|
@ -53,21 +53,19 @@ func TestMarshalCCStatementRequest(t *testing.T) {
|
|||||||
request.Signon.Org = "BNK"
|
request.Signon.Org = "BNK"
|
||||||
request.Signon.Fid = "1987"
|
request.Signon.Fid = "1987"
|
||||||
|
|
||||||
GMT := time.FixedZone("GMT", 0)
|
|
||||||
dtstart := ofxgo.Date(time.Date(2017, 1, 1, 0, 0, 0, 0, GMT))
|
|
||||||
statementRequest := ofxgo.CCStatementRequest{
|
statementRequest := ofxgo.CCStatementRequest{
|
||||||
TrnUID: "913846",
|
TrnUID: "913846",
|
||||||
CCAcctFrom: ofxgo.CCAcct{
|
CCAcctFrom: ofxgo.CCAcct{
|
||||||
AcctId: "XXXXXXXXXXXX1234",
|
AcctId: "XXXXXXXXXXXX1234",
|
||||||
},
|
},
|
||||||
DtStart: &dtstart,
|
DtStart: ofxgo.NewDateGMT(2017, 1, 1, 0, 0, 0, 0),
|
||||||
Include: true,
|
Include: true,
|
||||||
}
|
}
|
||||||
request.CreditCard = append(request.CreditCard, &statementRequest)
|
request.CreditCard = append(request.CreditCard, &statementRequest)
|
||||||
|
|
||||||
request.SetClientFields(&client)
|
request.SetClientFields(&client)
|
||||||
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
||||||
request.Signon.DtClient = ofxgo.Date(time.Date(2017, 3, 31, 15, 38, 48, 0, GMT))
|
request.Signon.DtClient = *ofxgo.NewDateGMT(2017, 3, 31, 15, 38, 48, 0)
|
||||||
|
|
||||||
marshalCheckRequest(t, &request, expectedString)
|
marshalCheckRequest(t, &request, expectedString)
|
||||||
}
|
}
|
||||||
@ -85,7 +83,6 @@ NEWFILEUID:NONE
|
|||||||
|
|
||||||
<OFX><SIGNONMSGSRSV1><SONRS><STATUS><CODE>0<SEVERITY>INFO<MESSAGE>SUCCESS</STATUS><DTSERVER>20170331154648.331[-4:EDT]<LANGUAGE>ENG<FI><ORG>01<FID>81729</FI></SONRS></SIGNONMSGSRSV1><CREDITCARDMSGSRSV1><CCSTMTTRNRS><TRNUID>59e850ad-7448-b4ce-4b71-29057763b306<STATUS><CODE>0<SEVERITY>INFO</STATUS><CCSTMTRS><CURDEF>USD<CCACCTFROM><ACCTID>9283744488463775</CCACCTFROM><BANKTRANLIST><DTSTART>20161201154648.688[-5:EST]<DTEND>20170331154648.688[-4:EDT]<STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20170209120000[0:GMT]<TRNAMT>-7.96<FITID>2017020924435657040207171600195<NAME>SLICE OF NY</STMTTRN><STMTTRN><TRNTYPE>CREDIT<DTPOSTED>20161228120000[0:GMT]<TRNAMT>3830.46<FITID>2016122823633637200000258482730<NAME>Payment Thank You Electro</STMTTRN><STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20170327120000[0:GMT]<TRNAMT>-17.7<FITID>2017032724445727085300442885680<NAME>KROGER FUEL #9999</STMTTRN></BANKTRANLIST><LEDGERBAL><BALAMT>-9334<DTASOF>20170331080000.000[-4:EDT]</LEDGERBAL><AVAILBAL><BALAMT>7630.17<DTASOF>20170331080000.000[-4:EDT]</AVAILBAL></CCSTMTRS></CCSTMTTRNRS></CREDITCARDMSGSRSV1></OFX>`)
|
<OFX><SIGNONMSGSRSV1><SONRS><STATUS><CODE>0<SEVERITY>INFO<MESSAGE>SUCCESS</STATUS><DTSERVER>20170331154648.331[-4:EDT]<LANGUAGE>ENG<FI><ORG>01<FID>81729</FI></SONRS></SIGNONMSGSRSV1><CREDITCARDMSGSRSV1><CCSTMTTRNRS><TRNUID>59e850ad-7448-b4ce-4b71-29057763b306<STATUS><CODE>0<SEVERITY>INFO</STATUS><CCSTMTRS><CURDEF>USD<CCACCTFROM><ACCTID>9283744488463775</CCACCTFROM><BANKTRANLIST><DTSTART>20161201154648.688[-5:EST]<DTEND>20170331154648.688[-4:EDT]<STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20170209120000[0:GMT]<TRNAMT>-7.96<FITID>2017020924435657040207171600195<NAME>SLICE OF NY</STMTTRN><STMTTRN><TRNTYPE>CREDIT<DTPOSTED>20161228120000[0:GMT]<TRNAMT>3830.46<FITID>2016122823633637200000258482730<NAME>Payment Thank You Electro</STMTTRN><STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20170327120000[0:GMT]<TRNAMT>-17.7<FITID>2017032724445727085300442885680<NAME>KROGER FUEL #9999</STMTTRN></BANKTRANLIST><LEDGERBAL><BALAMT>-9334<DTASOF>20170331080000.000[-4:EDT]</LEDGERBAL><AVAILBAL><BALAMT>7630.17<DTASOF>20170331080000.000[-4:EDT]</AVAILBAL></CCSTMTRS></CCSTMTTRNRS></CREDITCARDMSGSRSV1></OFX>`)
|
||||||
var expected ofxgo.Response
|
var expected ofxgo.Response
|
||||||
GMT := time.FixedZone("GMT", 0)
|
|
||||||
EDT := time.FixedZone("EDT", -4*60*60)
|
EDT := time.FixedZone("EDT", -4*60*60)
|
||||||
EST := time.FixedZone("EST", -5*60*60)
|
EST := time.FixedZone("EST", -5*60*60)
|
||||||
|
|
||||||
@ -93,7 +90,7 @@ NEWFILEUID:NONE
|
|||||||
expected.Signon.Status.Code = 0
|
expected.Signon.Status.Code = 0
|
||||||
expected.Signon.Status.Severity = "INFO"
|
expected.Signon.Status.Severity = "INFO"
|
||||||
expected.Signon.Status.Message = "SUCCESS"
|
expected.Signon.Status.Message = "SUCCESS"
|
||||||
expected.Signon.DtServer = ofxgo.Date(time.Date(2017, 3, 31, 15, 46, 48, 331000000, EDT))
|
expected.Signon.DtServer = *ofxgo.NewDate(2017, 3, 31, 15, 46, 48, 331000000, EDT)
|
||||||
expected.Signon.Language = "ENG"
|
expected.Signon.Language = "ENG"
|
||||||
expected.Signon.Org = "01"
|
expected.Signon.Org = "01"
|
||||||
expected.Signon.Fid = "81729"
|
expected.Signon.Fid = "81729"
|
||||||
@ -104,26 +101,26 @@ NEWFILEUID:NONE
|
|||||||
trnamt3.SetFrac64(-1770, 100)
|
trnamt3.SetFrac64(-1770, 100)
|
||||||
|
|
||||||
banktranlist := ofxgo.TransactionList{
|
banktranlist := ofxgo.TransactionList{
|
||||||
DtStart: ofxgo.Date(time.Date(2016, 12, 1, 15, 46, 48, 688000000, EST)),
|
DtStart: *ofxgo.NewDate(2016, 12, 1, 15, 46, 48, 688000000, EST),
|
||||||
DtEnd: ofxgo.Date(time.Date(2017, 3, 31, 15, 46, 48, 688000000, EDT)),
|
DtEnd: *ofxgo.NewDate(2017, 3, 31, 15, 46, 48, 688000000, EDT),
|
||||||
Transactions: []ofxgo.Transaction{
|
Transactions: []ofxgo.Transaction{
|
||||||
{
|
{
|
||||||
TrnType: "DEBIT",
|
TrnType: "DEBIT",
|
||||||
DtPosted: ofxgo.Date(time.Date(2017, 2, 9, 12, 0, 0, 0, GMT)),
|
DtPosted: *ofxgo.NewDateGMT(2017, 2, 9, 12, 0, 0, 0),
|
||||||
TrnAmt: trnamt1,
|
TrnAmt: trnamt1,
|
||||||
FiTId: "2017020924435657040207171600195",
|
FiTId: "2017020924435657040207171600195",
|
||||||
Name: "SLICE OF NY",
|
Name: "SLICE OF NY",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
TrnType: "CREDIT",
|
TrnType: "CREDIT",
|
||||||
DtPosted: ofxgo.Date(time.Date(2016, 12, 28, 12, 0, 0, 0, GMT)),
|
DtPosted: *ofxgo.NewDateGMT(2016, 12, 28, 12, 0, 0, 0),
|
||||||
TrnAmt: trnamt2,
|
TrnAmt: trnamt2,
|
||||||
FiTId: "2016122823633637200000258482730",
|
FiTId: "2016122823633637200000258482730",
|
||||||
Name: "Payment Thank You Electro",
|
Name: "Payment Thank You Electro",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
TrnType: "DEBIT",
|
TrnType: "DEBIT",
|
||||||
DtPosted: ofxgo.Date(time.Date(2017, 3, 27, 12, 0, 0, 0, GMT)),
|
DtPosted: *ofxgo.NewDateGMT(2017, 3, 27, 12, 0, 0, 0),
|
||||||
TrnAmt: trnamt3,
|
TrnAmt: trnamt3,
|
||||||
FiTId: "2017032724445727085300442885680",
|
FiTId: "2017032724445727085300442885680",
|
||||||
Name: "KROGER FUEL #9999",
|
Name: "KROGER FUEL #9999",
|
||||||
@ -135,8 +132,6 @@ NEWFILEUID:NONE
|
|||||||
balamt.SetFrac64(-933400, 100)
|
balamt.SetFrac64(-933400, 100)
|
||||||
availbalamt.SetFrac64(763017, 100)
|
availbalamt.SetFrac64(763017, 100)
|
||||||
|
|
||||||
availdtasof := ofxgo.Date(time.Date(2017, 3, 31, 8, 0, 0, 0, EDT))
|
|
||||||
|
|
||||||
statementResponse := ofxgo.CCStatementResponse{
|
statementResponse := ofxgo.CCStatementResponse{
|
||||||
TrnUID: "59e850ad-7448-b4ce-4b71-29057763b306",
|
TrnUID: "59e850ad-7448-b4ce-4b71-29057763b306",
|
||||||
Status: ofxgo.Status{
|
Status: ofxgo.Status{
|
||||||
@ -149,9 +144,9 @@ NEWFILEUID:NONE
|
|||||||
},
|
},
|
||||||
BankTranList: &banktranlist,
|
BankTranList: &banktranlist,
|
||||||
BalAmt: balamt,
|
BalAmt: balamt,
|
||||||
DtAsOf: ofxgo.Date(time.Date(2017, 3, 31, 8, 0, 0, 0, EDT)),
|
DtAsOf: *ofxgo.NewDate(2017, 3, 31, 8, 0, 0, 0, EDT),
|
||||||
AvailBalAmt: &availbalamt,
|
AvailBalAmt: &availbalamt,
|
||||||
AvailDtAsOf: &availdtasof,
|
AvailDtAsOf: ofxgo.NewDate(2017, 3, 31, 8, 0, 0, 0, EDT),
|
||||||
}
|
}
|
||||||
expected.CreditCard = append(expected.CreditCard, &statementResponse)
|
expected.CreditCard = append(expected.CreditCard, &statementResponse)
|
||||||
|
|
||||||
|
@ -60,7 +60,6 @@ func TestMarshalInvStatementRequest(t *testing.T) {
|
|||||||
request.Signon.Fid = "01"
|
request.Signon.Fid = "01"
|
||||||
|
|
||||||
EST := time.FixedZone("EST", -5*60*60)
|
EST := time.FixedZone("EST", -5*60*60)
|
||||||
dtstart := ofxgo.Date(time.Date(2016, 1, 1, 0, 0, 0, 0, EST))
|
|
||||||
|
|
||||||
statementRequest := ofxgo.InvStatementRequest{
|
statementRequest := ofxgo.InvStatementRequest{
|
||||||
TrnUID: "382827d6-e2d0-4396-bf3b-665979285420",
|
TrnUID: "382827d6-e2d0-4396-bf3b-665979285420",
|
||||||
@ -68,7 +67,7 @@ func TestMarshalInvStatementRequest(t *testing.T) {
|
|||||||
BrokerId: "fi.example.com",
|
BrokerId: "fi.example.com",
|
||||||
AcctId: "82736664",
|
AcctId: "82736664",
|
||||||
},
|
},
|
||||||
DtStart: &dtstart,
|
DtStart: ofxgo.NewDate(2016, 1, 1, 0, 0, 0, 0, EST),
|
||||||
Include: true,
|
Include: true,
|
||||||
IncludeOO: true,
|
IncludeOO: true,
|
||||||
IncludePos: true,
|
IncludePos: true,
|
||||||
@ -78,7 +77,7 @@ func TestMarshalInvStatementRequest(t *testing.T) {
|
|||||||
|
|
||||||
request.SetClientFields(&client)
|
request.SetClientFields(&client)
|
||||||
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
||||||
request.Signon.DtClient = ofxgo.Date(time.Date(2016, 2, 24, 13, 19, 5, 0, EST))
|
request.Signon.DtClient = *ofxgo.NewDate(2016, 2, 24, 13, 19, 5, 0, EST)
|
||||||
|
|
||||||
marshalCheckRequest(t, &request, expectedString)
|
marshalCheckRequest(t, &request, expectedString)
|
||||||
}
|
}
|
||||||
@ -297,12 +296,11 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
</SECLISTMSGSRSV1>
|
</SECLISTMSGSRSV1>
|
||||||
</OFX>`)
|
</OFX>`)
|
||||||
var expected ofxgo.Response
|
var expected ofxgo.Response
|
||||||
GMT := time.FixedZone("GMT", 0)
|
|
||||||
|
|
||||||
expected.Version = "203"
|
expected.Version = "203"
|
||||||
expected.Signon.Status.Code = 0
|
expected.Signon.Status.Code = 0
|
||||||
expected.Signon.Status.Severity = "INFO"
|
expected.Signon.Status.Severity = "INFO"
|
||||||
expected.Signon.DtServer = ofxgo.Date(time.Date(2017, 4, 1, 20, 12, 44, 0, GMT))
|
expected.Signon.DtServer = *ofxgo.NewDateGMT(2017, 4, 1, 20, 12, 44, 0)
|
||||||
expected.Signon.Language = "ENG"
|
expected.Signon.Language = "ENG"
|
||||||
expected.Signon.Org = "INVSTRUS"
|
expected.Signon.Org = "INVSTRUS"
|
||||||
expected.Signon.Fid = "9999"
|
expected.Signon.Fid = "9999"
|
||||||
@ -314,20 +312,16 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
total1.SetFrac64(-22909, 1)
|
total1.SetFrac64(-22909, 1)
|
||||||
amount2.SetFrac64(22000, 1)
|
amount2.SetFrac64(22000, 1)
|
||||||
|
|
||||||
dtuser := ofxgo.Date(time.Date(2017, 1, 18, 0, 0, 0, 0, GMT))
|
|
||||||
dtavail := ofxgo.Date(time.Date(2017, 1, 23, 0, 0, 0, 0, GMT))
|
|
||||||
dtsettle := ofxgo.Date(time.Date(2017, 2, 7, 0, 0, 0, 0, GMT))
|
|
||||||
|
|
||||||
invtranlist := ofxgo.InvTranList{
|
invtranlist := ofxgo.InvTranList{
|
||||||
DtStart: ofxgo.Date(time.Date(2017, 1, 1, 0, 0, 0, 0, GMT)),
|
DtStart: *ofxgo.NewDateGMT(2017, 1, 1, 0, 0, 0, 0),
|
||||||
DtEnd: ofxgo.Date(time.Date(2017, 3, 31, 0, 0, 0, 0, GMT)),
|
DtEnd: *ofxgo.NewDateGMT(2017, 3, 31, 0, 0, 0, 0),
|
||||||
InvTransactions: []ofxgo.InvTransaction{
|
InvTransactions: []ofxgo.InvTransaction{
|
||||||
ofxgo.BuyStock{
|
ofxgo.BuyStock{
|
||||||
InvBuy: ofxgo.InvBuy{
|
InvBuy: ofxgo.InvBuy{
|
||||||
InvTran: ofxgo.InvTran{
|
InvTran: ofxgo.InvTran{
|
||||||
FiTId: "729483191",
|
FiTId: "729483191",
|
||||||
DtTrade: ofxgo.Date(time.Date(2017, 2, 3, 0, 0, 0, 0, GMT)),
|
DtTrade: *ofxgo.NewDateGMT(2017, 2, 3, 0, 0, 0, 0),
|
||||||
DtSettle: &dtsettle,
|
DtSettle: ofxgo.NewDateGMT(2017, 2, 7, 0, 0, 0, 0),
|
||||||
},
|
},
|
||||||
SecId: ofxgo.SecurityId{
|
SecId: ofxgo.SecurityId{
|
||||||
UniqueId: "78462F103",
|
UniqueId: "78462F103",
|
||||||
@ -348,13 +342,14 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
Transactions: []ofxgo.Transaction{
|
Transactions: []ofxgo.Transaction{
|
||||||
ofxgo.Transaction{
|
ofxgo.Transaction{
|
||||||
TrnType: "CREDIT",
|
TrnType: "CREDIT",
|
||||||
DtPosted: ofxgo.Date(time.Date(2017, 1, 20, 0, 0, 0, 0, GMT)),
|
DtPosted: *ofxgo.NewDateGMT(2017, 1, 20, 0, 0, 0, 0),
|
||||||
DtUser: &dtuser,
|
DtUser: ofxgo.NewDateGMT(2017, 1, 18, 0, 0, 0, 0),
|
||||||
DtAvail: &dtavail,
|
DtAvail: ofxgo.NewDateGMT(2017, 1, 23, 0, 0, 0, 0),
|
||||||
TrnAmt: amount2,
|
|
||||||
FiTId: "993838",
|
TrnAmt: amount2,
|
||||||
Name: "DEPOSIT",
|
FiTId: "993838",
|
||||||
Memo: "CHECK 19980",
|
Name: "DEPOSIT",
|
||||||
|
Memo: "CHECK 19980",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
SubAcctFund: "CASH",
|
SubAcctFund: "CASH",
|
||||||
@ -368,8 +363,6 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
shortbalance.SetFrac64(0, 1)
|
shortbalance.SetFrac64(0, 1)
|
||||||
balvalue.SetFrac64(25, 100)
|
balvalue.SetFrac64(25, 100)
|
||||||
|
|
||||||
baldtasof := ofxgo.Date(time.Date(2017, 4, 1, 0, 0, 0, 0, GMT))
|
|
||||||
|
|
||||||
invbalance := ofxgo.InvBalance{
|
invbalance := ofxgo.InvBalance{
|
||||||
AvailCash: availcash,
|
AvailCash: availcash,
|
||||||
MarginBalance: marginbalance,
|
MarginBalance: marginbalance,
|
||||||
@ -380,7 +373,7 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
Desc: "Current interest rate for sweep account balances",
|
Desc: "Current interest rate for sweep account balances",
|
||||||
BalType: "PERCENT",
|
BalType: "PERCENT",
|
||||||
Value: balvalue,
|
Value: balvalue,
|
||||||
DtAsOf: &baldtasof,
|
DtAsOf: ofxgo.NewDateGMT(2017, 4, 1, 0, 0, 0, 0),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -405,7 +398,7 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
Code: 0,
|
Code: 0,
|
||||||
Severity: "INFO",
|
Severity: "INFO",
|
||||||
},
|
},
|
||||||
DtAsOf: ofxgo.Date(time.Date(2017, 3, 31, 0, 0, 0, 0, GMT)),
|
DtAsOf: *ofxgo.NewDateGMT(2017, 3, 31, 0, 0, 0, 0),
|
||||||
CurDef: "USD",
|
CurDef: "USD",
|
||||||
InvAcctFrom: ofxgo.InvAcct{
|
InvAcctFrom: ofxgo.InvAcct{
|
||||||
BrokerId: "invstrus.com",
|
BrokerId: "invstrus.com",
|
||||||
@ -424,7 +417,7 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
Units: posunits1,
|
Units: posunits1,
|
||||||
UnitPrice: posunitprice1,
|
UnitPrice: posunitprice1,
|
||||||
MktVal: posmktval1,
|
MktVal: posmktval1,
|
||||||
DtPriceAsOf: ofxgo.Date(time.Date(2017, 3, 31, 16, 0, 0, 0, GMT)),
|
DtPriceAsOf: *ofxgo.NewDateGMT(2017, 3, 31, 16, 0, 0, 0),
|
||||||
Memo: "Price as of previous close",
|
Memo: "Price as of previous close",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -439,7 +432,7 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
Units: posunits2,
|
Units: posunits2,
|
||||||
UnitPrice: posunitprice2,
|
UnitPrice: posunitprice2,
|
||||||
MktVal: posmktval2,
|
MktVal: posmktval2,
|
||||||
DtPriceAsOf: ofxgo.Date(time.Date(2017, 3, 31, 16, 0, 0, 0, GMT)),
|
DtPriceAsOf: *ofxgo.NewDateGMT(2017, 3, 31, 16, 0, 0, 0),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -452,7 +445,7 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
UniqueId: "922908645",
|
UniqueId: "922908645",
|
||||||
UniqueIdType: "CUSIP",
|
UniqueIdType: "CUSIP",
|
||||||
},
|
},
|
||||||
DtPlaced: ofxgo.Date(time.Date(2017, 3, 10, 12, 44, 45, 0, GMT)),
|
DtPlaced: *ofxgo.NewDateGMT(2017, 3, 10, 12, 44, 45, 0),
|
||||||
Units: oounits1,
|
Units: oounits1,
|
||||||
SubAcct: "CASH",
|
SubAcct: "CASH",
|
||||||
Duration: "GOODTILCANCEL",
|
Duration: "GOODTILCANCEL",
|
||||||
@ -469,7 +462,7 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
UniqueId: "899422348",
|
UniqueId: "899422348",
|
||||||
UniqueIdType: "CUSIP",
|
UniqueIdType: "CUSIP",
|
||||||
},
|
},
|
||||||
DtPlaced: ofxgo.Date(time.Date(2017, 3, 24, 3, 19, 0, 0, GMT)),
|
DtPlaced: *ofxgo.NewDateGMT(2017, 3, 24, 3, 19, 0, 0),
|
||||||
Units: oounits2,
|
Units: oounits2,
|
||||||
SubAcct: "CASH",
|
SubAcct: "CASH",
|
||||||
Duration: "GOODTILCANCEL",
|
Duration: "GOODTILCANCEL",
|
||||||
@ -514,7 +507,7 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
},
|
},
|
||||||
OptType: "PUT",
|
OptType: "PUT",
|
||||||
StrikePrice: strikeprice,
|
StrikePrice: strikeprice,
|
||||||
DtExpire: ofxgo.Date(time.Date(2017, 9, 1, 0, 0, 0, 0, GMT)),
|
DtExpire: *ofxgo.NewDateGMT(2017, 9, 1, 0, 0, 0, 0),
|
||||||
ShPerCtrct: 100,
|
ShPerCtrct: 100,
|
||||||
SecId: &ofxgo.SecurityId{
|
SecId: &ofxgo.SecurityId{
|
||||||
UniqueId: "983322180",
|
UniqueId: "983322180",
|
||||||
@ -722,12 +715,11 @@ NEWFILEUID: NONE
|
|||||||
</SECLISTMSGSRSV1>
|
</SECLISTMSGSRSV1>
|
||||||
</OFX>`)
|
</OFX>`)
|
||||||
var expected ofxgo.Response
|
var expected ofxgo.Response
|
||||||
GMT := time.FixedZone("GMT", 0)
|
|
||||||
|
|
||||||
expected.Version = "102"
|
expected.Version = "102"
|
||||||
expected.Signon.Status.Code = 0
|
expected.Signon.Status.Code = 0
|
||||||
expected.Signon.Status.Severity = "INFO"
|
expected.Signon.Status.Severity = "INFO"
|
||||||
expected.Signon.DtServer = ofxgo.Date(time.Date(2017, 4, 3, 12, 0, 0, 0, GMT))
|
expected.Signon.DtServer = *ofxgo.NewDateGMT(2017, 4, 3, 12, 0, 0, 0)
|
||||||
expected.Signon.Language = "ENG"
|
expected.Signon.Language = "ENG"
|
||||||
expected.Signon.Org = "VV"
|
expected.Signon.Org = "VV"
|
||||||
expected.Signon.Fid = "1000"
|
expected.Signon.Fid = "1000"
|
||||||
@ -742,20 +734,16 @@ NEWFILEUID: NONE
|
|||||||
units2.SetFrac64(-100, 1)
|
units2.SetFrac64(-100, 1)
|
||||||
units3.SetFrac64(1, 1)
|
units3.SetFrac64(1, 1)
|
||||||
|
|
||||||
dtsettle1 := ofxgo.Date(time.Date(2016, 12, 8, 12, 0, 0, 0, GMT))
|
|
||||||
dtsettle2 := ofxgo.Date(time.Date(2016, 12, 20, 12, 0, 0, 0, GMT))
|
|
||||||
dtsettle3 := ofxgo.Date(time.Date(2016, 12, 15, 12, 0, 0, 0, GMT))
|
|
||||||
|
|
||||||
invtranlist := ofxgo.InvTranList{
|
invtranlist := ofxgo.InvTranList{
|
||||||
DtStart: ofxgo.Date(time.Date(2016, 12, 6, 12, 0, 0, 0, GMT)),
|
DtStart: *ofxgo.NewDateGMT(2016, 12, 6, 12, 0, 0, 0),
|
||||||
DtEnd: ofxgo.Date(time.Date(2017, 4, 3, 12, 0, 0, 0, GMT)),
|
DtEnd: *ofxgo.NewDateGMT(2017, 4, 3, 12, 0, 0, 0),
|
||||||
InvTransactions: []ofxgo.InvTransaction{
|
InvTransactions: []ofxgo.InvTransaction{
|
||||||
ofxgo.SellOpt{
|
ofxgo.SellOpt{
|
||||||
InvSell: ofxgo.InvSell{
|
InvSell: ofxgo.InvSell{
|
||||||
InvTran: ofxgo.InvTran{
|
InvTran: ofxgo.InvTran{
|
||||||
FiTId: "12341234-20161207-1",
|
FiTId: "12341234-20161207-1",
|
||||||
DtTrade: ofxgo.Date(time.Date(2016, 12, 7, 12, 0, 0, 0, GMT)),
|
DtTrade: *ofxgo.NewDateGMT(2016, 12, 7, 12, 0, 0, 0),
|
||||||
DtSettle: &dtsettle1,
|
DtSettle: ofxgo.NewDateGMT(2016, 12, 8, 12, 0, 0, 0),
|
||||||
},
|
},
|
||||||
SecId: ofxgo.SecurityId{
|
SecId: ofxgo.SecurityId{
|
||||||
UniqueId: "SPY161216C00226000",
|
UniqueId: "SPY161216C00226000",
|
||||||
@ -775,8 +763,8 @@ NEWFILEUID: NONE
|
|||||||
ofxgo.ClosureOpt{
|
ofxgo.ClosureOpt{
|
||||||
InvTran: ofxgo.InvTran{
|
InvTran: ofxgo.InvTran{
|
||||||
FiTId: "12341234-20161215-1",
|
FiTId: "12341234-20161215-1",
|
||||||
DtTrade: ofxgo.Date(time.Date(2016, 12, 15, 12, 0, 0, 0, GMT)),
|
DtTrade: *ofxgo.NewDateGMT(2016, 12, 15, 12, 0, 0, 0),
|
||||||
DtSettle: &dtsettle2,
|
DtSettle: ofxgo.NewDateGMT(2016, 12, 20, 12, 0, 0, 0),
|
||||||
},
|
},
|
||||||
SecId: ofxgo.SecurityId{
|
SecId: ofxgo.SecurityId{
|
||||||
UniqueId: "78462F10",
|
UniqueId: "78462F10",
|
||||||
@ -790,8 +778,8 @@ NEWFILEUID: NONE
|
|||||||
ofxgo.ClosureOpt{
|
ofxgo.ClosureOpt{
|
||||||
InvTran: ofxgo.InvTran{
|
InvTran: ofxgo.InvTran{
|
||||||
FiTId: "12341234-20161215-2",
|
FiTId: "12341234-20161215-2",
|
||||||
DtTrade: ofxgo.Date(time.Date(2016, 12, 15, 12, 0, 0, 0, GMT)),
|
DtTrade: *ofxgo.NewDateGMT(2016, 12, 15, 12, 0, 0, 0),
|
||||||
DtSettle: &dtsettle3,
|
DtSettle: ofxgo.NewDateGMT(2016, 12, 15, 12, 0, 0, 0),
|
||||||
},
|
},
|
||||||
SecId: ofxgo.SecurityId{
|
SecId: ofxgo.SecurityId{
|
||||||
UniqueId: "SPY161216C00226000",
|
UniqueId: "SPY161216C00226000",
|
||||||
@ -830,7 +818,7 @@ NEWFILEUID: NONE
|
|||||||
Code: 0,
|
Code: 0,
|
||||||
Severity: "INFO",
|
Severity: "INFO",
|
||||||
},
|
},
|
||||||
DtAsOf: ofxgo.Date(time.Date(2017, 4, 3, 12, 0, 0, 0, GMT)),
|
DtAsOf: *ofxgo.NewDateGMT(2017, 4, 3, 12, 0, 0, 0),
|
||||||
CurDef: "USD",
|
CurDef: "USD",
|
||||||
InvAcctFrom: ofxgo.InvAcct{
|
InvAcctFrom: ofxgo.InvAcct{
|
||||||
BrokerId: "www.exampletrader.com",
|
BrokerId: "www.exampletrader.com",
|
||||||
@ -849,7 +837,7 @@ NEWFILEUID: NONE
|
|||||||
Units: posunits1,
|
Units: posunits1,
|
||||||
UnitPrice: posunitprice1,
|
UnitPrice: posunitprice1,
|
||||||
MktVal: posmktval1,
|
MktVal: posmktval1,
|
||||||
DtPriceAsOf: ofxgo.Date(time.Date(2017, 4, 3, 12, 0, 0, 0, GMT)),
|
DtPriceAsOf: *ofxgo.NewDateGMT(2017, 4, 3, 12, 0, 0, 0),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
ofxgo.StockPosition{
|
ofxgo.StockPosition{
|
||||||
@ -863,7 +851,7 @@ NEWFILEUID: NONE
|
|||||||
Units: posunits2,
|
Units: posunits2,
|
||||||
UnitPrice: posunitprice2,
|
UnitPrice: posunitprice2,
|
||||||
MktVal: posmktval2,
|
MktVal: posmktval2,
|
||||||
DtPriceAsOf: ofxgo.Date(time.Date(2017, 4, 3, 12, 0, 0, 0, GMT)),
|
DtPriceAsOf: *ofxgo.NewDateGMT(2017, 4, 3, 12, 0, 0, 0),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -897,7 +885,7 @@ NEWFILEUID: NONE
|
|||||||
},
|
},
|
||||||
OptType: "CALL",
|
OptType: "CALL",
|
||||||
StrikePrice: strikeprice,
|
StrikePrice: strikeprice,
|
||||||
DtExpire: ofxgo.Date(time.Date(2016, 12, 16, 12, 0, 0, 0, GMT)),
|
DtExpire: *ofxgo.NewDateGMT(2016, 12, 16, 12, 0, 0, 0),
|
||||||
ShPerCtrct: 100,
|
ShPerCtrct: 100,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -52,13 +52,13 @@ func TestMarshalProfileRequest(t *testing.T) {
|
|||||||
|
|
||||||
profileRequest := ofxgo.ProfileRequest{
|
profileRequest := ofxgo.ProfileRequest{
|
||||||
TrnUID: "983373",
|
TrnUID: "983373",
|
||||||
DtProfUp: ofxgo.Date(time.Date(2016, 1, 1, 0, 0, 0, 0, EST)),
|
DtProfUp: *ofxgo.NewDate(2016, 1, 1, 0, 0, 0, 0, EST),
|
||||||
}
|
}
|
||||||
request.Prof = append(request.Prof, &profileRequest)
|
request.Prof = append(request.Prof, &profileRequest)
|
||||||
|
|
||||||
request.SetClientFields(&client)
|
request.SetClientFields(&client)
|
||||||
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
||||||
request.Signon.DtClient = ofxgo.Date(time.Date(2016, 6, 14, 7, 34, 0, 0, EST))
|
request.Signon.DtClient = *ofxgo.NewDate(2016, 6, 14, 7, 34, 0, 0, EST)
|
||||||
|
|
||||||
marshalCheckRequest(t, &request, expectedString)
|
marshalCheckRequest(t, &request, expectedString)
|
||||||
}
|
}
|
||||||
@ -214,15 +214,13 @@ NEWFILEUID:NONE
|
|||||||
</PROFMSGSRSV1>
|
</PROFMSGSRSV1>
|
||||||
</OFX>`)
|
</OFX>`)
|
||||||
var expected ofxgo.Response
|
var expected ofxgo.Response
|
||||||
GMT := time.FixedZone("GMT", 0)
|
|
||||||
|
|
||||||
expected.Version = "102"
|
expected.Version = "102"
|
||||||
expected.Signon.Status.Code = 0
|
expected.Signon.Status.Code = 0
|
||||||
expected.Signon.Status.Severity = "INFO"
|
expected.Signon.Status.Severity = "INFO"
|
||||||
expected.Signon.DtServer = ofxgo.Date(time.Date(2017, 4, 3, 9, 34, 58, 0, GMT))
|
expected.Signon.DtServer = *ofxgo.NewDateGMT(2017, 4, 3, 9, 34, 58, 0)
|
||||||
expected.Signon.Language = "ENG"
|
expected.Signon.Language = "ENG"
|
||||||
dtprofup := ofxgo.Date(time.Date(2002, 11, 19, 14, 0, 0, 0, GMT))
|
expected.Signon.DtProfUp = ofxgo.NewDateGMT(2002, 11, 19, 14, 0, 0, 0)
|
||||||
expected.Signon.DtProfUp = &dtprofup
|
|
||||||
|
|
||||||
profileResponse := ofxgo.ProfileResponse{
|
profileResponse := ofxgo.ProfileResponse{
|
||||||
TrnUID: "0f94ce83-13b7-7568-e4fc-c02c7b47e7ab",
|
TrnUID: "0f94ce83-13b7-7568-e4fc-c02c7b47e7ab",
|
||||||
@ -305,7 +303,7 @@ NEWFILEUID:NONE
|
|||||||
ChgPinFirst: false,
|
ChgPinFirst: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
DtProfUp: ofxgo.Date(time.Date(2002, 11, 19, 14, 0, 0, 0, GMT)),
|
DtProfUp: *ofxgo.NewDateGMT(2002, 11, 19, 14, 0, 0, 0),
|
||||||
FiName: "Example Trade Financial",
|
FiName: "Example Trade Financial",
|
||||||
Addr1: "5555 Buhunkus Drive",
|
Addr1: "5555 Buhunkus Drive",
|
||||||
City: "Someville",
|
City: "Someville",
|
||||||
|
@ -62,7 +62,7 @@ func marshalMessageSet(e *xml.Encoder, requests []Message, set messageType) erro
|
|||||||
|
|
||||||
// Overwrite the fields in this Request object controlled by the Client
|
// Overwrite the fields in this Request object controlled by the Client
|
||||||
func (oq *Request) SetClientFields(c *Client) {
|
func (oq *Request) SetClientFields(c *Client) {
|
||||||
oq.Signon.DtClient = Date(time.Now())
|
oq.Signon.DtClient.Time = time.Now()
|
||||||
|
|
||||||
// Overwrite fields that the client controls
|
// Overwrite fields that the client controls
|
||||||
oq.Version = c.OfxVersion()
|
oq.Version = c.OfxVersion()
|
||||||
|
@ -51,13 +51,13 @@ func TestMarshalAcctInfoRequest(t *testing.T) {
|
|||||||
|
|
||||||
acctInfoRequest := ofxgo.AcctInfoRequest{
|
acctInfoRequest := ofxgo.AcctInfoRequest{
|
||||||
TrnUID: "e3ad9bda-38fa-4e5b-8099-1bd567ddef7a",
|
TrnUID: "e3ad9bda-38fa-4e5b-8099-1bd567ddef7a",
|
||||||
DtAcctUp: ofxgo.Date(time.Date(2015, 12, 21, 18, 29, 45, 0, EST)),
|
DtAcctUp: *ofxgo.NewDate(2015, 12, 21, 18, 29, 45, 0, EST),
|
||||||
}
|
}
|
||||||
request.Signup = append(request.Signup, &acctInfoRequest)
|
request.Signup = append(request.Signup, &acctInfoRequest)
|
||||||
|
|
||||||
request.SetClientFields(&client)
|
request.SetClientFields(&client)
|
||||||
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
// Overwrite the DtClient value set by SetClientFields to time.Now()
|
||||||
request.Signon.DtClient = ofxgo.Date(time.Date(2016, 1, 15, 11, 23, 0, 0, EST))
|
request.Signon.DtClient = *ofxgo.NewDate(2016, 1, 15, 11, 23, 0, 0, EST)
|
||||||
|
|
||||||
marshalCheckRequest(t, &request, expectedString)
|
marshalCheckRequest(t, &request, expectedString)
|
||||||
}
|
}
|
||||||
@ -111,17 +111,14 @@ func TestUnmarshalAcctInfoResponse(t *testing.T) {
|
|||||||
</SIGNUPMSGSRSV1>
|
</SIGNUPMSGSRSV1>
|
||||||
</OFX>`)
|
</OFX>`)
|
||||||
var expected ofxgo.Response
|
var expected ofxgo.Response
|
||||||
GMT := time.FixedZone("GMT", 0)
|
|
||||||
|
|
||||||
expected.Version = "203"
|
expected.Version = "203"
|
||||||
expected.Signon.Status.Code = 0
|
expected.Signon.Status.Code = 0
|
||||||
expected.Signon.Status.Severity = "INFO"
|
expected.Signon.Status.Severity = "INFO"
|
||||||
expected.Signon.DtServer = ofxgo.Date(time.Date(2006, 1, 15, 11, 23, 03, 0, GMT))
|
expected.Signon.DtServer = *ofxgo.NewDateGMT(2006, 1, 15, 11, 23, 03, 0)
|
||||||
expected.Signon.Language = "ENG"
|
expected.Signon.Language = "ENG"
|
||||||
dtprofup := ofxgo.Date(time.Date(2005, 2, 21, 9, 13, 0, 0, GMT))
|
expected.Signon.DtProfUp = ofxgo.NewDateGMT(2005, 2, 21, 9, 13, 0, 0)
|
||||||
expected.Signon.DtProfUp = &dtprofup
|
expected.Signon.DtAcctUp = ofxgo.NewDateGMT(2006, 1, 2, 16, 0, 0, 0)
|
||||||
dtacctup := ofxgo.Date(time.Date(2006, 1, 2, 16, 0, 0, 0, GMT))
|
|
||||||
expected.Signon.DtAcctUp = &dtacctup
|
|
||||||
expected.Signon.Org = "BNK"
|
expected.Signon.Org = "BNK"
|
||||||
expected.Signon.Fid = "1987"
|
expected.Signon.Fid = "1987"
|
||||||
|
|
||||||
@ -143,7 +140,7 @@ func TestUnmarshalAcctInfoResponse(t *testing.T) {
|
|||||||
Code: 0,
|
Code: 0,
|
||||||
Severity: "INFO",
|
Severity: "INFO",
|
||||||
},
|
},
|
||||||
DtAcctUp: ofxgo.Date(time.Date(2005, 2, 28, 0, 0, 0, 0, GMT)),
|
DtAcctUp: *ofxgo.NewDateGMT(2005, 2, 28, 0, 0, 0, 0),
|
||||||
AcctInfo: []ofxgo.AcctInfo{{
|
AcctInfo: []ofxgo.AcctInfo{{
|
||||||
Desc: "Personal Checking",
|
Desc: "Personal Checking",
|
||||||
Phone: "888-222-5827",
|
Phone: "888-222-5827",
|
||||||
|
24
types.go
24
types.go
@ -73,7 +73,9 @@ func (a Amount) Equal(o Amount) bool {
|
|||||||
return (&a).Cmp(&o.Rat) == 0
|
return (&a).Cmp(&o.Rat) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
type Date time.Time
|
type Date struct {
|
||||||
|
time.Time
|
||||||
|
}
|
||||||
|
|
||||||
var ofxDateFormats = []string{
|
var ofxDateFormats = []string{
|
||||||
"20060102150405.000",
|
"20060102150405.000",
|
||||||
@ -139,8 +141,7 @@ func (od *Date) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
|||||||
for _, format := range ofxDateFormats {
|
for _, format := range ofxDateFormats {
|
||||||
t, err := time.Parse(format+zoneFormat, value+zone)
|
t, err := time.Parse(format+zoneFormat, value+zone)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
tmpod := Date(t)
|
od.Time = t
|
||||||
*od = tmpod
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,9 +149,8 @@ func (od *Date) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (od Date) String() string {
|
func (od Date) String() string {
|
||||||
t := time.Time(od)
|
format := od.Format(ofxDateFormats[0])
|
||||||
format := t.Format(ofxDateFormats[0])
|
zonename, zoneoffset := od.Zone()
|
||||||
zonename, zoneoffset := t.Zone()
|
|
||||||
if zoneoffset < 0 {
|
if zoneoffset < 0 {
|
||||||
format += "[" + fmt.Sprintf("%+d", zoneoffset/3600)
|
format += "[" + fmt.Sprintf("%+d", zoneoffset/3600)
|
||||||
} else {
|
} else {
|
||||||
@ -175,7 +175,17 @@ func (od *Date) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (od Date) Equal(o Date) bool {
|
func (od Date) Equal(o Date) bool {
|
||||||
return time.Time(od).Equal(time.Time(o))
|
return od.Time.Equal(o.Time)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDate(year int, month time.Month, day, hour, min, sec, nsec int, loc *time.Location) *Date {
|
||||||
|
return &Date{Time: time.Date(year, month, day, hour, min, sec, nsec, loc)}
|
||||||
|
}
|
||||||
|
|
||||||
|
var gmt = time.FixedZone("GMT", 0)
|
||||||
|
|
||||||
|
func NewDateGMT(year int, month time.Month, day, hour, min, sec, nsec int) *Date {
|
||||||
|
return &Date{Time: time.Date(year, month, day, hour, min, sec, nsec, gmt)}
|
||||||
}
|
}
|
||||||
|
|
||||||
type String string
|
type String string
|
||||||
|
126
types_test.go
126
types_test.go
@ -122,7 +122,7 @@ func TestUnmarshalAmount(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestMarshalDate(t *testing.T) {
|
func TestMarshalDate(t *testing.T) {
|
||||||
var d ofxgo.Date
|
var d *ofxgo.Date
|
||||||
UTC := time.FixedZone("UTC", 0)
|
UTC := time.FixedZone("UTC", 0)
|
||||||
GMT_nodesc := time.FixedZone("", 0)
|
GMT_nodesc := time.FixedZone("", 0)
|
||||||
EST := time.FixedZone("EST", -5*60*60)
|
EST := time.FixedZone("EST", -5*60*60)
|
||||||
@ -130,32 +130,35 @@ func TestMarshalDate(t *testing.T) {
|
|||||||
IST := time.FixedZone("IST", (5*60+30)*60)
|
IST := time.FixedZone("IST", (5*60+30)*60)
|
||||||
NST := time.FixedZone("NST", -(3*60+30)*60)
|
NST := time.FixedZone("NST", -(3*60+30)*60)
|
||||||
|
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, NPT))
|
d = ofxgo.NewDateGMT(2017, 3, 14, 15, 9, 26, 53*1000*1000)
|
||||||
marshalHelper(t, "20170314150926.053[5.75:NPT]", &d)
|
marshalHelper(t, "20170314150926.053[0:GMT]", d)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, EST))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, NPT)
|
||||||
marshalHelper(t, "20170314150926.053[-5:EST]", &d)
|
marshalHelper(t, "20170314150926.053[5.75:NPT]", d)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, UTC))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, EST)
|
||||||
marshalHelper(t, "20170314150926.053[0:UTC]", &d)
|
marshalHelper(t, "20170314150926.053[-5:EST]", d)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, IST))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, UTC)
|
||||||
marshalHelper(t, "20170314150926.053[5.50:IST]", &d)
|
marshalHelper(t, "20170314150926.053[0:UTC]", d)
|
||||||
d = ofxgo.Date(time.Date(9999, 11, 1, 23, 59, 59, 1000, EST))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, IST)
|
||||||
marshalHelper(t, "99991101235959.000[-5:EST]", &d)
|
marshalHelper(t, "20170314150926.053[5.50:IST]", d)
|
||||||
d = ofxgo.Date(time.Date(0, 1, 1, 0, 0, 0, 0, IST))
|
d = ofxgo.NewDate(9999, 11, 1, 23, 59, 59, 1000, EST)
|
||||||
marshalHelper(t, "00000101000000.000[5.50:IST]", &d)
|
marshalHelper(t, "99991101235959.000[-5:EST]", d)
|
||||||
d = ofxgo.Date(time.Unix(0, 0).In(UTC))
|
d = ofxgo.NewDate(0, 1, 1, 0, 0, 0, 0, IST)
|
||||||
marshalHelper(t, "19700101000000.000[0:UTC]", &d)
|
marshalHelper(t, "00000101000000.000[5.50:IST]", d)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 0, 0, 26, 53*1000*1000, EST))
|
d = &ofxgo.Date{Time: time.Unix(0, 0).In(UTC)}
|
||||||
marshalHelper(t, "20170314000026.053[-5:EST]", &d)
|
marshalHelper(t, "19700101000000.000[0:UTC]", d)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 0, 0, 26, 53*1000*1000, NST))
|
d = ofxgo.NewDate(2017, 3, 14, 0, 0, 26, 53*1000*1000, EST)
|
||||||
marshalHelper(t, "20170314000026.053[-3.50:NST]", &d)
|
marshalHelper(t, "20170314000026.053[-5:EST]", d)
|
||||||
|
d = ofxgo.NewDate(2017, 3, 14, 0, 0, 26, 53*1000*1000, NST)
|
||||||
|
marshalHelper(t, "20170314000026.053[-3.50:NST]", d)
|
||||||
|
|
||||||
// Time zone without textual description
|
// Time zone without textual description
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMT_nodesc))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMT_nodesc)
|
||||||
marshalHelper(t, "20170314150926.053[0]", &d)
|
marshalHelper(t, "20170314150926.053[0]", d)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUnmarshalDate(t *testing.T) {
|
func TestUnmarshalDate(t *testing.T) {
|
||||||
var d, overwritten ofxgo.Date
|
var d *ofxgo.Date
|
||||||
|
var overwritten ofxgo.Date
|
||||||
GMT := time.FixedZone("GMT", 0)
|
GMT := time.FixedZone("GMT", 0)
|
||||||
EST := time.FixedZone("EST", -5*60*60)
|
EST := time.FixedZone("EST", -5*60*60)
|
||||||
NPT := time.FixedZone("NPT", (5*60+45)*60)
|
NPT := time.FixedZone("NPT", (5*60+45)*60)
|
||||||
@ -166,62 +169,61 @@ func TestUnmarshalDate(t *testing.T) {
|
|||||||
eq := func(a, b interface{}) bool {
|
eq := func(a, b interface{}) bool {
|
||||||
if dateA, ok := a.(*ofxgo.Date); ok {
|
if dateA, ok := a.(*ofxgo.Date); ok {
|
||||||
if dateB, ok2 := b.(*ofxgo.Date); ok2 {
|
if dateB, ok2 := b.(*ofxgo.Date); ok2 {
|
||||||
timeA := (*time.Time)(dateA)
|
return dateA.Equal(*dateB)
|
||||||
return timeA.Equal((time.Time)(*dateB))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure omitted fields default to the correct values
|
// Ensure omitted fields default to the correct values
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMT))
|
d = ofxgo.NewDateGMT(2017, 3, 14, 15, 9, 26, 53*1000*1000)
|
||||||
unmarshalHelper2(t, "20170314150926.053[0]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[0]", d, &overwritten, eq)
|
||||||
unmarshalHelper2(t, "20170314150926.053", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 0, 0, 0, 0, GMT))
|
d = ofxgo.NewDate(2017, 3, 14, 0, 0, 0, 0, GMT)
|
||||||
unmarshalHelper2(t, "20170314", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314", d, &overwritten, eq)
|
||||||
|
|
||||||
// Ensure all signs on time zone offsets are properly handled
|
// Ensure all signs on time zone offsets are properly handled
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMT))
|
d = ofxgo.NewDateGMT(2017, 3, 14, 15, 9, 26, 53*1000*1000)
|
||||||
unmarshalHelper2(t, "20170314150926.053[0:GMT]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[0:GMT]", d, &overwritten, eq)
|
||||||
unmarshalHelper2(t, "20170314150926.053[+0:GMT]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[+0:GMT]", d, &overwritten, eq)
|
||||||
unmarshalHelper2(t, "20170314150926.053[-0:GMT]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[-0:GMT]", d, &overwritten, eq)
|
||||||
unmarshalHelper2(t, "20170314150926.053[0]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[0]", d, &overwritten, eq)
|
||||||
unmarshalHelper2(t, "20170314150926.053[+0]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[+0]", d, &overwritten, eq)
|
||||||
unmarshalHelper2(t, "20170314150926.053[-0]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[-0]", d, &overwritten, eq)
|
||||||
|
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, NPT))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, NPT)
|
||||||
unmarshalHelper2(t, "20170314150926.053[5.75:NPT]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[5.75:NPT]", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, EST))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, EST)
|
||||||
unmarshalHelper2(t, "20170314150926.053[-5:EST]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[-5:EST]", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMT))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMT)
|
||||||
unmarshalHelper2(t, "20170314150926.053[0:GMT]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[0:GMT]", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, IST))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, IST)
|
||||||
unmarshalHelper2(t, "20170314150926.053[5.50:IST]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[5.50:IST]", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Date(2018, 11, 1, 23, 59, 58, 0, EST))
|
d = ofxgo.NewDate(2018, 11, 1, 23, 59, 58, 0, EST)
|
||||||
unmarshalHelper2(t, "20181101235958.000[-5:EST]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20181101235958.000[-5:EST]", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Date(0, 1, 1, 0, 0, 0, 0, IST))
|
d = ofxgo.NewDate(0, 1, 1, 0, 0, 0, 0, IST)
|
||||||
unmarshalHelper2(t, "00000101000000.000[5.50:IST]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "00000101000000.000[5.50:IST]", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Unix(0, 0).In(GMT))
|
d = &ofxgo.Date{Time: time.Unix(0, 0).In(GMT)}
|
||||||
unmarshalHelper2(t, "19700101000000.000[0:GMT]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "19700101000000.000[0:GMT]", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 0, 0, 26, 53*1000*1000, EST))
|
d = ofxgo.NewDate(2017, 3, 14, 0, 0, 26, 53*1000*1000, EST)
|
||||||
unmarshalHelper2(t, "20170314000026.053[-5:EST]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314000026.053[-5:EST]", d, &overwritten, eq)
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 0, 0, 26, 53*1000*1000, NST))
|
d = ofxgo.NewDate(2017, 3, 14, 0, 0, 26, 53*1000*1000, NST)
|
||||||
unmarshalHelper2(t, "20170314000026.053[-3.50:NST]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314000026.053[-3.50:NST]", d, &overwritten, eq)
|
||||||
|
|
||||||
// Autopopulate zone without textual description for GMT
|
// Autopopulate zone without textual description for GMT
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMT))
|
d = ofxgo.NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMT)
|
||||||
unmarshalHelper2(t, "20170314150926.053[0]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314150926.053[0]", d, &overwritten, eq)
|
||||||
// but not for others:
|
// but not for others:
|
||||||
d = ofxgo.Date(time.Date(2017, 3, 14, 0, 0, 26, 53*1000*1000, NST_nodesc))
|
d = ofxgo.NewDate(2017, 3, 14, 0, 0, 26, 53*1000*1000, NST_nodesc)
|
||||||
unmarshalHelper2(t, "20170314000026.053[-3.50]", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20170314000026.053[-3.50]", d, &overwritten, eq)
|
||||||
|
|
||||||
// Make sure we handle poorly-formatted dates (from Vanguard)
|
// Make sure we handle poorly-formatted dates (from Vanguard)
|
||||||
d = ofxgo.Date(time.Date(2016, 12, 7, 16, 0, 0, 0, EST))
|
d = ofxgo.NewDate(2016, 12, 7, 16, 0, 0, 0, EST)
|
||||||
unmarshalHelper2(t, "20161207160000.000[-5:EST]610900.500[-9:BST]", &d, &overwritten, eq) // extra part intentionally different to ensure the first timezone is parsed
|
unmarshalHelper2(t, "20161207160000.000[-5:EST]610900.500[-9:BST]", d, &overwritten, eq) // extra part intentionally different to ensure the first timezone is parsed
|
||||||
|
|
||||||
// Make sure we properly handle ending newlines
|
// Make sure we properly handle ending newlines
|
||||||
d = ofxgo.Date(time.Date(2018, 11, 1, 23, 59, 58, 0, EST))
|
d = ofxgo.NewDate(2018, 11, 1, 23, 59, 58, 0, EST)
|
||||||
unmarshalHelper2(t, "20181101235958.000[-5:EST]\n", &d, &overwritten, eq)
|
unmarshalHelper2(t, "20181101235958.000[-5:EST]\n", d, &overwritten, eq)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMarshalString(t *testing.T) {
|
func TestMarshalString(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user