package ofxgo_test
import (
	"github.com/aclindsa/ofxgo"
	"strings"
	"testing"
	"time"
)
func TestMarshalAcctInfoRequest(t *testing.T) {
	var expectedString string = `
	
		
			20160115112300.000[-5:EST]
			myusername
			Pa$$word
			ENG
			
				BNK
				1987
			
			OFXGO
			0001
		
	
	
		
			e3ad9bda-38fa-4e5b-8099-1bd567ddef7a
			
				20151221182945.000[-5:EST]
			
		
	
`
	EST := time.FixedZone("EST", -5*60*60)
	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"
	acctInfoRequest := ofxgo.AcctInfoRequest{
		TrnUID:   "e3ad9bda-38fa-4e5b-8099-1bd567ddef7a",
		DtAcctUp: ofxgo.Date(time.Date(2015, 12, 21, 18, 29, 45, 0, EST)),
	}
	request.Signup = append(request.Signup, &acctInfoRequest)
	request.SetClientFields(&client)
	// 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))
	marshalCheckRequest(t, &request, expectedString)
}
func TestUnmarshalAcctInfoResponse(t *testing.T) {
	responseReader := strings.NewReader(`
	
		
			
				0
				INFO
			
			20060115112303
			ENG
			20050221091300
			20060102160000
			
				BNK
				1987
			
		
	
	
		
			10938754
			
				0
				INFO
			
			
				20050228
				
					Personal Checking
					888-222-5827
					
						
							8367556009
							000999847
							MONEYMRKT
						
						Y
						Y
						Y
						ACTIVE
					
				
			
		
	
`)
	var expected ofxgo.Response
	GMT := time.FixedZone("GMT", 0)
	expected.Version = "203"
	expected.Signon.Status.Code = 0
	expected.Signon.Status.Severity = "INFO"
	expected.Signon.DtServer = ofxgo.Date(time.Date(2006, 1, 15, 11, 23, 03, 0, GMT))
	expected.Signon.Language = "ENG"
	dtprofup := ofxgo.Date(time.Date(2005, 2, 21, 9, 13, 0, 0, GMT))
	expected.Signon.DtProfUp = &dtprofup
	dtacctup := ofxgo.Date(time.Date(2006, 1, 2, 16, 0, 0, 0, GMT))
	expected.Signon.DtAcctUp = &dtacctup
	expected.Signon.Org = "BNK"
	expected.Signon.Fid = "1987"
	bankacctinfo := ofxgo.BankAcctInfo{
		BankAcctFrom: ofxgo.BankAcct{
			BankId:   "8367556009",
			AcctId:   "000999847",
			AcctType: "MONEYMRKT",
		},
		SupTxDl:   true,
		XferSrc:   true,
		XferDest:  true,
		SvcStatus: "ACTIVE",
	}
	acctInfoResponse := ofxgo.AcctInfoResponse{
		TrnUID: "10938754",
		Status: ofxgo.Status{
			Code:     0,
			Severity: "INFO",
		},
		DtAcctUp: ofxgo.Date(time.Date(2005, 2, 28, 0, 0, 0, 0, GMT)),
		AcctInfo: []ofxgo.AcctInfo{{
			Desc:         "Personal Checking",
			Phone:        "888-222-5827",
			BankAcctInfo: &bankacctinfo,
		}},
	}
	expected.Signup = append(expected.Signup, &acctInfoResponse)
	response, err := ofxgo.ParseResponse(responseReader)
	if err != nil {
		t.Fatalf("Unexpected error unmarshalling response: %s\n", err)
	}
	checkResponsesEqual(t, &expected, response)
}