package ofxgo_test import ( "github.com/aclindsa/ofxgo" "strings" "testing" "time" ) func TestMarshalCCStatementRequest(t *testing.T) { var expectedString string = ` 20170331153848.000[0:GMT] myusername Pa$$word ENG BNK 1987 OFXGO 0001 913846 XXXXXXXXXXXX1234 20170101000000.000[0:GMT] Y ` var client = ofxgo.Client{ AppId: "OFXGO", AppVer: "0001", SpecVersion: "203", } var request ofxgo.Request request.Signon.UserId = "myusername" request.Signon.UserPass = "Pa$$word" request.Signon.Org = "BNK" 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{ TrnUID: "913846", CCAcctFrom: ofxgo.CCAcct{ AcctId: "XXXXXXXXXXXX1234", }, DtStart: &dtstart, Include: true, } request.CreditCard = append(request.CreditCard, &statementRequest) request.SetClientFields(&client) // 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)) marshalCheckRequest(t, &request, expectedString) } func TestUnmarshalCCStatementResponse102(t *testing.T) { responseReader := strings.NewReader(`OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE 0INFOSUCCESS20170331154648.331[-4:EDT]ENG018172959e850ad-7448-b4ce-4b71-29057763b3060INFOUSD928374448846377520161201154648.688[-5:EST]20170331154648.688[-4:EDT]DEBIT20170209120000[0:GMT]-7.962017020924435657040207171600195SLICE OF NYCREDIT20161228120000[0:GMT]3830.462016122823633637200000258482730Payment Thank You ElectroDEBIT20170327120000[0:GMT]-17.72017032724445727085300442885680KROGER FUEL #9999-933420170331080000.000[-4:EDT]7630.1720170331080000.000[-4:EDT]`) var expected ofxgo.Response GMT := time.FixedZone("GMT", 0) EDT := time.FixedZone("EDT", -4*60*60) EST := time.FixedZone("EST", -5*60*60) expected.Version = "102" expected.Signon.Status.Code = 0 expected.Signon.Status.Severity = "INFO" expected.Signon.Status.Message = "SUCCESS" expected.Signon.DtServer = ofxgo.Date(time.Date(2017, 3, 31, 15, 46, 48, 331000000, EDT)) expected.Signon.Language = "ENG" expected.Signon.Org = "01" expected.Signon.Fid = "81729" var trnamt1, trnamt2, trnamt3 ofxgo.Amount trnamt1.SetFrac64(-796, 100) trnamt2.SetFrac64(383046, 100) trnamt3.SetFrac64(-1770, 100) banktranlist := ofxgo.TransactionList{ DtStart: ofxgo.Date(time.Date(2016, 12, 1, 15, 46, 48, 688000000, EST)), DtEnd: ofxgo.Date(time.Date(2017, 3, 31, 15, 46, 48, 688000000, EDT)), Transactions: []ofxgo.Transaction{ { TrnType: "DEBIT", DtPosted: ofxgo.Date(time.Date(2017, 2, 9, 12, 0, 0, 0, GMT)), TrnAmt: trnamt1, FiTId: "2017020924435657040207171600195", Name: "SLICE OF NY", }, { TrnType: "CREDIT", DtPosted: ofxgo.Date(time.Date(2016, 12, 28, 12, 0, 0, 0, GMT)), TrnAmt: trnamt2, FiTId: "2016122823633637200000258482730", Name: "Payment Thank You Electro", }, { TrnType: "DEBIT", DtPosted: ofxgo.Date(time.Date(2017, 3, 27, 12, 0, 0, 0, GMT)), TrnAmt: trnamt3, FiTId: "2017032724445727085300442885680", Name: "KROGER FUEL #9999", }, }, } var balamt, availbalamt ofxgo.Amount balamt.SetFrac64(-933400, 100) availbalamt.SetFrac64(763017, 100) availdtasof := ofxgo.Date(time.Date(2017, 3, 31, 8, 0, 0, 0, EDT)) statementResponse := ofxgo.CCStatementResponse{ TrnUID: "59e850ad-7448-b4ce-4b71-29057763b306", Status: ofxgo.Status{ Code: 0, Severity: "INFO", }, CurDef: "USD", CCAcctFrom: ofxgo.CCAcct{ AcctId: "9283744488463775", }, BankTranList: &banktranlist, BalAmt: balamt, DtAsOf: ofxgo.Date(time.Date(2017, 3, 31, 8, 0, 0, 0, EDT)), AvailBalAmt: &availbalamt, AvailDtAsOf: &availdtasof, } expected.CreditCard = append(expected.CreditCard, &statementResponse) response, err := ofxgo.ParseResponse(responseReader) if err != nil { t.Fatalf("Unexpected error unmarshalling response: %s\n", err) } checkResponsesEqual(t, &expected, response) }