Add first basic functional test for import

The test ensures import runs with a small example set of events.

We needed to alter fetching of images, in order to properly mock
responses.
This commit is contained in:
Daniel Siepmann 2021-12-15 12:28:06 +01:00
parent 73161fa24e
commit 0e5cd38176
17 changed files with 1102 additions and 37 deletions

View file

@ -1,4 +1,5 @@
stages:
- validate
- test
before_script:
@ -7,39 +8,39 @@ before_script:
- php composer-setup.php --filename composer --install-dir /bin
- php -r "unlink('composer-setup.php');"
test:composer:
validate:composer:
image: php:8.0-alpine
stage: test
stage: validate
script:
- composer validate --no-check-publish --strict
test:php:8.0:
validate:php:8.0:
image: php:8.0-alpine
stage: test
stage: validate
script:
- find *.php Classes Configuration -name '*.php' -print0 | xargs -0 -n 1 -P 4 php -l
test:php:7.4:
validate:php:7.4:
image: php:7.4-alpine
stage: test
stage: validate
script:
- find *.php Classes Configuration -name '*.php' -print0 | xargs -0 -n 1 -P 4 php -l
test:php:7.3:
validate:php:7.3:
image: php:7.3-alpine
stage: test
stage: validate
script:
- find *.php Classes Configuration -name '*.php' -print0 | xargs -0 -n 1 -P 4 php -l
test:php:7.2:
validate:php:7.2:
image: php:7.2-alpine
stage: test
stage: validate
script:
- find *.php Classes Configuration -name '*.php' -print0 | xargs -0 -n 1 -P 4 php -l
test:xml:
validate:xml:
image: php:7.3-alpine
stage: test
stage: validate
before_script:
script:
- apk add libxml2-utils wget
@ -47,50 +48,90 @@ test:xml:
- wget https://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd --output-document=.Build/xliff-core-1.2-strict.xsd
- xmllint --schema .Build/xliff-core-1.2-strict.xsd --noout $(find Resources -name '*.xlf')
test:cgl:
validate:cgl:
image: php:7.3-alpine
stage: test
stage: validate
before_script:
script:
- composer install --prefer-dist --no-progress
- ./vendor/bin/ecs check --no-progress-bar --clear-cache --fix
test:phpstan:8.0:
validate:phpstan:8.0:
image: php:8.0-alpine
stage: test
stage: validate
before_script:
script:
- composer install --prefer-dist --no-progress
- php -d memory_limit=-1 ./vendor/bin/phpstan --no-progress
test:phpstan:7.4:11.5:
validate:phpstan:7.4:11.5:
image: php:7.4-alpine
stage: test
stage: validate
before_script:
script:
- composer require --no-ansi --no-interaction --no-progress typo3/cms-core:"^11.5"
- php -d memory_limit=-1 ./vendor/bin/phpstan --no-progress
test:phpstan:7.4:10.4:
validate:phpstan:7.4:10.4:
image: php:7.4-alpine
stage: test
stage: validate
before_script:
script:
- composer require --no-ansi --no-interaction --no-progress typo3/cms-core:"^10.4"
- php -d memory_limit=-1 ./vendor/bin/phpstan --no-progress
test:phpstan:7.3:
validate:phpstan:7.3:
image: php:7.3-alpine
stage: test
stage: validate
before_script:
script:
- composer install --prefer-dist --no-progress
- php -d memory_limit=-1 ./vendor/bin/phpstan --no-progress
test:phpstan:7.2:
validate:phpstan:7.2:
image: php:7.2-alpine
stage: validate
before_script:
script:
- composer install --prefer-dist --no-progress
- php -d memory_limit=-1 ./vendor/bin/phpunit --testdox
test:phpunit:8.0:
image: php:8.0-alpine
stage: test
before_script:
script:
- composer install --prefer-dist --no-progress
- php -d memory_limit=-1 ./vendor/bin/phpunit --testdox
test:phpunit:7.4:11.5:
image: php:7.4-alpine
stage: test
before_script:
script:
- composer require --no-ansi --no-interaction --no-progress typo3/cms-core:"^11.5"
- php -d memory_limit=-1 ./vendor/bin/phpunit --testdox
test:phpunit:7.4:10.4:
image: php:7.4-alpine
stage: test
before_script:
script:
- composer require --no-ansi --no-interaction --no-progress typo3/cms-core:"^10.4"
- php -d memory_limit=-1 ./vendor/bin/phpunit --testdox
test:phpunit:7.3:
image: php:7.3-alpine
stage: test
before_script:
script:
- composer install --prefer-dist --no-progress
- php -d memory_limit=-1 ./vendor/bin/phpunit --testdox
test:phpunit:7.2:
image: php:7.2-alpine
stage: test
before_script:
script:
- composer install --prefer-dist --no-progress
- php -d memory_limit=-1 ./vendor/bin/phpstan --no-progress
- php -d memory_limit=-1 ./vendor/bin/phpunit --testdox

View file

@ -33,11 +33,6 @@ class DestinationDataImportCommand extends Command
InputArgument::REQUIRED,
'What is the storage pid?'
);
$this->addArgument(
'region-uid',
InputArgument::OPTIONAL,
'What is the region uid?'
);
$this->addArgument(
'rest-experience',
InputArgument::REQUIRED,
@ -48,6 +43,11 @@ class DestinationDataImportCommand extends Command
InputArgument::REQUIRED,
'Where to save the image files?'
);
$this->addArgument(
'region-uid',
InputArgument::OPTIONAL,
'What is the region uid?'
);
}
protected function execute(InputInterface $input, OutputInterface $output)

View file

@ -29,6 +29,7 @@ use Wrm\Events\Domain\Repository\DateRepository;
use Wrm\Events\Domain\Repository\EventRepository;
use Wrm\Events\Domain\Repository\OrganizerRepository;
use Wrm\Events\Domain\Repository\RegionRepository;
use Wrm\Events\Service\DestinationDataImportService\DataFetcher;
class DestinationDataImportService
{
@ -162,6 +163,11 @@ class DestinationDataImportService
*/
private $resourceFactory;
/**
* @var DataFetcher
*/
private $dataFetcher;
/**
* ImportService constructor.
* @param EventRepository $eventRepository
@ -175,6 +181,7 @@ class DestinationDataImportService
* @param ResourceFactory $resourceFactory
* @param ObjectManager $objectManager
* @param Environment $environment
* @param DataFetcher $dataFetcher
*/
public function __construct(
EventRepository $eventRepository,
@ -187,7 +194,8 @@ class DestinationDataImportService
PersistenceManager $persistenceManager,
ResourceFactory $resourceFactory,
ObjectManager $objectManager,
Environment $environment
Environment $environment,
DataFetcher $dataFetcher
) {
$this->eventRepository = $eventRepository;
$this->regionRepository = $regionRepository;
@ -200,6 +208,7 @@ class DestinationDataImportService
$this->resourceFactory = $resourceFactory;
$this->objectManager = $objectManager;
$this->environment = $environment;
$this->dataFetcher = $dataFetcher;
// Get Typoscript Settings
$this->settings = $this->configurationManager->getConfiguration(
@ -708,17 +717,20 @@ class DestinationDataImportService
}
}
private function loadFile(string $file): string
private function loadFile(string $fileUrl): string
{
$directory = $this->environment->getPublicPath() . "/uploads/tx_events/";
$filename = basename($file);
$this->logger->info('Getting file ' . $file . ' as ' . $filename);
$asset = GeneralUtility::getUrl($file);
if ($asset) {
$filename = basename($fileUrl);
$this->logger->info('Getting file ' . $fileUrl . ' as ' . $filename);
$response = $this->dataFetcher->fetchImage($fileUrl);
$asset = $response->getBody()->__toString();
if ($response->getStatusCode() === 200 && $asset !== '') {
file_put_contents($directory . $filename, $asset);
return $filename;
}
$this->logger->error('Cannot load file ' . $file);
$this->logger->error('Cannot load file ' . $fileUrl);
return '';
}

View file

@ -0,0 +1,55 @@
<?php
namespace Wrm\Events\Service\DestinationDataImportService;
use GuzzleHttp\ClientInterface as GuzzleClientInterface;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\ResponseInterface;
/**
* Provides API to fetch data from remote.
*
* Only partially migrated from service to here.
* Further calls need to be migrated.
*/
class DataFetcher
{
/**
* @var RequestFactoryInterface
*/
private $requestFactory;
/**
* @var GuzzleClientInterface
*/
private $client;
public function __construct(
RequestFactoryInterface $requestFactory,
GuzzleClientInterface $client
) {
$this->requestFactory = $requestFactory;
$this->client = $client;
}
public function fetchImage(string $url): ResponseInterface
{
// Keep after TYPO3 10 was dropped
if ($this->client instanceof ClientInterface) {
return $this->client->sendRequest(
$this->requestFactory->createRequest(
'GET',
$url
)
);
}
// Drop once TYPO3 10 support was dropped
return $this->client->request(
'GET',
$url,
[]
);
}
}

View file

@ -0,0 +1,10 @@
<?php
namespace Wrm\Events\Service\DestinationDataImportService;
/**
* Hold info regarding current import.
*/
class Import
{
}

38
Tests/ClientFactory.php Normal file
View file

@ -0,0 +1,38 @@
<?php
namespace Wrm\Events\Tests;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\Middleware;
use GuzzleHttp\Psr7\Response;
/**
* Must only be used within tests.
*/
class ClientFactory
{
/**
* Use this to create a new client which will return provided responses.
*
* You can use the $historyContainer to assert actual requests afterwards,
* e.g. assert that urls or headers match.
*
* @see https://susi.dev/mock-http-api-responses-with-guzzle-psr-18-psr-7/
*
* @param Response[] $responses
* @param array{'request': Request, 'response': Response, 'error': null}[] $historyContainer
*/
public static function createClientWithHistory(
array $responses,
array &$historyContainer
): Client {
$history = Middleware::history($historyContainer);
$handlerStack = HandlerStack::create(new MockHandler($responses));
$handlerStack->push($history);
return new Client(['handler' => $handlerStack]);
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace Wrm\Events\Tests\Functional\Import\DestinationDataTest;
use TYPO3\CMS\Core\Localization\LanguageServiceFactory;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
abstract class AbstractTest extends FunctionalTestCase
{
protected $testExtensionsToLoad = [
'typo3conf/ext/events',
];
protected $additionalFoldersToCreate = [
'uploads/tx_events/'
];
protected function setUp(): void
{
parent::setUp();
$this->importDataSet('EXT:events/Tests/Functional/Import/DestinationDataTest/Fixtures/Structure.xml');
$this->setUpBackendUserFromFixture(1);
$languageServiceFactory = $this->getContainer()->get(LanguageServiceFactory::class);
if (!$languageServiceFactory instanceof LanguageServiceFactory) {
throw new \UnexpectedValueException('Did not retrieve LanguageServiceFactory.', 1637847250);
}
$GLOBALS['LANG'] = $languageServiceFactory->create('default');
}
protected function tearDown(): void
{
unset($GLOBALS['LANG']);
parent::tearDown();
}
}

View file

@ -0,0 +1,28 @@
"tx_events_domain_model_organizer",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","cruser_id","deleted","hidden","starttime","endtime","sys_language_uid","l10n_parent","t3ver_oid","t3ver_wsid","t3ver_state","t3ver_stage","name","street","district","city","zip","phone","web","email",,,,,,,,,,,,,,,,,,,,,,
,"1","2","0","0","0","0","0","-1","0","0","0","0","0","Schillerhaus Rudolstadt","Schillerstraße 25",,"Rudolstadt","07407","+ 49 3672 / 486470","http://schillerhaus.rudolstadt.de","schillerhaus@rudolstadt.de",,,,,,,,,,,,,,,,,,,,,,
,"2","2","0","0","0","0","0","-1","0","0","0","0","0","Stadtbibliothek Rudolstadt","Schulplatz 13",,"Rudolstadt","07407","0 36 72 - 48 64 20","http://www.stadtbibliothek-rudolstadt.de ","stadtbibliothek@rudolstadt.de",,,,,,,,,,,,,,,,,,,,,,
,"3","2","0","0","0","0","0","-1","0","0","0","0","0","Lutherkirche","Caspar-Schulte-Straße",,"Rudolstadt","07407","03672 - 48 96 13",,,,,,,,,,,,,,,,,,,,,,,,
"tx_events_domain_model_event",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","cruser_id","deleted","hidden","starttime","endtime","sys_language_uid","l10n_parent","t3ver_oid","t3ver_wsid","t3ver_state","t3ver_stage","title","subtitle","global_id","slug","highlight","teaser","details","price_info","name","street","district","city","zip","country","web","phone","ticket","facebook","youtube","instagram","latitude","longitude","images","categories","pages","dates","organizer","partner","region","references_events"
,"1","2","0","0","0","0","0","-1","0","0","0","0","0","Allerlei Weihnachtliches (Heute mit Johannes Geißer)",,"e_100347853","e-100347853","0",,"Die Lichter sind entzündet, die Plätzchen duften, man rückt endlich wieder näher zusammen und lauscht den Geschichten. Vier Schauspieler*innen unseres Theaters überraschen mit ihren weihnachtlichen Texten, die sie für uns ausgewählt haben. Dazu plaudern sie über persönliche Anekdoten und erinnern sich an ihre schönsten und verrücktesten Weihnachtsfeste. Und da der Genuss in der Vorweihnachtszeit nicht fehlen darf, wird an jedem Adventssonntag eine andere weihnachtliche Spezialität serviert.
Eintritt: 10 € (inkl. Gedeck mit weihnachtlicher Schillerlocke)
Um Voranmeldung unter 03672-486470 oder schillerhaus@rudolstadt.de wird gebeten.
Es gilt die 2G-PLUS-Regel.",,"Schillerhaus Rudolstadt","Schillerstraße 25",,"Rudolstadt","07407","Deutschland","http://www.schillerhaus.rudolstadt.de/","+ 49 3672 / 486470",,,,,"50.720971023259","11.335229873657","1","0",,"1","1",,"1",
,"2","2","0","0","0","0","0","-1","0","0","0","0","0","Tüftlerzeit",,"e_100354481","e-100354481","0",,"Die Tüftlerzeit wird dieses Mal ein weihnachtliches Angebot bereithalten. Alle kleinen Tüftler dürfen gespannt sein.
Voranmeldung über: kinderbibliothek@rudolstadt.de oder 03672-486420
Bitte beachten Sie die derzeit geltenden Zugangsregeln.",,"Stadtbibliothek Rudolstadt","Schulplatz 13",,"Rudolstadt","07407","Deutschland","http://www.stadtbibliothek-rudolstadt.de/","0 36 72 - 48 64 20",,,,,"50.720835175056","11.342568397522","1","0",,"3","2",,"1",
,"3","2","0","0","0","0","0","-1","0","0","0","0","0","Adventliche Orgelmusik (Orgel: KMD Frank Bettenhausen)",,"e_100350503","e-100350503","0",,"Immer mittwochs in der Adventszeit spielt Frank Bettenhausen solo und zusammen mit anderen Musikern auf der Steinmeyerorgel aus dem Jahr 1906. Bekannte Adventslieder, barocke und romantische Kompositionen stehen neben besinnlichen Texten von Pfarrer Johannes-Martin Weiss.
Es gilt die 2G-PLUS-Regel.",,"Lutherkirche","Caspar-Schulte-Straße",,"Rudolstadt","07407","Deutschland",,"03672 - 48 96 13",,,,,"50.718688721183","11.327333450317","1","0",,"4","3",,"1",
"tx_events_domain_model_date",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","cruser_id","hidden","starttime","endtime","sys_language_uid","l10n_parent","t3ver_oid","t3ver_wsid","t3ver_state","event","start","end","canceled","postponed_date","canceled_link",,,,,,,,,,,,,,,,,,,,,,,,,,
,"1","2","0","0","0","0",-1,0,"0","0","0","1","4101372000","4101377400","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"2","2","0","0","0","0",-1,0,"0","0","0","2","4101112800","4101118200","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"3","2","0","0","0","0",-1,0,"0","0","0","2","1642687200","1642694400","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"4","2","0","0","0","0",-1,0,"0","0","0","2","1645106400","1645113600","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"5","2","0","0","0","0",-1,0,"0","0","0","3","4099831200","4099834800","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"6","2","0","0","0","0",-1,0,"0","0","0","3","4100436000","4100439600","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"7","2","0","0","0","0",-1,0,"0","0","0","3","4101040800","4101044400","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"8","2","0","0","0","0",-1,0,"0","0","0","3","4101645600","4101649200","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
1 tx_events_domain_model_organizer
2 uid pid cruser_id deleted hidden starttime endtime sys_language_uid l10n_parent t3ver_oid t3ver_wsid t3ver_state t3ver_stage name street district city zip phone web email
3 1 2 0 0 0 0 0 -1 0 0 0 0 0 Schillerhaus Rudolstadt Schillerstraße 25 Rudolstadt 07407 + 49 3672 / 486470 http://schillerhaus.rudolstadt.de schillerhaus@rudolstadt.de
4 2 2 0 0 0 0 0 -1 0 0 0 0 0 Stadtbibliothek Rudolstadt Schulplatz 13 Rudolstadt 07407 0 36 72 - 48 64 20 http://www.stadtbibliothek-rudolstadt.de stadtbibliothek@rudolstadt.de
5 3 2 0 0 0 0 0 -1 0 0 0 0 0 Lutherkirche Caspar-Schulte-Straße Rudolstadt 07407 03672 - 48 96 13
6 tx_events_domain_model_event
7 uid pid cruser_id deleted hidden starttime endtime sys_language_uid l10n_parent t3ver_oid t3ver_wsid t3ver_state t3ver_stage title subtitle global_id slug highlight teaser details price_info name street district city zip country web phone ticket facebook youtube instagram latitude longitude images categories pages dates organizer partner region references_events
8 1 2 0 0 0 0 0 -1 0 0 0 0 0 Allerlei Weihnachtliches (Heute mit Johannes Geißer) e_100347853 e-100347853 0 Die Lichter sind entzündet, die Plätzchen duften, man rückt endlich wieder näher zusammen und lauscht den Geschichten. Vier Schauspieler*innen unseres Theaters überraschen mit ihren weihnachtlichen Texten, die sie für uns ausgewählt haben. Dazu plaudern sie über persönliche Anekdoten und erinnern sich an ihre schönsten und verrücktesten Weihnachtsfeste. Und da der Genuss in der Vorweihnachtszeit nicht fehlen darf, wird an jedem Adventssonntag eine andere weihnachtliche Spezialität serviert. Eintritt: 10 € (inkl. Gedeck mit weihnachtlicher Schillerlocke) Um Voranmeldung unter 03672-486470 oder schillerhaus@rudolstadt.de wird gebeten. Es gilt die 2G-PLUS-Regel. Schillerhaus Rudolstadt Schillerstraße 25 Rudolstadt 07407 Deutschland http://www.schillerhaus.rudolstadt.de/ + 49 3672 / 486470 50.720971023259 11.335229873657 1 0 1 1 1
9 2 2 0 0 0 0 0 -1 0 0 0 0 0 Tüftlerzeit e_100354481 e-100354481 0 Die Tüftlerzeit wird dieses Mal ein weihnachtliches Angebot bereithalten. Alle kleinen Tüftler dürfen gespannt sein. Voranmeldung über: kinderbibliothek@rudolstadt.de oder 03672-486420 Bitte beachten Sie die derzeit geltenden Zugangsregeln. Stadtbibliothek Rudolstadt Schulplatz 13 Rudolstadt 07407 Deutschland http://www.stadtbibliothek-rudolstadt.de/ 0 36 72 - 48 64 20 50.720835175056 11.342568397522 1 0 3 2 1
10 3 2 0 0 0 0 0 -1 0 0 0 0 0 Adventliche Orgelmusik (Orgel: KMD Frank Bettenhausen) e_100350503 e-100350503 0 Immer mittwochs in der Adventszeit spielt Frank Bettenhausen solo und zusammen mit anderen Musikern auf der Steinmeyerorgel aus dem Jahr 1906. Bekannte Adventslieder, barocke und romantische Kompositionen stehen neben besinnlichen Texten von Pfarrer Johannes-Martin Weiss. Es gilt die 2G-PLUS-Regel. Lutherkirche Caspar-Schulte-Straße Rudolstadt 07407 Deutschland 03672 - 48 96 13 50.718688721183 11.327333450317 1 0 4 3 1
11 tx_events_domain_model_date
12 uid pid cruser_id hidden starttime endtime sys_language_uid l10n_parent t3ver_oid t3ver_wsid t3ver_state event start end canceled postponed_date canceled_link
13 1 2 0 0 0 0 -1 0 0 0 0 1 4101372000 4101377400 no 0
14 2 2 0 0 0 0 -1 0 0 0 0 2 4101112800 4101118200 no 0
15 3 2 0 0 0 0 -1 0 0 0 0 2 1642687200 1642694400 no 0
16 4 2 0 0 0 0 -1 0 0 0 0 2 1645106400 1645113600 no 0
17 5 2 0 0 0 0 -1 0 0 0 0 3 4099831200 4099834800 no 0
18 6 2 0 0 0 0 -1 0 0 0 0 3 4100436000 4100439600 no 0
19 7 2 0 0 0 0 -1 0 0 0 0 3 4101040800 4101044400 no 0
20 8 2 0 0 0 0 -1 0 0 0 0 3 4101645600 4101649200 no 0

View file

@ -0,0 +1,28 @@
"tx_events_domain_model_organizer",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","cruser_id","deleted","hidden","starttime","endtime","sys_language_uid","l10n_parent","t3ver_oid","t3ver_wsid","t3ver_state","t3ver_stage","name","street","district","city","zip","phone","web","email",,,,,,,,,,,,,,,,,,,,,,
,"1","2","0","0","0","0","0","-1","0","0","0","0","0","Schillerhaus Rudolstadt","Schillerstraße 25",,"Rudolstadt","07407","+ 49 3672 / 486470","http://schillerhaus.rudolstadt.de","schillerhaus@rudolstadt.de",,,,,,,,,,,,,,,,,,,,,,
,"2","2","0","0","0","0","0","-1","0","0","0","0","0","Stadtbibliothek Rudolstadt","Schulplatz 13",,"Rudolstadt","07407","0 36 72 - 48 64 20","http://www.stadtbibliothek-rudolstadt.de ","stadtbibliothek@rudolstadt.de",,,,,,,,,,,,,,,,,,,,,,
,"3","2","0","0","0","0","0","-1","0","0","0","0","0","Lutherkirche","Caspar-Schulte-Straße",,"Rudolstadt","07407","03672 - 48 96 13",,,,,,,,,,,,,,,,,,,,,,,,
"tx_events_domain_model_event",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","cruser_id","deleted","hidden","starttime","endtime","sys_language_uid","l10n_parent","t3ver_oid","t3ver_wsid","t3ver_state","t3ver_stage","title","subtitle","global_id","slug","highlight","teaser","details","price_info","name","street","district","city","zip","country","web","phone","ticket","facebook","youtube","instagram","latitude","longitude","images","categories","pages","dates","organizer","partner","region","references_events"
,"1","2","0","0","0","0","0","-1","0","0","0","0","0","Allerlei Weihnachtliches (Heute mit Johannes Geißer)",,"e_100347853","e-100347853","0",,"Die Lichter sind entzündet, die Plätzchen duften, man rückt endlich wieder näher zusammen und lauscht den Geschichten. Vier Schauspieler*innen unseres Theaters überraschen mit ihren weihnachtlichen Texten, die sie für uns ausgewählt haben. Dazu plaudern sie über persönliche Anekdoten und erinnern sich an ihre schönsten und verrücktesten Weihnachtsfeste. Und da der Genuss in der Vorweihnachtszeit nicht fehlen darf, wird an jedem Adventssonntag eine andere weihnachtliche Spezialität serviert.
Eintritt: 10 € (inkl. Gedeck mit weihnachtlicher Schillerlocke)
Um Voranmeldung unter 03672-486470 oder schillerhaus@rudolstadt.de wird gebeten.
Es gilt die 2G-PLUS-Regel.",,"Schillerhaus Rudolstadt","Schillerstraße 25",,"Rudolstadt","07407","Deutschland","http://www.schillerhaus.rudolstadt.de/","+ 49 3672 / 486470",,,,,"50.720971023259","11.335229873657","1","0",,"1","1",,"0",
,"2","2","0","0","0","0","0","-1","0","0","0","0","0","Tüftlerzeit",,"e_100354481","e-100354481","0",,"Die Tüftlerzeit wird dieses Mal ein weihnachtliches Angebot bereithalten. Alle kleinen Tüftler dürfen gespannt sein.
Voranmeldung über: kinderbibliothek@rudolstadt.de oder 03672-486420
Bitte beachten Sie die derzeit geltenden Zugangsregeln.",,"Stadtbibliothek Rudolstadt","Schulplatz 13",,"Rudolstadt","07407","Deutschland","http://www.stadtbibliothek-rudolstadt.de/","0 36 72 - 48 64 20",,,,,"50.720835175056","11.342568397522","1","0",,"3","2",,"0",
,"3","2","0","0","0","0","0","-1","0","0","0","0","0","Adventliche Orgelmusik (Orgel: KMD Frank Bettenhausen)",,"e_100350503","e-100350503","0",,"Immer mittwochs in der Adventszeit spielt Frank Bettenhausen solo und zusammen mit anderen Musikern auf der Steinmeyerorgel aus dem Jahr 1906. Bekannte Adventslieder, barocke und romantische Kompositionen stehen neben besinnlichen Texten von Pfarrer Johannes-Martin Weiss.
Es gilt die 2G-PLUS-Regel.",,"Lutherkirche","Caspar-Schulte-Straße",,"Rudolstadt","07407","Deutschland",,"03672 - 48 96 13",,,,,"50.718688721183","11.327333450317","1","0",,"4","3",,"0",
"tx_events_domain_model_date",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","cruser_id","hidden","starttime","endtime","sys_language_uid","l10n_parent","t3ver_oid","t3ver_wsid","t3ver_state","event","start","end","canceled","postponed_date","canceled_link",,,,,,,,,,,,,,,,,,,,,,,,,,
,"1","2","0","0","0","0",-1,0,"0","0","0","1","4101372000","4101377400","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"2","2","0","0","0","0",-1,0,"0","0","0","2","4101112800","4101118200","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"3","2","0","0","0","0",-1,0,"0","0","0","2","1642687200","1642694400","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"4","2","0","0","0","0",-1,0,"0","0","0","2","1645106400","1645113600","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"5","2","0","0","0","0",-1,0,"0","0","0","3","4099831200","4099834800","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"6","2","0","0","0","0",-1,0,"0","0","0","3","4100436000","4100439600","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"7","2","0","0","0","0",-1,0,"0","0","0","3","4101040800","4101044400","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
,"8","2","0","0","0","0",-1,0,"0","0","0","3","4101645600","4101649200","no","0",,,,,,,,,,,,,,,,,,,,,,,,,,,
1 tx_events_domain_model_organizer
2 uid pid cruser_id deleted hidden starttime endtime sys_language_uid l10n_parent t3ver_oid t3ver_wsid t3ver_state t3ver_stage name street district city zip phone web email
3 1 2 0 0 0 0 0 -1 0 0 0 0 0 Schillerhaus Rudolstadt Schillerstraße 25 Rudolstadt 07407 + 49 3672 / 486470 http://schillerhaus.rudolstadt.de schillerhaus@rudolstadt.de
4 2 2 0 0 0 0 0 -1 0 0 0 0 0 Stadtbibliothek Rudolstadt Schulplatz 13 Rudolstadt 07407 0 36 72 - 48 64 20 http://www.stadtbibliothek-rudolstadt.de stadtbibliothek@rudolstadt.de
5 3 2 0 0 0 0 0 -1 0 0 0 0 0 Lutherkirche Caspar-Schulte-Straße Rudolstadt 07407 03672 - 48 96 13
6 tx_events_domain_model_event
7 uid pid cruser_id deleted hidden starttime endtime sys_language_uid l10n_parent t3ver_oid t3ver_wsid t3ver_state t3ver_stage title subtitle global_id slug highlight teaser details price_info name street district city zip country web phone ticket facebook youtube instagram latitude longitude images categories pages dates organizer partner region references_events
8 1 2 0 0 0 0 0 -1 0 0 0 0 0 Allerlei Weihnachtliches (Heute mit Johannes Geißer) e_100347853 e-100347853 0 Die Lichter sind entzündet, die Plätzchen duften, man rückt endlich wieder näher zusammen und lauscht den Geschichten. Vier Schauspieler*innen unseres Theaters überraschen mit ihren weihnachtlichen Texten, die sie für uns ausgewählt haben. Dazu plaudern sie über persönliche Anekdoten und erinnern sich an ihre schönsten und verrücktesten Weihnachtsfeste. Und da der Genuss in der Vorweihnachtszeit nicht fehlen darf, wird an jedem Adventssonntag eine andere weihnachtliche Spezialität serviert. Eintritt: 10 € (inkl. Gedeck mit weihnachtlicher Schillerlocke) Um Voranmeldung unter 03672-486470 oder schillerhaus@rudolstadt.de wird gebeten. Es gilt die 2G-PLUS-Regel. Schillerhaus Rudolstadt Schillerstraße 25 Rudolstadt 07407 Deutschland http://www.schillerhaus.rudolstadt.de/ + 49 3672 / 486470 50.720971023259 11.335229873657 1 0 1 1 0
9 2 2 0 0 0 0 0 -1 0 0 0 0 0 Tüftlerzeit e_100354481 e-100354481 0 Die Tüftlerzeit wird dieses Mal ein weihnachtliches Angebot bereithalten. Alle kleinen Tüftler dürfen gespannt sein. Voranmeldung über: kinderbibliothek@rudolstadt.de oder 03672-486420 Bitte beachten Sie die derzeit geltenden Zugangsregeln. Stadtbibliothek Rudolstadt Schulplatz 13 Rudolstadt 07407 Deutschland http://www.stadtbibliothek-rudolstadt.de/ 0 36 72 - 48 64 20 50.720835175056 11.342568397522 1 0 3 2 0
10 3 2 0 0 0 0 0 -1 0 0 0 0 0 Adventliche Orgelmusik (Orgel: KMD Frank Bettenhausen) e_100350503 e-100350503 0 Immer mittwochs in der Adventszeit spielt Frank Bettenhausen solo und zusammen mit anderen Musikern auf der Steinmeyerorgel aus dem Jahr 1906. Bekannte Adventslieder, barocke und romantische Kompositionen stehen neben besinnlichen Texten von Pfarrer Johannes-Martin Weiss. Es gilt die 2G-PLUS-Regel. Lutherkirche Caspar-Schulte-Straße Rudolstadt 07407 Deutschland 03672 - 48 96 13 50.718688721183 11.327333450317 1 0 4 3 0
11 tx_events_domain_model_date
12 uid pid cruser_id hidden starttime endtime sys_language_uid l10n_parent t3ver_oid t3ver_wsid t3ver_state event start end canceled postponed_date canceled_link
13 1 2 0 0 0 0 -1 0 0 0 0 1 4101372000 4101377400 no 0
14 2 2 0 0 0 0 -1 0 0 0 0 2 4101112800 4101118200 no 0
15 3 2 0 0 0 0 -1 0 0 0 0 2 1642687200 1642694400 no 0
16 4 2 0 0 0 0 -1 0 0 0 0 2 1645106400 1645113600 no 0
17 5 2 0 0 0 0 -1 0 0 0 0 3 4099831200 4099834800 no 0
18 6 2 0 0 0 0 -1 0 0 0 0 3 4100436000 4100439600 no 0
19 7 2 0 0 0 0 -1 0 0 0 0 3 4101040800 4101044400 no 0
20 8 2 0 0 0 0 -1 0 0 0 0 3 4101645600 4101649200 no 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

View file

@ -0,0 +1,541 @@
{
"status": "OK",
"count": 3,
"overallcount": 50,
"channels": [],
"facetGroups": [],
"items": [
{
"global_id": "e_100347853",
"id": "100347853",
"title": "Allerlei Weihnachtliches (Heute mit Johannes Geißer)",
"type": "Event",
"categories": [
"Weihnachten"
],
"texts": [
{
"rel": "details",
"type": "text/html",
"value": "Die Lichter sind entzündet, die Plätzchen duften, man rückt endlich wieder näher zusammen und lauscht den Geschichten. Vier Schauspieler*innen unseres Theaters überraschen mit ihren weihnachtlichen Texten, die sie für uns ausgewählt haben. Dazu plaudern sie über persönliche Anekdoten und erinnern sich an ihre schönsten und verrücktesten Weihnachtsfeste. Und da der Genuss in der Vorweihnachtszeit nicht fehlen darf, wird an jedem Adventssonntag eine andere weihnachtliche Spezialität serviert.<br>Eintritt: 10 € (inkl. Gedeck mit weihnachtlicher Schillerlocke)<br>Um Voranmeldung unter 03672-486470 oder&nbsp;<a data-cke-saved-href=\"mailto:schillerhaus@rudolstadt.de\" href=\"mailto:schillerhaus@rudolstadt.de\">schillerhaus@rudolstadt.de</a>&nbsp;wird gebeten. <br><strong>Es gilt die 2G-PLUS-Regel.</strong>&nbsp;<br>"
},
{
"rel": "details",
"type": "text/plain",
"value": "Die Lichter sind entzündet, die Plätzchen duften, man rückt endlich wieder näher zusammen und lauscht den Geschichten. Vier Schauspieler*innen unseres Theaters überraschen mit ihren weihnachtlichen Texten, die sie für uns ausgewählt haben. Dazu plaudern sie über persönliche Anekdoten und erinnern sich an ihre schönsten und verrücktesten Weihnachtsfeste. Und da der Genuss in der Vorweihnachtszeit nicht fehlen darf, wird an jedem Adventssonntag eine andere weihnachtliche Spezialität serviert.\nEintritt: 10 € (inkl. Gedeck mit weihnachtlicher Schillerlocke)\nUm Voranmeldung unter 03672-486470 oder schillerhaus@rudolstadt.de wird gebeten.\nEs gilt die 2G-PLUS-Regel."
},
{
"rel": "teaser",
"type": "text/html"
},
{
"rel": "teaser",
"type": "text/plain"
}
],
"country": "Deutschland",
"areas": [
"Rudolstadt und Umgebung"
],
"city": "Rudolstadt",
"zip": "07407",
"street": "Schillerstraße 25",
"phone": "+ 49 3672 / 486470",
"fax": "+ 49 3672 / 486475",
"web": "http://www.schillerhaus.rudolstadt.de/",
"email": "schillerhaus@rudolstadt.de",
"author": "support@hubermedia.de",
"geo": {
"main": {
"latitude": 50.720971023258805,
"longitude": 11.335229873657227
},
"entry": [],
"attributes": []
},
"ratings": [
{
"type": "eT4",
"value": 40.0
},
{
"type": "order",
"value": 99.0001
}
],
"cuisine_types": [],
"payment": [],
"media_objects": [
{
"rel": "venuewebsite",
"url": "http://schillerhaus.rudolstadt.de/",
"latitude": null,
"longitude": null,
"value": ""
},
{
"rel": "default",
"url": "https://dam.destination.one/849917/279ac45b3fc701a7197131f627164fffd9f8cc77bc75165e2fc2b864ed606920/theater-rudolstadt_johannes-gei-er_photo-by-lisa-stern_web_-jpg.jpg",
"type": "image/jpeg",
"latitude": null,
"longitude": null,
"width": 1920,
"height": 1080,
"value": "Theater-Rudolstadt_Johannes-Geißer_photo-by-Lisa-Stern_web_.jpg"
}
],
"keywords": [],
"timeIntervals": [
{
"weekdays": [],
"start": "2099-12-19T15:00:00+01:00",
"end": "2099-12-19T16:30:00+01:00",
"tz": "Europe/Berlin"
}
],
"kitchenTimeIntervals": [],
"deliveryTimeIntervals": [],
"numbers": [],
"name": "Schillerhaus Rudolstadt",
"attributes": [
{
"key": "VO_Id",
"value": "100050775"
},
{
"key": "VO_CategoryName",
"value": "POI"
},
{
"key": "VA_Id",
"value": "100050775"
},
{
"key": "VA_CategoryName",
"value": "POI"
},
{
"key": "interval_first_match_start",
"value": "2099-12-19T15:00:00+01"
},
{
"key": "interval_first_match_end",
"value": "2099-12-19T16:30:00+01"
},
{
"key": "interval_match_count",
"value": "1"
}
],
"features": [],
"addresses": [
{
"name": "Städtetourismus in Thüringen e.V.",
"city": "Weimar",
"zip": "99423",
"street": "UNESCO-Platz 1",
"phone": "+49 (3643) 745 314",
"web": "http://www.thueringer-staedte.de",
"email": "verein@thueringer-staedte.de",
"rel": "author"
},
{
"name": "Städtetourismus in Thüringen\" e.V.",
"web": "http://www.thueringer-staedte.de",
"email": "verein@thueringer-staedte.de",
"rel": "organisation"
},
{
"name": "Schillerhaus Rudolstadt",
"city": "Rudolstadt",
"zip": "07407",
"street": "Schillerstraße 25",
"phone": "+ 49 3672 / 486470",
"fax": "+ 49 3672 / 486475",
"web": "http://schillerhaus.rudolstadt.de",
"email": "schillerhaus@rudolstadt.de",
"rel": "organizer"
}
],
"created": "2099-10-31T12:29:00+00:00",
"changed": "2099-12-14T08:29:00+00:00",
"source": {
"url": "http://destination.one/",
"value": "destination.one"
},
"company": "",
"district": "",
"postoffice": "",
"phone2": "",
"seasons": [],
"subitems": [],
"hyperObjects": []
},
{
"global_id": "e_100354481",
"id": "100354481",
"title": "Tüftlerzeit",
"type": "Event",
"categories": [
"Kinder"
],
"texts": [
{
"rel": "details",
"type": "text/html",
"value": "Die Tüftlerzeit wird dieses Mal ein weihnachtliches Angebot bereithalten. Alle kleinen Tüftler dürfen gespannt sein.<br>Voranmeldung über: kinderbibliothek@rudolstadt.de oder 03672-486420<br><br>Bitte beachten Sie die derzeit geltenden Zugangsregeln."
},
{
"rel": "details",
"type": "text/plain",
"value": "Die Tüftlerzeit wird dieses Mal ein weihnachtliches Angebot bereithalten. Alle kleinen Tüftler dürfen gespannt sein.\nVoranmeldung über: kinderbibliothek@rudolstadt.de oder 03672-486420\n\nBitte beachten Sie die derzeit geltenden Zugangsregeln."
},
{
"rel": "teaser",
"type": "text/html"
},
{
"rel": "teaser",
"type": "text/plain"
}
],
"country": "Deutschland",
"areas": [
"Rudolstadt und Umgebung"
],
"city": "Rudolstadt",
"zip": "07407",
"street": "Schulplatz 13",
"phone": "0 36 72 - 48 64 20",
"fax": "0 36 72 - 48 64 30",
"web": "http://www.stadtbibliothek-rudolstadt.de/",
"email": "stadtbibliothek@rudolstadt.de",
"author": "support@hubermedia.de",
"geo": {
"main": {
"latitude": 50.720835175055917,
"longitude": 11.342568397521973
},
"entry": [],
"attributes": []
},
"ratings": [
{
"type": "eT4",
"value": 40.0
},
{
"type": "order",
"value": 99.0001
}
],
"cuisine_types": [],
"payment": [],
"media_objects": [
{
"rel": "venuewebsite",
"url": "http://www.stadtbibliothek-rudolstadt.de/",
"latitude": null,
"longitude": null,
"value": ""
},
{
"rel": "default",
"url": "https://dam.destination.one/828118/f13bbf5602ffc406ebae2faa3527654dea84194666bce4925a1ca8bd3f50c5e9/tueftlerzeit-sfz-rudolstadt-jpg.jpg",
"type": "image/jpeg",
"latitude": null,
"longitude": null,
"width": 1920,
"height": 1080,
"value": "Tueftlerzeit©SFZ-Rudolstadt.jpg"
}
],
"keywords": [],
"timeIntervals": [
{
"weekdays": [],
"start": "2099-12-16T15:00:00+01:00",
"end": "2099-12-16T16:30:00+01:00",
"tz": "Europe/Berlin"
},
{
"weekdays": [],
"start": "2022-01-20T15:00:00+01:00",
"end": "2022-01-20T17:00:00+01:00",
"tz": "Europe/Berlin"
},
{
"weekdays": [],
"start": "2022-02-17T15:00:00+01:00",
"end": "2022-02-17T17:00:00+01:00",
"tz": "Europe/Berlin"
}
],
"kitchenTimeIntervals": [],
"deliveryTimeIntervals": [],
"numbers": [],
"name": "Stadtbibliothek Rudolstadt",
"attributes": [
{
"key": "VO_Id",
"value": "100042570"
},
{
"key": "VO_CategoryName",
"value": "POI"
},
{
"key": "VA_Id",
"value": "100042570"
},
{
"key": "VA_CategoryName",
"value": "POI"
},
{
"key": "interval_first_match_start",
"value": "2099-12-16T15:00:00+01"
},
{
"key": "interval_first_match_end",
"value": "2099-12-16T16:30:00+01"
},
{
"key": "interval_match_count",
"value": "3"
},
{
"key": "interval_last_match_start",
"value": "2022-02-17T15:00:00+01"
},
{
"key": "interval_last_match_end",
"value": "2022-02-17T17:00:00+01"
}
],
"features": [],
"addresses": [
{
"name": "Städtetourismus in Thüringen e.V.",
"city": "Weimar",
"zip": "99423",
"street": "UNESCO-Platz 1",
"phone": "+49 (3643) 745 314",
"web": "http://www.thueringer-staedte.de",
"email": "verein@thueringer-staedte.de",
"rel": "author"
},
{
"name": "Städtetourismus in Thüringen\" e.V.",
"web": "http://www.thueringer-staedte.de",
"email": "verein@thueringer-staedte.de",
"rel": "organisation"
},
{
"name": "Stadtbibliothek Rudolstadt",
"city": "Rudolstadt",
"zip": "07407",
"street": "Schulplatz 13",
"phone": "0 36 72 - 48 64 20",
"fax": "0 36 72 - 48 64 30",
"web": "http://www.stadtbibliothek-rudolstadt.de ",
"email": "stadtbibliothek@rudolstadt.de",
"rel": "organizer"
}
],
"created": "2099-11-10T23:02:00+00:00",
"changed": "2099-12-14T08:28:00+00:00",
"source": {
"url": "http://destination.one/",
"value": "destination.one"
},
"company": "",
"district": "",
"postoffice": "",
"phone2": "",
"seasons": [],
"subitems": [],
"hyperObjects": []
},
{
"global_id": "e_100350503",
"id": "100350503",
"title": "Adventliche Orgelmusik (Orgel: KMD Frank Bettenhausen)",
"type": "Event",
"categories": [
"Konzerte, Festivals, Show & Tanz",
"Weihnachten"
],
"texts": [
{
"rel": "details",
"type": "text/html",
"value": "Immer mittwochs in der Adventszeit spielt Frank Bettenhausen solo und zusammen mit anderen Musikern auf der Steinmeyerorgel aus dem Jahr 1906.&nbsp;&nbsp;Bekannte Adventslieder, barocke und romantische Kompositionen stehen neben besinnlichen Texten von Pfarrer Johannes-Martin Weiss.<br><br><strong>Es gilt die 2G-PLUS-Regel.</strong><br>"
},
{
"rel": "details",
"type": "text/plain",
"value": "Immer mittwochs in der Adventszeit spielt Frank Bettenhausen solo und zusammen mit anderen Musikern auf der Steinmeyerorgel aus dem Jahr 1906. Bekannte Adventslieder, barocke und romantische Kompositionen stehen neben besinnlichen Texten von Pfarrer Johannes-Martin Weiss.\n\nEs gilt die 2G-PLUS-Regel."
},
{
"rel": "teaser",
"type": "text/html"
},
{
"rel": "teaser",
"type": "text/plain"
}
],
"country": "Deutschland",
"areas": [
"Rudolstadt und Umgebung"
],
"city": "Rudolstadt",
"zip": "07407",
"street": "Caspar-Schulte-Straße",
"phone": "03672 - 48 96 13",
"author": "support@hubermedia.de",
"geo": {
"main": {
"latitude": 50.718688721182531,
"longitude": 11.327333450317383
},
"entry": [],
"attributes": []
},
"ratings": [
{
"type": "eT4",
"value": 40.0
},
{
"type": "order",
"value": 99.0001
}
],
"cuisine_types": [],
"payment": [],
"media_objects": [
{
"rel": "default",
"url": "https://dam.destination.one/853436/109ac1cf87913e21b5e2b0ef0cc63d223a14374364952a855746a8e7c3fcfc36/lutherkirche-jpg.jpg",
"type": "image/jpeg",
"latitude": null,
"longitude": null,
"width": 1920,
"height": 1080,
"value": "Lutherkirche.jpg"
}
],
"keywords": [],
"timeIntervals": [
{
"weekdays": [],
"start": "2099-12-01T19:00:00+01:00",
"end": "2099-12-01T20:00:00+01:00",
"tz": "Europe/Berlin"
},
{
"weekdays": [],
"start": "2099-12-08T19:00:00+01:00",
"end": "2099-12-08T20:00:00+01:00",
"tz": "Europe/Berlin"
},
{
"weekdays": [],
"start": "2099-12-15T19:00:00+01:00",
"end": "2099-12-15T20:00:00+01:00",
"tz": "Europe/Berlin"
},
{
"weekdays": [],
"start": "2099-12-22T19:00:00+01:00",
"end": "2099-12-22T20:00:00+01:00",
"tz": "Europe/Berlin"
}
],
"kitchenTimeIntervals": [],
"deliveryTimeIntervals": [],
"numbers": [],
"name": "Lutherkirche",
"attributes": [
{
"key": "VO_Id",
"value": "100118350"
},
{
"key": "VO_CategoryName",
"value": "POI"
},
{
"key": "VA_Id",
"value": "100118350"
},
{
"key": "VA_CategoryName",
"value": "POI"
},
{
"key": "interval_first_match_start",
"value": "2099-12-15T19:00:00+01"
},
{
"key": "interval_first_match_end",
"value": "2099-12-15T20:00:00+01"
},
{
"key": "interval_match_count",
"value": "2"
},
{
"key": "interval_last_match_start",
"value": "2099-12-22T19:00:00+01"
},
{
"key": "interval_last_match_end",
"value": "2099-12-22T20:00:00+01"
}
],
"features": [],
"addresses": [
{
"name": "Städtetourismus in Thüringen e.V.",
"city": "Weimar",
"zip": "99423",
"street": "UNESCO-Platz 1",
"phone": "+49 (3643) 745 314",
"web": "http://www.thueringer-staedte.de",
"email": "verein@thueringer-staedte.de",
"rel": "author"
},
{
"name": "Städtetourismus in Thüringen\" e.V.",
"web": "http://www.thueringer-staedte.de",
"email": "verein@thueringer-staedte.de",
"rel": "organisation"
},
{
"name": "Lutherkirche",
"city": "Rudolstadt",
"zip": "07407",
"street": "Caspar-Schulte-Straße",
"phone": "03672 - 48 96 13",
"rel": "organizer"
}
],
"created": "2099-11-08T22:15:00+00:00",
"changed": "2099-12-14T08:38:00+00:00",
"source": {
"url": "http://destination.one/",
"value": "destination.one"
},
"company": "",
"district": "",
"postoffice": "",
"phone2": "",
"seasons": [],
"subitems": [],
"hyperObjects": []
}
]
}

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<dataset>
<tx_events_domain_model_region>
<uid>1</uid>
<pid>2</pid>
<title>Example Region</title>
</tx_events_domain_model_region>
</dataset>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<dataset>
<pages>
<pid>0</pid>
<uid>1</uid>
<title>Root page</title>
<slug>1</slug>
</pages>
<pages>
<pid>1</pid>
<uid>2</uid>
<title>Storage</title>
<doktype>254</doktype>
</pages>
</dataset>

View file

@ -0,0 +1,104 @@
<?php
namespace Wrm\Events\Tests\Functional\Import\DestinationDataTest;
use GuzzleHttp\ClientInterface as GuzzleClientInterface;
use GuzzleHttp\Psr7\Response;
use Psr\Http\Client\ClientInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Tester\CommandTester;
use Symfony\Component\DependencyInjection\Container;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use Wrm\Events\Command\DestinationDataImportCommand;
use Wrm\Events\Tests\ClientFactory;
/**
* @testdox DestinationData import
*/
class ImportsExampleAsExpectedTest extends AbstractTest
{
/**
* @test
*/
public function importsExampleAsExpected(): void
{
$fileImportPath = 'staedte/beispielstadt/events/';
$this->importDataSet('EXT:events/Tests/Functional/Import/DestinationDataTest/Fixtures/SingleRegion.xml');
$this->setUpFrontendRootPage(1, [], [
'config' => implode(PHP_EOL, [
'module.tx_events_pi1.settings.destinationData {',
'restUrl = ' . $this->getInstancePath() . '/typo3conf/ext/events/Tests/Functional/Import/DestinationDataTest/Fixtures/Response.json',
'license = example-license',
'restType = Event',
'restLimit = 3',
'restMode = next_months,12',
'restTemplate = ET2014A.json',
'categoriesPid = ',
'categoryParentUid = ',
'}',
]),
]);
$requests = [];
$client = ClientFactory::createClientWithHistory([
new Response(200, [], file_get_contents(__DIR__ . '/Fixtures/ExampleImage.jpg') ?: ''),
new Response(200, [], file_get_contents(__DIR__ . '/Fixtures/ExampleImage.jpg') ?: ''),
new Response(200, [], file_get_contents(__DIR__ . '/Fixtures/ExampleImage.jpg') ?: ''),
], $requests);
$container = $this->getContainer();
if ($container instanceof Container) {
$container->set(ClientInterface::class, $client);
// For TYPO3 10 support
$container->set(GuzzleClientInterface::class, $client);
}
$subject = $this->getContainer()->get(DestinationDataImportCommand::class);
self::assertInstanceOf(Command::class, $subject);
$tester = new CommandTester($subject);
$tester->execute(
[
'storage-pid' => 2,
'rest-experience' => 'beispielstadt',
'files-folder' => $fileImportPath,
'region-uid' => 1,
],
[
'capture_stderr_separately' => true,
]
);
self::assertSame(0, $tester->getStatusCode());
self::assertCount(3, $requests, 'Unexpected number of requests were made.');
self::assertSame('https://dam.destination.one/849917/279ac45b3fc701a7197131f627164fffd9f8cc77bc75165e2fc2b864ed606920/theater-rudolstadt_johannes-gei-er_photo-by-lisa-stern_web_-jpg.jpg', (string)$requests[0]['request']->getUri());
self::assertSame('https://dam.destination.one/828118/f13bbf5602ffc406ebae2faa3527654dea84194666bce4925a1ca8bd3f50c5e9/tueftlerzeit-sfz-rudolstadt-jpg.jpg', (string)$requests[1]['request']->getUri());
self::assertSame('https://dam.destination.one/853436/109ac1cf87913e21b5e2b0ef0cc63d223a14374364952a855746a8e7c3fcfc36/lutherkirche-jpg.jpg', (string)$requests[2]['request']->getUri());
self::assertCount(
0,
$this->getAllRecords('tx_events_domain_model_partner'),
'Added unexpected partners.'
);
self::assertCount(
1,
$this->getAllRecords('tx_events_domain_model_region'),
'Added or removed unexpected region.'
);
$this->assertCSVDataSet('EXT:events/Tests/Functional/Import/DestinationDataTest/Assertions/ImportsExampleAsExpected.csv');
$importedFiles = GeneralUtility::getFilesInDir($this->getInstancePath() . '/fileadmin/' . $fileImportPath);
self::assertIsArray($importedFiles, 'Failed to retrieve imported files from filesystem.');
self::assertSame(
[
'lutherkirche-jpg.jpg',
'theater-rudolstadt_johannes-gei-er_photo-by-lisa-stern_web_-jpg.jpg',
'tueftlerzeit-sfz-rudolstadt-jpg.jpg',
],
array_values($importedFiles),
'Got unexpected number of files'
);
}
}

View file

@ -0,0 +1,101 @@
<?php
namespace Wrm\Events\Tests\Functional\Import\DestinationDataTest;
use GuzzleHttp\ClientInterface as GuzzleClientInterface;
use GuzzleHttp\Psr7\Response;
use Psr\Http\Client\ClientInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Tester\CommandTester;
use Symfony\Component\DependencyInjection\Container;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use Wrm\Events\Command\DestinationDataImportCommand;
use Wrm\Events\Tests\ClientFactory;
/**
* @testdox DestinationData import
*/
class ImportsWithoutRegionIfNotProvided extends AbstractTest
{
/**
* @test
*/
public function importsWithoutRegionIfNotProvided(): void
{
$fileImportPath = 'staedte/beispielstadt/events/';
$this->setUpFrontendRootPage(1, [], [
'config' => implode(PHP_EOL, [
'module.tx_events_pi1.settings.destinationData {',
'restUrl = ' . $this->getInstancePath() . '/typo3conf/ext/events/Tests/Functional/Import/DestinationDataTest/Fixtures/Response.json',
'license = example-license',
'restType = Event',
'restLimit = 3',
'restMode = next_months,12',
'restTemplate = ET2014A.json',
'categoriesPid = ',
'categoryParentUid = ',
'}',
]),
]);
$requests = [];
$client = ClientFactory::createClientWithHistory([
new Response(200, [], file_get_contents(__DIR__ . '/Fixtures/ExampleImage.jpg') ?: ''),
new Response(200, [], file_get_contents(__DIR__ . '/Fixtures/ExampleImage.jpg') ?: ''),
new Response(200, [], file_get_contents(__DIR__ . '/Fixtures/ExampleImage.jpg') ?: ''),
], $requests);
$container = $this->getContainer();
if ($container instanceof Container) {
$container->set(ClientInterface::class, $client);
// For TYPO3 10 support
$container->set(GuzzleClientInterface::class, $client);
}
$subject = $this->getContainer()->get(DestinationDataImportCommand::class);
self::assertInstanceOf(Command::class, $subject);
$tester = new CommandTester($subject);
$tester->execute(
[
'storage-pid' => 2,
'rest-experience' => 'beispielstadt',
'files-folder' => $fileImportPath,
],
[
'capture_stderr_separately' => true,
]
);
self::assertSame(0, $tester->getStatusCode());
self::assertCount(3, $requests, 'Unexpected number of requests were made.');
self::assertSame('https://dam.destination.one/849917/279ac45b3fc701a7197131f627164fffd9f8cc77bc75165e2fc2b864ed606920/theater-rudolstadt_johannes-gei-er_photo-by-lisa-stern_web_-jpg.jpg', (string)$requests[0]['request']->getUri());
self::assertSame('https://dam.destination.one/828118/f13bbf5602ffc406ebae2faa3527654dea84194666bce4925a1ca8bd3f50c5e9/tueftlerzeit-sfz-rudolstadt-jpg.jpg', (string)$requests[1]['request']->getUri());
self::assertSame('https://dam.destination.one/853436/109ac1cf87913e21b5e2b0ef0cc63d223a14374364952a855746a8e7c3fcfc36/lutherkirche-jpg.jpg', (string)$requests[2]['request']->getUri());
self::assertCount(
0,
$this->getAllRecords('tx_events_domain_model_partner'),
'Added unexpected partners.'
);
self::assertCount(
0,
$this->getAllRecords('tx_events_domain_model_region'),
'Added unexpected region.'
);
$this->assertCSVDataSet('EXT:events/Tests/Functional/Import/DestinationDataTest/Assertions/ImportsWithoutRegionIfNotProvided.csv');
$importedFiles = GeneralUtility::getFilesInDir($this->getInstancePath() . '/fileadmin/' . $fileImportPath);
self::assertIsArray($importedFiles, 'Failed to retrieve imported files from filesystem.');
self::assertSame(
[
'lutherkirche-jpg.jpg',
'theater-rudolstadt_johannes-gei-er_photo-by-lisa-stern_web_-jpg.jpg',
'tueftlerzeit-sfz-rudolstadt-jpg.jpg',
],
array_values($importedFiles),
'Got unexpected number of files'
);
}
}

View file

@ -7,6 +7,11 @@
{
"name": "Dirk Koritnik",
"role": "Developer"
},
{
"name": "Daniel Siepmann",
"email": "coding@daniel-siepmann.de",
"role": "Developer"
}
],
"require": {
@ -26,6 +31,12 @@
"Wrm\\Events\\Tests\\": "Tests"
}
},
"scripts": {
"post-autoload-dump": [
"mkdir -p .Build/web/typo3conf/ext/",
"[ -L .Build/web/typo3conf/ext/events ] || ln -snvf ../../../../. .Build/web/typo3conf/ext/events"
]
},
"extra": {
"typo3/cms": {
"cms-package-dir": "{$vendor-dir}/typo3/cms",
@ -39,6 +50,10 @@
"symplify/easy-coding-standard": "^9.4",
"phpstan/phpstan": "^1.0",
"phpstan/extension-installer": "^1.1",
"saschaegerer/phpstan-typo3": "^1.0"
"saschaegerer/phpstan-typo3": "^1.0",
"typo3/testing-framework": "^6.14",
"jangregor/phpstan-prophecy": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"guzzlehttp/guzzle": "^6.3 || ^7.3"
}
}

29
phpunit.xml.dist Normal file
View file

@ -0,0 +1,29 @@
<?xml version="1.0"?>
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTestsBootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertWarningsToExceptions="true"
forceCoversAnnotation="false"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
verbose="false"
>
<testsuites>
<testsuite name="functional">
<directory>Tests/Functional/</directory>
</testsuite>
</testsuites>
<php>
<env name="typo3DatabaseDriver" value="pdo_sqlite"/>
</php>
</phpunit>