/** * Tests Box->toXML */ public function testInternationalToXML() { $data = array('sender' => array('name' => 'Tijs Verkoyen', 'company' => 'Sumo Coders', 'address' => array('streetName' => 'Afrikalaan', 'number' => '289', 'box' => '3', 'postalCode' => '9000', 'locality' => 'Gent', 'countryCode' => 'BE'), 'emailAddress' => '*****@*****.**', 'phoneNumber' => '+32 9 395 02 51'), 'internationalBox' => array('international' => array('product' => 'bpack World Express Pro', 'receiver' => array('name' => 'Tijs Verkoyen', 'company' => 'Sumo Coders', 'address' => array('streetName' => 'Kerkstraat', 'number' => '108', 'postalCode' => '9050', 'locality' => 'Gentbrugge', 'countryCode' => 'BE'), 'emailAddress' => '*****@*****.**', 'phoneNumber' => '+32 9 395 02 51'))), 'remark' => 'remark'); $expectedDocument = self::createDomDocument(); $box = $expectedDocument->createElement('box'); $expectedDocument->appendChild($box); $sender = $expectedDocument->createElement('sender'); foreach ($data['sender'] as $key => $value) { $key = 'common:' . $key; if ($key == 'common:address') { $address = $expectedDocument->createElement($key); foreach ($value as $key2 => $value2) { $key2 = 'common:' . $key2; $address->appendChild($expectedDocument->createElement($key2, $value2)); } $sender->appendChild($address); } else { $sender->appendChild($expectedDocument->createElement($key, $value)); } } $nationalBox = $expectedDocument->createElement('internationalBox'); $atHome = $expectedDocument->createElement('international:international'); $nationalBox->appendChild($atHome); $atHome->appendChild($expectedDocument->createElement('international:product', $data['internationalBox']['international']['product'])); $receiver = $expectedDocument->createElement('international:receiver'); $atHome->appendChild($receiver); foreach ($data['internationalBox']['international']['receiver'] as $key => $value) { $key = 'common:' . $key; if ($key == 'common:address') { $address = $expectedDocument->createElement($key); foreach ($value as $key2 => $value2) { $key2 = 'common:' . $key2; $address->appendChild($expectedDocument->createElement($key2, $value2)); } $receiver->appendChild($address); } else { $receiver->appendChild($expectedDocument->createElement($key, $value)); } } $box->appendChild($sender); $box->appendChild($nationalBox); $box->appendChild($expectedDocument->createElement('remark', $data['remark'])); $actualDocument = self::createDomDocument(); $address = new Address($data['sender']['address']['streetName'], $data['sender']['address']['number'], $data['sender']['address']['box'], $data['sender']['address']['postalCode'], $data['sender']['address']['locality'], $data['sender']['address']['countryCode']); $sender = new Sender(); $sender->setName($data['sender']['name']); $sender->setCompany($data['sender']['company']); $sender->setAddress($address); $sender->setEmailAddress($data['sender']['emailAddress']); $sender->setPhoneNumber($data['sender']['phoneNumber']); $address = new Address($data['internationalBox']['international']['receiver']['address']['streetName'], $data['internationalBox']['international']['receiver']['address']['number'], null, $data['internationalBox']['international']['receiver']['address']['postalCode'], $data['internationalBox']['international']['receiver']['address']['locality'], $data['internationalBox']['international']['receiver']['address']['countryCode']); $receiver = new Receiver(); $receiver->setAddress($address); $receiver->setName($data['internationalBox']['international']['receiver']['name']); $receiver->setCompany($data['internationalBox']['international']['receiver']['company']); $receiver->setPhoneNumber($data['internationalBox']['international']['receiver']['phoneNumber']); $receiver->setEmailAddress($data['internationalBox']['international']['receiver']['emailAddress']); $international = new International(); $international->setProduct($data['internationalBox']['international']['product']); $international->setReceiver($receiver); $box = new Box(); $box->setSender($sender); $box->setInternationalBox($international); $box->setRemark($data['remark']); $actualDocument->appendChild($box->toXML($actualDocument, null)); $this->assertEquals($expectedDocument, $actualDocument); }
/** * @param \SimpleXMLElement $xml * @return Box */ public static function createFromXML(\SimpleXMLElement $xml) { $box = new Box(); if (isset($xml->sender)) { $box->setSender(Sender::createFromXML($xml->sender->children('http://schema.post.be/shm/deepintegration/v3/common'))); } if (isset($xml->nationalBox)) { $nationalBoxData = $xml->nationalBox->children('http://schema.post.be/shm/deepintegration/v3/national'); // build classname based on the tag name $className = '\\TijsVerkoyen\\Bpost\\Bpost\\Order\\Box\\' . ucfirst($nationalBoxData->getName()); if ($nationalBoxData->getName() == 'at24-7') { $className = '\\TijsVerkoyen\\Bpost\\Bpost\\Order\\Box\\At247'; } if (!method_exists($className, 'createFromXML')) { throw new Exception('Not Implemented'); } $nationalBox = call_user_func(array($className, 'createFromXML'), $nationalBoxData); $box->setNationalBox($nationalBox); } if (isset($xml->internationalBox)) { $internationalBoxData = $xml->internationalBox->children('http://schema.post.be/shm/deepintegration/v3/international'); // build classname based on the tag name $className = '\\TijsVerkoyen\\Bpost\\Bpost\\Order\\Box\\' . ucfirst($internationalBoxData->getName()); if (!method_exists($className, 'createFromXML')) { var_dump($className); throw new Exception('Not Implemented'); } $internationalBox = call_user_func(array($className, 'createFromXML'), $internationalBoxData); $box->setInternationalBox($internationalBox); } if (isset($xml->remark) && $xml->remark != '') { $box->setRemark((string) $xml->remark); } if (isset($xml->status) && $xml->status != '') { $box->setStatus((string) $xml->status); } return $box; }