From ff6088ec9c5c14b6a5910312613d18d254798b69 Mon Sep 17 00:00:00 2001 From: Adrien Gallou Date: Sun, 25 Dec 2016 14:11:57 +0100 Subject: [PATCH 1/4] factorisation chargement des classes dans les tests --- .atoum.php | 2 ++ tests/bootstrap.php | 3 +++ tests/units/Aperophp/Meetup/EventTransformer.php | 2 -- tests/units/Aperophp/Meetup/UserTransformer.php | 2 -- 4 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 tests/bootstrap.php diff --git a/.atoum.php b/.atoum.php index 99a59b3..58b88f3 100644 --- a/.atoum.php +++ b/.atoum.php @@ -1,6 +1,8 @@ disableCodeCoverage(); +$runner->setBootstrapFile(__DIR__ . '/tests/bootstrap.php'); $runner->addTestsFromDirectory(__DIR__ . '/tests/units'); ## Notifier (growlnotify) diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..42e16e6 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,3 @@ + Date: Sun, 25 Dec 2016 14:13:35 +0100 Subject: [PATCH 2/4] update atoum and add xml-extension --- .atoum.php | 3 ++ composer.json | 3 +- composer.lock | 130 +++++++++++++++++++++++++++++++++++--------------- 3 files changed, 97 insertions(+), 39 deletions(-) diff --git a/.atoum.php b/.atoum.php index 58b88f3..056e2ef 100644 --- a/.atoum.php +++ b/.atoum.php @@ -1,10 +1,13 @@ addExtension(new \mageekguy\atoum\xml\extension($script)); $runner->disableCodeCoverage(); $runner->setBootstrapFile(__DIR__ . '/tests/bootstrap.php'); $runner->addTestsFromDirectory(__DIR__ . '/tests/units'); + ## Notifier (growlnotify) $images = __DIR__ . '/vendor/atoum/atoum/resources/images/logo'; diff --git a/composer.json b/composer.json index b7e6fe9..95db8b8 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,8 @@ "atoum/stubs": "^2.5" }, "require-dev": { - "atoum/atoum" : "dev-master" + "atoum/atoum" : "2.8.x", + "shulard/atoum-xml-extension": "^0.1.0" }, "autoload": { "psr-0": { diff --git a/composer.lock b/composer.lock index 297e3a2..8f38ec4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "32e7a0383116c306d7b1a03b61eec762", - "content-hash": "3edd49fe872cb1f579c0c25b6390076f", + "hash": "0d61793c92e9c3df8f92b33c75211170", + "content-hash": "6a844493f80980c2b400fde544f79cfa", "packages": [ { "name": "Gravatar/Gravatar", @@ -18,7 +18,7 @@ "dist": { "type": "zip", "url": "https://github.com/sveneisenschmidt/Gravatar-php/zipball/master", - "reference": null, + "reference": "master", "shasum": null }, "type": "library", @@ -140,7 +140,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/40db0c96985aab2822edbc4848b3bd2429e02670", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/v1.1.2", "reference": "v1.1.2", "shasum": "" }, @@ -281,7 +281,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/866e100a425b8b73d15393fd081c6bf067f05bf9", + "url": "https://api.github.com/repos/doctrine/collections/zipball/bcb53776a096a0c64579cc8d8ec0db62f1109fbc", "reference": "bcb53776a096a0c64579cc8d8ec0db62f1109fbc", "shasum": "" }, @@ -348,7 +348,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/773c56e51fc26ae07a47146fae31b320dd6cada3", + "url": "https://api.github.com/repos/doctrine/common/zipball/6a39bb947b20d12a16820f2709509e41e28af005", "reference": "6a39bb947b20d12a16820f2709509e41e28af005", "shasum": "" }, @@ -492,7 +492,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b4b3ccec7aafc596e2fc1e593c9f2e78f939c8c", "reference": "8b4b3ccec7aafc596e2fc1e593c9f2e78f939c8c", "shasum": "" }, @@ -560,7 +560,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/bc0e1f0cc285127a38c6c8ea88bc5dba2fd53e94", "reference": "bc0e1f0cc285127a38c6c8ea88bc5dba2fd53e94", "shasum": "" }, @@ -748,6 +748,7 @@ "rest", "web service" ], + "abandoned": "guzzlehttp/guzzle", "time": "2015-04-29 17:06:53" }, { @@ -761,7 +762,7 @@ "dist": { "type": "zip", "url": "https://github.com/mheap/Silex-Gravatar/zipball/master", - "reference": null, + "reference": "master", "shasum": null }, "type": "library", @@ -874,7 +875,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/php-fig/log/zipball/1.0.0", "reference": "1.0.0", "shasum": "" }, @@ -912,7 +913,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/75b8714f00bf4e64eedc0d9283b03eb05af67196", + "url": "https://api.github.com/repos/silexphp/Silex/zipball/4787bf21e416b9abd5cbf41daf136dae20d56f5c", "reference": "4787bf21e416b9abd5cbf41daf136dae20d56f5c", "shasum": "" }, @@ -1047,7 +1048,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/browser-kit/zipball/0bb8f07107a2911db0fe49c39f96b5018e5ab678", - "reference": "v2.1.11", + "reference": "0bb8f07107a2911db0fe49c39f96b5018e5ab678", "shasum": "" }, "require": { @@ -1097,7 +1098,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/class-loader/zipball/0e9d7c12151d4c9942865a049d38e97c6c7288cb", - "reference": "v2.1.11", + "reference": "0e9d7c12151d4c9942865a049d38e97c6c7288cb", "shasum": "" }, "require": { @@ -1142,7 +1143,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/config/zipball/52783b199f0899b037441d9f2b3b9ca84e22b60a", - "reference": "v2.1.11", + "reference": "52783b199f0899b037441d9f2b3b9ca84e22b60a", "shasum": "" }, "require": { @@ -1226,7 +1227,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf7bb82a099dfb26b018daf70ad1985fea4d2997", - "reference": "v2.1.11", + "reference": "bf7bb82a099dfb26b018daf70ad1985fea4d2997", "shasum": "" }, "require": { @@ -1323,7 +1324,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bedfd7eb44e3b1224d1e18335d2e36bbbed26cbe", - "reference": "v2.1.11", + "reference": "bedfd7eb44e3b1224d1e18335d2e36bbbed26cbe", "shasum": "" }, "require": { @@ -1371,7 +1372,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e1d18ff0ff6f3e45ac82f000bc221135df635527", - "reference": "v2.1.11", + "reference": "e1d18ff0ff6f3e45ac82f000bc221135df635527", "shasum": "" }, "require": { @@ -1420,7 +1421,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/form/zipball/d2edecec0d0f854ed176f7ac32332d44fa31c696", - "reference": "v2.1.11", + "reference": "d2edecec0d0f854ed176f7ac32332d44fa31c696", "shasum": "" }, "require": { @@ -1472,8 +1473,8 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/1471377556d700602dccf298226c2e167499d19b", - "reference": "329b059893fdcc9399962ca5881d988264123d23", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f9aad386aa4a27ef7b35ba6665afae6689de0a32", + "reference": "f9aad386aa4a27ef7b35ba6665afae6689de0a32", "shasum": "" }, "require": { @@ -1522,8 +1523,8 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c4aa19ff5b0adb7ff606f45e8631db8ebdc76072", - "reference": "f42c09457e6cdebdc34bb1603178c8e69be1565a", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/703a8e941aae3adf50fea0780d90ab141ddba27f", + "reference": "703a8e941aae3adf50fea0780d90ab141ddba27f", "shasum": "" }, "require": { @@ -1594,7 +1595,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/Locale/zipball/3ad6a5129809b3815a2b9056eee470dc2877717f", - "reference": "v2.1.11", + "reference": "3ad6a5129809b3815a2b9056eee470dc2877717f", "shasum": "" }, "require": { @@ -1625,6 +1626,7 @@ ], "description": "Symfony Locale Component", "homepage": "http://symfony.com", + "abandoned": "symfony/intl", "time": "2013-01-10 04:41:59" }, { @@ -1639,7 +1641,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/1a1319747462c2d457c3e1c8c2c9a26ad4bcb67b", - "reference": "v2.1.11", + "reference": "1a1319747462c2d457c3e1c8c2c9a26ad4bcb67b", "shasum": "" }, "require": { @@ -1685,8 +1687,8 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9f464f27cb127232f5c32d5a736fe769e5249442", - "reference": "3085975262bc36dc89929a936056dc6e5cb8a100", + "url": "https://api.github.com/repos/symfony/routing/zipball/8549a3faebaef87d2b938641e5d59beb6912be4b", + "reference": "8549a3faebaef87d2b938641e5d59beb6912be4b", "shasum": "" }, "require": { @@ -1744,7 +1746,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/Translation/zipball/39ba7a5dc560959667c45c9353b70f43182ca4b3", - "reference": "v2.1.11", + "reference": "39ba7a5dc560959667c45c9353b70f43182ca4b3", "shasum": "" }, "require": { @@ -1794,7 +1796,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/e3a48a99971c35ad8d1c5bf36b6b3d22b15df306", - "reference": "v2.1.11", + "reference": "e3a48a99971c35ad8d1c5bf36b6b3d22b15df306", "shasum": "" }, "require": { @@ -1853,7 +1855,7 @@ "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/Validator/zipball/20e121114768672e0a90a25a378e5b14e1331ec0", - "reference": "v2.1.11", + "reference": "20e121114768672e0a90a25a378e5b14e1331ec0", "shasum": "" }, "require": { @@ -1943,7 +1945,7 @@ "dist": { "type": "zip", "url": "https://github.com/twbs/bootstrap/zipball/v2.0.4", - "reference": null, + "reference": "master", "shasum": null }, "type": "library" @@ -1958,7 +1960,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/afd3a08ad948e034b4ffdab23f53925538a91635", + "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/f5b0c84f3699e494c84ee627d7d583e115d2c4a2", "reference": "f5b0c84f3699e494c84ee627d7d583e115d2c4a2", "shasum": "" }, @@ -2048,16 +2050,16 @@ "packages-dev": [ { "name": "atoum/atoum", - "version": "dev-master", + "version": "2.8.x-dev", "source": { "type": "git", "url": "https://github.com/atoum/atoum.git", - "reference": "c6cc7571750ec85c2141ff0dd36e1267e33a4ebf" + "reference": "04d4662268c68cfdb6ba2e942c1c14338d146cc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/atoum/atoum/zipball/c6cc7571750ec85c2141ff0dd36e1267e33a4ebf", - "reference": "c6cc7571750ec85c2141ff0dd36e1267e33a4ebf", + "url": "https://api.github.com/repos/atoum/atoum/zipball/04d4662268c68cfdb6ba2e942c1c14338d146cc4", + "reference": "04d4662268c68cfdb6ba2e942c1c14338d146cc4", "shasum": "" }, "require": { @@ -2124,15 +2126,67 @@ "test", "unit testing" ], - "time": "2016-03-02 18:57:26" + "time": "2016-07-01 11:18:40" + }, + { + "name": "shulard/atoum-xml-extension", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/shulard/atoum-xml-extension.git", + "reference": "cda878292d4fd1599b81eae263d074e2d7cec167" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/shulard/atoum-xml-extension/zipball/cda878292d4fd1599b81eae263d074e2d7cec167", + "reference": "cda878292d4fd1599b81eae263d074e2d7cec167", + "shasum": "" + }, + "require": { + "atoum/atoum": "^2.8" + }, + "require-dev": { + "atoum/praspel-extension": "~0.16", + "squizlabs/php_codesniffer": "~2" + }, + "type": "library", + "autoload": { + "psr-4": { + "mageekguy\\atoum\\xml\\": "classes" + }, + "files": [ + "autoloader.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "apache-2" + ], + "authors": [ + { + "name": "Stéphane HULARD", + "email": "s.hulard@chstudio.fr" + } + ], + "description": "The atoum xml extension allows you to make assertions on XML files", + "homepage": "http://www.atoum.org", + "keywords": [ + "atoum", + "atoum-extension", + "extension", + "schema validation", + "test", + "unit testing", + "xml" + ], + "time": "2016-10-31 11:35:42" } ], "aliases": [], "minimum-stability": "dev", "stability-flags": { "twig/extensions": 20, - "michelf/php-markdown": 20, - "atoum/atoum": 20 + "michelf/php-markdown": 20 }, "prefer-stable": false, "prefer-lowest": false, From 202f2f84d49d685b541d5d9ec4680da0c37026e8 Mon Sep 17 00:00:00 2001 From: Adrien Gallou Date: Sun, 25 Dec 2016 14:14:08 +0100 Subject: [PATCH 3/4] =?UTF-8?q?ajout=20sch=C3=A9ma=20atom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/resources/atom.xsd.xml | 238 +++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 tests/resources/atom.xsd.xml diff --git a/tests/resources/atom.xsd.xml b/tests/resources/atom.xsd.xml new file mode 100644 index 0000000..baf7e86 --- /dev/null +++ b/tests/resources/atom.xsd.xml @@ -0,0 +1,238 @@ + + + + + This version of the Atom schema is based on version 1.0 of the format specifications, + found here http://www.atomenabled.org/developers/syndication/atom-format-spec.php. + + + + + + An Atom document may have two root elements, feed and entry, as defined in section 2. + + + + + + + + The Atom text construct is defined in section 3.1 of the format spec. + + + + + + + + + + + + + + + + + + + + The Atom person construct is defined in section 3.2 of the format spec. + + + + + + + + + + + + + + Schema definition for an email address. + + + + + + + + + + The Atom feed construct is defined in section 4.1.1 of the format spec. + + + + + + + + + + + + + + + + + + + + + + + + The Atom entry construct is defined in section 4.1.2 of the format spec. + + + + + + + + + + + + + + + + + + + + + + + The Atom content construct is defined in section 4.1.3 of the format spec. + + + + + + + + + + + + + The Atom cagegory construct is defined in section 4.2.2 of the format spec. + + + + + + + + + + + The Atom generator element is defined in section 4.2.4 of the format spec. + + + + + + + + + + + + + + The Atom icon construct is defined in section 4.2.5 of the format spec. + + + + + + + + + + + + The Atom id construct is defined in section 4.2.6 of the format spec. + + + + + + + + + + + + The Atom link construct is defined in section 3.4 of the format spec. + + + + + + + + + + + + + + The Atom logo construct is defined in section 4.2.8 of the format spec. + + + + + + + + + + + + The Atom source construct is defined in section 4.2.11 of the format spec. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7dfd47c6ec85538b26d470ee9180480398a677a0 Mon Sep 17 00:00:00 2001 From: Adrien Gallou Date: Sun, 25 Dec 2016 14:15:48 +0100 Subject: [PATCH 4/4] =?UTF-8?q?correction=20validation=20de=20feed=20atom?= =?UTF-8?q?=20des=20ap=C3=A9ros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Aperophp/Lib/FeedExporter.php | 85 ++++++++++++++++++++++ src/Aperophp/Provider/Controller/Drink.php | 15 ++-- src/Resources/views/drink/list.atom.twig | 24 ------ tests/units/Aperophp/Lib/FeedExporter.php | 53 ++++++++++++++ 4 files changed, 147 insertions(+), 30 deletions(-) create mode 100644 src/Aperophp/Lib/FeedExporter.php delete mode 100644 src/Resources/views/drink/list.atom.twig create mode 100644 tests/units/Aperophp/Lib/FeedExporter.php diff --git a/src/Aperophp/Lib/FeedExporter.php b/src/Aperophp/Lib/FeedExporter.php new file mode 100644 index 0000000..599f960 --- /dev/null +++ b/src/Aperophp/Lib/FeedExporter.php @@ -0,0 +1,85 @@ +createElement('feed'); + $feed->setAttribute('xmlns', 'http://www.w3.org/2005/Atom'); + + $this + ->apppendNewChild($document, $feed, 'title', 'AperoPHP') + ->apppendNewChild($document, $feed, 'subtitle', 'Liste des apéro PHP à venir') + ->apppendNewChild($document, $feed, 'link', null, array('href' => 'http://aperophp.net')) + ->apppendNewChild($document, $feed, 'updated', $exportDate->format('c')) + ->appendChild($feed, ($author = $document->createElement('author'))) + ->apppendNewChild($document, $author, 'name', 'AFUP') + ->apppendNewChild($document, $author, 'email', 'contact@afup.org') + ->apppendNewChild($document, $feed, 'id', 'http://aperophp.net/') + ; + + foreach ($drinks as $drink) { + $url = sprintf("http://aperophp.net/%d/view.html", $drink['id']); + $title = sprintf('%s le %s', $drink['city_name'], (new \DateTime($drink['day']))->format('d/m/Y à H:i')); + + $this + ->appendChild($feed, ($entry = $document->createElement('entry'))) + ->apppendNewChild($document, $entry, 'title', $title) + ->apppendNewChild($document, $entry, 'id', $url) + ->apppendNewChild($document, $entry, 'link', null, array('href' => $url)) + ->apppendNewChild($document, $entry, 'updated', (new \DateTime($drink['updated_at']))->format('c')) + ->apppendNewChild($document, $entry, 'summary', $drink['description'], array('type' => 'html')) + ; + } + + $document->appendChild($feed); + + return $document->saveXML(); + } + + /** + * @param \DOMDocument $document + * @param \DOMNode $node + * @param string $name + * @param string|null $value + * @param array $attributes + * + * @return $this + */ + protected function apppendNewChild(\DOMDocument $document, \DOMNode $node, $name, $value = null, array $attributes = array()) + { + $element = $document->createElement($name, $value); + foreach ($attributes as $attributeName => $attributeValue) { + $element->setAttribute($attributeName, $attributeValue); + } + + $this->appendChild($node, $element); + + return $this; + } + + /** + * @param \DOMNode $parent + * @param \DOMNode $child + * + * @return $this + */ + protected function appendChild(\DOMNode $parent, \DOMNode $child) + { + $parent->appendChild($child); + + return $this; + } + +} diff --git a/src/Aperophp/Provider/Controller/Drink.php b/src/Aperophp/Provider/Controller/Drink.php index d1e1751..671c575 100644 --- a/src/Aperophp/Provider/Controller/Drink.php +++ b/src/Aperophp/Provider/Controller/Drink.php @@ -36,14 +36,17 @@ public function connect(Application $app) // ******* $controllers->get('list.{format}', function($format) use ($app) { - $app['session']->set('menu', 'listdrinks'); - - //TODO pagination $drinks = $app['drinks']->findAll(25); + if ($format == 'html') { + //TODO pagination + $app['session']->set('menu', 'listdrinks'); + return $app['twig']->render('drink/list.html.twig', array( + 'drinks' => $drinks + )); + } - return $app['twig']->render('drink/list.'.$format.'.twig', array( - 'drinks' => $drinks - )); + $exporter = new \Aperophp\Lib\FeedExporter(); + return $exporter->export($drinks); }) ->assert('format', 'html|atom') ->bind('_listdrinks'); diff --git a/src/Resources/views/drink/list.atom.twig b/src/Resources/views/drink/list.atom.twig deleted file mode 100644 index ad16fe5..0000000 --- a/src/Resources/views/drink/list.atom.twig +++ /dev/null @@ -1,24 +0,0 @@ - - - - AperoPHP - Liste des apéroPHP à venir - - {{ "now"|date("c") }} - - AFUP - contact@afup.org - - http://aperophp.net - - -{% for drink in drinks %} - - {{ drink.city_name }} le {{ drink.day|date("l")|trans|lower }} {{ drink.day|date("d") }} {{ drink.day|date("F")|trans|lower }} {{ drink.day|date("Y") }} à {{ drink.day|date("H:i") }} - - {{ url('_showdrink', {'id': drink.id}) }} - {{ drink.updated_at|date("c") }} - {{ drink.description }} - -{% endfor %} - diff --git a/tests/units/Aperophp/Lib/FeedExporter.php b/tests/units/Aperophp/Lib/FeedExporter.php new file mode 100644 index 0000000..5c47298 --- /dev/null +++ b/tests/units/Aperophp/Lib/FeedExporter.php @@ -0,0 +1,53 @@ +given($exporter = new TestedClass) + ->and( + $drink = array ( + 'id' => '308', + 'place' => '11 Rue Terme', + 'address' => '11 Rue Terme, 69001 Lyon, France', + 'day' => '2013-10-29', + 'hour' => '19:00:00', + 'kind' => 'drink', + 'description' => 'Apéro PHP Lyonnais du mois d\'octobre. + +Plus d\'informations sur le blog de l\'AFUP Lyon : http://lyon.afup.org/2013/10/09/apero-php-mardi-29-octobre-a-19h/', + 'map' => NULL, + 'member_id' => '1096', + 'city_id' => '126', + 'latitude' => '45.769190', + 'longitude' => '4.831590', + 'meetup_com_id' => NULL, + 'meetup_com_event_url' => NULL, + 'created_at' => '2013-10-09 11:07:03', + 'updated_at' => '2013-10-09 11:22:30', + 'organizer_username' => 'agallou', + 'organizer_email' => 'user@gmail.com', + 'city_name' => 'Lyon', + 'participants_count' => '19', + ) + ) + ->then + ->xml($export = $exporter->export([$drink], new \DateTime("2016-12-25T13:42:23+01:00"))) + ->isValidAgainstSchema->schema(__DIR__ . '/../../../resources/atom.xsd.xml') + ->string($export) + ->isEqualTo(<< +AperoPHPListe des apéro PHP à venir2016-12-25T13:42:23+01:00AFUPcontact@afup.orghttp://aperophp.net/Lyon le 29/10/2013 à 00:00http://aperophp.net/308/view.html2013-10-09T11:22:30+02:00Apéro PHP Lyonnais du mois d'octobre. + +Plus d'informations sur le blog de l'AFUP Lyon : http://lyon.afup.org/2013/10/09/apero-php-mardi-29-octobre-a-19h/ + +EOF + ) + ; + } +}