123');
$this->assertEquals($array, ['root' => ['foo' => 123]]);
}
public function testDashesUnderscores()
{
$xml =<<
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(['root' =>
['dashEs' => '', 'underScores' => '']], $array);
}
public function testCustomFieldsUnderscore()
{
$xml =<<
convert to underscore
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(['root' =>
['customFields' => ['with_dashes' => 'convert to underscore']]], $array);
}
public function testNullOrEmptyString()
{
$xml = <<
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(['root' =>
['aNilValue' => null, 'anEmptyString' => '']], $array);
}
public function testTypeCastsDatetimes()
{
$xml = <<
2009-10-28T10:19:49Z
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
date_default_timezone_set('UTC');
$dateTime = new DateTime('2009-10-28T10:19:49', new DateTimeZone('UTC'));
$this->assertEquals(['root' => ['createdAt' => $dateTime]], $array);
$this->assertInstanceOf('DateTime', $array['root']['createdAt']);
}
public function testTypeCastsDates()
{
$xml = <<
2009-10-28
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
date_default_timezone_set('UTC');
$dateTime = new DateTime('2009-10-28', new DateTimeZone('UTC'));
$this->assertEquals(['root' => ['someDate' => $dateTime]], $array);
}
public function testBuildsArray()
{
$xml = <<
Adam
Ben
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(['root' =>
['customers' =>
[['name' => 'Adam'],
['name' => 'Ben']]
]
], $array
);
}
public function testReturnsBoolean()
{
$xml = <<
true
1
false
anything
true
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(
['root' =>
['castedTrue' => true,
'castedOne' => true,
'castedFalse' => false,
'castedAnything' => false,
'uncastedTrue' => 'true']
], $array);
}
public function testEmptyArrayAndNestedElements()
{
$xml = <<
1
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(
['root' => [
'noValues' => [],
'nestedValues' => [
'value' => 1
]
]
], $array);
}
public function testParsingNilEqualsTrueAfterArray()
{
$xml = <<
Dan
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(null, $array['root']['blank']);
}
public function testTransactionParsingNil()
{
$xml = <<
8ysndw
settled
sale
USD
1.00
default
2010-04-01T19:32:23Z
2010-04-02T08:05:35Z
First
Last
Widgets Inc
1234 My Street
Apt 1
Ottawa
ON
K1C2N6
Canada
M
M
M
13390
1000
Approved
510510
5100
MasterCard
09
2011
US
2010-04-01T19:32:24Z
authorized
1.00
dmanges-am
API
2010-04-01T19:32:25Z
submitted_for_settlement
1.00
dmanges-am
API
2010-04-02T08:05:36Z
settled
1.00
XML;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(null, $array['transaction']['avsErrorResponseCode']);
$this->assertEquals(null, $array['transaction']['refundId']);
$this->assertEquals(null, $array['transaction']['orderId']);
$this->assertEquals(null, $array['transaction']['channel']);
$this->assertEquals(null, $array['transaction']['customer']['fax']);
$this->assertEquals(null, $array['transaction']['creditCard']['token']);
$this->assertEquals(null, $array['transaction']['creditCard']['cardholderName']);
$this->assertEquals('First', $array['transaction']['customer']['firstName']);
$this->assertEquals('Approved', $array['transaction']['processorResponseText']);
}
public function testParsingWithNodeHavingSameNameAsNodesDirectlyUnderCollection()
{
$xml = <<
50
one
two
bug was here
END;
$array = Braintree\Xml::buildArrayFromXml($xml);
$this->assertEquals(['baz' => 'two', 'bar' => 'bug was here'], $array['foos']['bar'][1]);
}
public function testParsingCreditCardSearchResults()
{
$xml = <<
1
50
8
411111
John Doe
Visa
2010-07-02T15:50:51Z
589636
true
05
2009
true
US
1111
22pb
2010-07-02T15:50:51Z
411111
Visa
2010-07-02T15:52:09Z
613603
false
05
2009
true
US
1111
hzjh8b
54.32
integration_trialless_plan
2010-07-02
2010-08-02
2010-07-02
2010-08-01
sandbox_credit_card
false
Active
0
3wx6
2dpk76
submitted_for_settlement
sale
USD
54.32
sandbox_credit_card
2010-07-02T15:52:09Z
2010-07-02T15:52:09Z
613603
Mike
Jones
I
I
I
9ZR5QB
1000
Approved
sb8w
411111
1111
Visa
05
2010
US
2010-07-02T15:52:09Z
authorized
54.32
merchant
Recurring
2010-07-02T15:52:09Z
submitted_for_settlement
54.32
merchant
Recurring
hzjh8b
3wx6
2010-07-02T15:52:09Z
END;
$array = Braintree\Xml::buildArrayFromXml($xml);
$creditCards = $array['paymentMethods']['creditCard'];
$creditCardWithSubscription = $creditCards[1];
$transaction = $creditCardWithSubscription['subscriptions'][0]['transactions'][0];
$this->assertEquals('411111', $transaction['creditCard']['bin']);
$this->assertEquals('1111', $transaction['creditCard']['last4']);
$this->assertEquals('Visa', $transaction['creditCard']['cardType']);
}
public function xmlAndBack($array)
{
$xml = Braintree\Xml::buildXmlFromArray($array);
return Braintree\Xml::buildArrayFromXml($xml);
}
public function testSimpleCaseRoundtrip()
{
$array = ['root' => [
'foo' => 'fooValue',
'bar' => 'barValue']
];
$array2 = $this->xmlAndBack($array);
$this->assertEquals($array, $array2);
}
public function testArrayRoundtrip()
{
$array = ['root' => [
'items' => [
['name' => 'first'],
['name' => 'second'],
]
]];
$array2 = $this->xmlAndBack($array);
$this->assertEquals($array, $array2);
}
public function testBooleanRoundtrip()
{
$array = ['root' => [
'stringTrue' => true,
'boolTrue' => true,
'stringFalse' => false,
'boolFalse' => false,
]];
$array2 = $this->xmlAndBack($array);
$this->assertEquals($array, $array2);
}
public function testTimestampRoundtrip()
{
date_default_timezone_set('UTC');
$array = ['root' => [
'aTimestamp' => date('D M d H:i:s e Y', mktime(1, 2, 3, 10, 28, 2009)),
]];
$array2 = $this->xmlAndBack($array);
$this->assertEquals($array, $array2);
}
public function testNullvsEmptyStringToXml()
{
$array = ['root' => [
'anEmptyString' => '',
'aNullValue' => null,
]];
$xml = Braintree\Xml::buildXmlFromArray($array);
$xml2 =<<
XML;
$this->assertEquals($xml, $xml2);
}
public function testIncludesTheEncodingRoundtrip()
{
$array = ['root' => [
'root' => 'bar',
]];
$xml = Braintree\Xml::buildXmlFromArray($array);
$this->assertRegExp('<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>', $xml);
}
public function testRootNodeAndStringRoundtrip()
{
$array = ['id' => '123'];
$array2 = $this->xmlAndBack($array);
$this->assertEquals($array, $array2);
}
}