mirror of
https://github.com/werkraum-media/thuecat.git
synced 2024-12-05 03:26:13 +01:00
Handle multiple offerType values (#75)
The import resulted in an exception if there was an array of types instead of a string. Both situations are now handled and API of models is kept. Existing imported data is also kept.
This commit is contained in:
parent
4a3eb42c73
commit
2fd4b1bc2f
7 changed files with 178 additions and 25 deletions
|
@ -29,26 +29,37 @@ use WerkraumMedia\ThueCat\Domain\Import\Entity\Minimum;
|
||||||
class Offer extends Minimum
|
class Offer extends Minimum
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string[]
|
||||||
*/
|
*/
|
||||||
protected $offerType = '';
|
protected $offerTypes = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var PriceSpecification[]
|
* @var PriceSpecification[]
|
||||||
*/
|
*/
|
||||||
protected $prices = [];
|
protected $prices = [];
|
||||||
|
|
||||||
public function getOfferType(): string
|
/**
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function getOfferTypes(): array
|
||||||
{
|
{
|
||||||
return $this->offerType;
|
return $this->offerTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal for mapping via Symfony component.
|
* @internal for mapping via Symfony component.
|
||||||
|
* @param string|array $offerType
|
||||||
*/
|
*/
|
||||||
public function setOfferType(string $offerType): void
|
public function setOfferType($offerType): void
|
||||||
{
|
{
|
||||||
$this->offerType = PropertyValues::removePrefixFromEntry($offerType);
|
if (is_string($offerType)) {
|
||||||
|
$offerType = [$offerType];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->offerTypes = array_map(
|
||||||
|
[PropertyValues::class, 'removePrefixFromEntry'],
|
||||||
|
$offerType
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -446,7 +446,7 @@ class GeneralConverter implements Converter, LoggerAwareInterface
|
||||||
$data = [];
|
$data = [];
|
||||||
foreach ($entity->getOffers() as $offer) {
|
foreach ($entity->getOffers() as $offer) {
|
||||||
$data[] = [
|
$data[] = [
|
||||||
'type' => $offer->getOfferType(),
|
'types' => $offer->getOfferTypes(),
|
||||||
'title' => $offer->getName(),
|
'title' => $offer->getName(),
|
||||||
'description' => $offer->getDescription(),
|
'description' => $offer->getDescription(),
|
||||||
'prices' => array_map([$this, 'getPrice'], $offer->getPrices()),
|
'prices' => array_map([$this, 'getPrice'], $offer->getPrices()),
|
||||||
|
|
|
@ -33,9 +33,9 @@ class Offer
|
||||||
private $title;
|
private $title;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string[]
|
||||||
*/
|
*/
|
||||||
private $type;
|
private $types;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
|
@ -47,14 +47,17 @@ class Offer
|
||||||
*/
|
*/
|
||||||
private $prices;
|
private $prices;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string[] $types
|
||||||
|
*/
|
||||||
private function __construct(
|
private function __construct(
|
||||||
string $title,
|
string $title,
|
||||||
string $type,
|
array $types,
|
||||||
string $description,
|
string $description,
|
||||||
array $prices
|
array $prices
|
||||||
) {
|
) {
|
||||||
$this->title = $title;
|
$this->title = $title;
|
||||||
$this->type = $type;
|
$this->types = $types;
|
||||||
$this->description = $description;
|
$this->description = $description;
|
||||||
$this->prices = $prices;
|
$this->prices = $prices;
|
||||||
}
|
}
|
||||||
|
@ -70,9 +73,15 @@ class Offer
|
||||||
$prices[] = Price::createFromArray($price);
|
$prices[] = Price::createFromArray($price);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$types = $rawData['types'] ?? $rawData['type'] ?? [];
|
||||||
|
// Handle old legacy saved values which were a single string saves as 'type' instead of 'types'.
|
||||||
|
if (is_string($types)) {
|
||||||
|
$types = [$types];
|
||||||
|
}
|
||||||
|
|
||||||
return new self(
|
return new self(
|
||||||
$rawData['title'],
|
$rawData['title'],
|
||||||
$rawData['type'] ?? '',
|
$types,
|
||||||
$rawData['description'],
|
$rawData['description'],
|
||||||
$prices
|
$prices
|
||||||
);
|
);
|
||||||
|
@ -85,7 +94,17 @@ class Offer
|
||||||
|
|
||||||
public function getType(): string
|
public function getType(): string
|
||||||
{
|
{
|
||||||
return $this->type;
|
$offerTypes = array_filter($this->types, function (string $type) {
|
||||||
|
return strpos($type, 'Offer') !== false;
|
||||||
|
});
|
||||||
|
// Ensure clean index
|
||||||
|
$offerTypes = array_values($offerTypes);
|
||||||
|
|
||||||
|
if ($offerTypes !== []) {
|
||||||
|
return $offerTypes[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->types[0] ?? '';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDescription(): string
|
public function getDescription(): string
|
||||||
|
|
|
@ -19,6 +19,18 @@ Fixes
|
||||||
Those organisations will now also be imported, just like Tourist Marketing Company before.
|
Those organisations will now also be imported, just like Tourist Marketing Company before.
|
||||||
Both are organizations internally and only used for the TYPO3 backend module.
|
Both are organizations internally and only used for the TYPO3 backend module.
|
||||||
|
|
||||||
|
* Handle multiple ``thuecat:offerType`` values within Offer.
|
||||||
|
The API is none breaking, the models still return only a single offer.
|
||||||
|
|
||||||
|
They will filter down to the first offer which contains ``Offer`` within the value.
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
Given: Childcare and CourseOffer will result in CourseOffer.
|
||||||
|
|
||||||
|
Given: Childcare will result in Childcare.
|
||||||
|
|
||||||
|
Existing imported data is still handled.
|
||||||
|
|
||||||
Tasks
|
Tasks
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
,"uid","pid","sys_language_uid","l18n_parent","l10n_source","l10n_state","remote_id","title","managed_by","town","address","offers"
|
,"uid","pid","sys_language_uid","l18n_parent","l10n_source","l10n_state","remote_id","title","managed_by","town","address","offers"
|
||||||
,1,10,0,0,0,"\NULL","https://thuecat.org/resources/835224016581-dara","Dom St. Marien",1,1,"{""street"":""Domstufen 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""dominformation@domberg-erfurt.de"",""phone"":""+49 361 6461265"",""fax"":"""",""geo"":{""latitude"":50.975955358589545,""longitude"":11.023667024961856}}","[]"
|
,1,10,0,0,0,"\NULL","https://thuecat.org/resources/835224016581-dara","Dom St. Marien",1,1,"{""street"":""Domstufen 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""dominformation@domberg-erfurt.de"",""phone"":""+49 361 6461265"",""fax"":"""",""geo"":{""latitude"":50.975955358589545,""longitude"":11.023667024961856}}","[]"
|
||||||
,2,10,1,1,1,"\NULL","https://thuecat.org/resources/835224016581-dara","Cathedral of St. Mary",1,1,"{""street"":""Domstufen 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""dominformation@domberg-erfurt.de"",""phone"":""+49 361 6461265"",""fax"":"""",""geo"":{""latitude"":50.975955358589545,""longitude"":11.023667024961856}}","[]"
|
,2,10,1,1,1,"\NULL","https://thuecat.org/resources/835224016581-dara","Cathedral of St. Mary",1,1,"{""street"":""Domstufen 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""dominformation@domberg-erfurt.de"",""phone"":""+49 361 6461265"",""fax"":"""",""geo"":{""latitude"":50.975955358589545,""longitude"":11.023667024961856}}","[]"
|
||||||
,3,10,0,0,0,"\NULL","https://thuecat.org/resources/165868194223-zmqf","Alte Synagoge",1,1,"{""street"":""Waagegasse 8"",""zip"":""99084"",""city"":""Erfurt"",""email"":""altesynagoge@erfurt.de"",""phone"":""+49 361 6551520"",""fax"":""+49 361 6551669"",""geo"":{""latitude"":50.978765,""longitude"":11.029133}}","[{""type"":""GuidedTourOffer"",""title"":""F\u00fchrungen"",""description"":""Immer samstags, um 11:15 Uhr findet eine \u00f6ffentliche F\u00fchrung durch das Museum statt. Dauer etwa 90 Minuten"",""prices"":[{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""}]},{""type"":""EntryOffer"",""title"":""Eintritt"",""description"":""Schulklassen und Kitagruppen im Rahmen des Unterrichts: Eintritt frei\nAn jedem ersten Dienstag im Monat: Eintritt frei"",""prices"":[{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Familienkarte"",""description"":"""",""price"":17,""currency"":""EUR"",""rule"":""PerGroup""},{""title"":""ErfurtCard"",""description"":"""",""price"":14.9,""currency"":""EUR"",""rule"":""PerPackage""},{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""}]}]"
|
,3,10,0,0,0,"\NULL","https://thuecat.org/resources/165868194223-zmqf","Alte Synagoge",1,1,"{""street"":""Waagegasse 8"",""zip"":""99084"",""city"":""Erfurt"",""email"":""altesynagoge@erfurt.de"",""phone"":""+49 361 6551520"",""fax"":""+49 361 6551669"",""geo"":{""latitude"":50.978765,""longitude"":11.029133}}","[{""types"":[""GuidedTourOffer""],""title"":""F\u00fchrungen"",""description"":""Immer samstags, um 11:15 Uhr findet eine \u00f6ffentliche F\u00fchrung durch das Museum statt. Dauer etwa 90 Minuten"",""prices"":[{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""}]},{""types"":[""EntryOffer""],""title"":""Eintritt"",""description"":""Schulklassen und Kitagruppen im Rahmen des Unterrichts: Eintritt frei\nAn jedem ersten Dienstag im Monat: Eintritt frei"",""prices"":[{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Familienkarte"",""description"":"""",""price"":17,""currency"":""EUR"",""rule"":""PerGroup""},{""title"":""ErfurtCard"",""description"":"""",""price"":14.9,""currency"":""EUR"",""rule"":""PerPackage""},{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""}]}]"
|
||||||
,4,10,1,3,3,"\NULL","https://thuecat.org/resources/165868194223-zmqf","Old Synagogue",1,1,"{""street"":""Waagegasse 8"",""zip"":""99084"",""city"":""Erfurt"",""email"":""altesynagoge@erfurt.de"",""phone"":""+49 361 6551520"",""fax"":""+49 361 6551669"",""geo"":{""latitude"":50.978765,""longitude"":11.029133}}","[{""type"":""GuidedTourOffer"",""title"":""F\u00fchrungen"",""description"":""Immer samstags, um 11:15 Uhr findet eine \u00f6ffentliche F\u00fchrung durch das Museum statt. Dauer etwa 90 Minuten"",""prices"":[{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""}]},{""type"":""EntryOffer"",""title"":""Eintritt"",""description"":""Schulklassen und Kitagruppen im Rahmen des Unterrichts: Eintritt frei\nAn jedem ersten Dienstag im Monat: Eintritt frei"",""prices"":[{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Familienkarte"",""description"":"""",""price"":17,""currency"":""EUR"",""rule"":""PerGroup""},{""title"":""ErfurtCard"",""description"":"""",""price"":14.9,""currency"":""EUR"",""rule"":""PerPackage""},{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""}]}]"
|
,4,10,1,3,3,"\NULL","https://thuecat.org/resources/165868194223-zmqf","Old Synagogue",1,1,"{""street"":""Waagegasse 8"",""zip"":""99084"",""city"":""Erfurt"",""email"":""altesynagoge@erfurt.de"",""phone"":""+49 361 6551520"",""fax"":""+49 361 6551669"",""geo"":{""latitude"":50.978765,""longitude"":11.029133}}","[{""types"":[""GuidedTourOffer""],""title"":""F\u00fchrungen"",""description"":""Immer samstags, um 11:15 Uhr findet eine \u00f6ffentliche F\u00fchrung durch das Museum statt. Dauer etwa 90 Minuten"",""prices"":[{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""}]},{""types"":[""EntryOffer""],""title"":""Eintritt"",""description"":""Schulklassen und Kitagruppen im Rahmen des Unterrichts: Eintritt frei\nAn jedem ersten Dienstag im Monat: Eintritt frei"",""prices"":[{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Familienkarte"",""description"":"""",""price"":17,""currency"":""EUR"",""rule"":""PerGroup""},{""title"":""ErfurtCard"",""description"":"""",""price"":14.9,""currency"":""EUR"",""rule"":""PerPackage""},{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""}]}]"
|
||||||
,5,10,2,3,3,"\NULL","https://thuecat.org/resources/165868194223-zmqf","La vieille synagogue",1,1,"{""street"":""Waagegasse 8"",""zip"":""99084"",""city"":""Erfurt"",""email"":""altesynagoge@erfurt.de"",""phone"":""+49 361 6551520"",""fax"":""+49 361 6551669"",""geo"":{""latitude"":50.978765,""longitude"":11.029133}}","[{""type"":""GuidedTourOffer"",""title"":""F\u00fchrungen"",""description"":""Immer samstags, um 11:15 Uhr findet eine \u00f6ffentliche F\u00fchrung durch das Museum statt. Dauer etwa 90 Minuten"",""prices"":[{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""}]},{""type"":""EntryOffer"",""title"":""Eintritt"",""description"":""Schulklassen und Kitagruppen im Rahmen des Unterrichts: Eintritt frei\nAn jedem ersten Dienstag im Monat: Eintritt frei"",""prices"":[{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Familienkarte"",""description"":"""",""price"":17,""currency"":""EUR"",""rule"":""PerGroup""},{""title"":""ErfurtCard"",""description"":"""",""price"":14.9,""currency"":""EUR"",""rule"":""PerPackage""},{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""}]}]"
|
,5,10,2,3,3,"\NULL","https://thuecat.org/resources/165868194223-zmqf","La vieille synagogue",1,1,"{""street"":""Waagegasse 8"",""zip"":""99084"",""city"":""Erfurt"",""email"":""altesynagoge@erfurt.de"",""phone"":""+49 361 6551520"",""fax"":""+49 361 6551669"",""geo"":{""latitude"":50.978765,""longitude"":11.029133}}","[{""types"":[""GuidedTourOffer""],""title"":""F\u00fchrungen"",""description"":""Immer samstags, um 11:15 Uhr findet eine \u00f6ffentliche F\u00fchrung durch das Museum statt. Dauer etwa 90 Minuten"",""prices"":[{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""}]},{""types"":[""EntryOffer""],""title"":""Eintritt"",""description"":""Schulklassen und Kitagruppen im Rahmen des Unterrichts: Eintritt frei\nAn jedem ersten Dienstag im Monat: Eintritt frei"",""prices"":[{""title"":""Erm\u00e4\u00dfigt"",""description"":""als erm\u00e4\u00dfigt gelten schulpflichtige Kinder, Auszubildende, Studierende, Rentner\/-innen, Menschen mit Behinderungen, Inhaber Sozialausweis der Landeshauptstadt Erfurt"",""price"":5,""currency"":""EUR"",""rule"":""PerPerson""},{""title"":""Familienkarte"",""description"":"""",""price"":17,""currency"":""EUR"",""rule"":""PerGroup""},{""title"":""ErfurtCard"",""description"":"""",""price"":14.9,""currency"":""EUR"",""rule"":""PerPackage""},{""title"":""Erwachsene"",""description"":"""",""price"":8,""currency"":""EUR"",""rule"":""PerPerson""}]}]"
|
||||||
,6,10,0,0,0,"\NULL","https://thuecat.org/resources/215230952334-yyno","Krämerbrücke",1,1,"{""street"":""Benediktsplatz 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""service@erfurt-tourismus.de"",""phone"":""+49 361 66 400"",""fax"":"""",""geo"":{""latitude"":50.978772,""longitude"":11.031622}}","[]"
|
,6,10,0,0,0,"\NULL","https://thuecat.org/resources/215230952334-yyno","Krämerbrücke",1,1,"{""street"":""Benediktsplatz 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""service@erfurt-tourismus.de"",""phone"":""+49 361 66 400"",""fax"":"""",""geo"":{""latitude"":50.978772,""longitude"":11.031622}}","[]"
|
||||||
,7,10,1,6,6,"\NULL","https://thuecat.org/resources/215230952334-yyno","Merchants' Bridge",1,1,"{""street"":""Benediktsplatz 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""service@erfurt-tourismus.de"",""phone"":""+49 361 66 400"",""fax"":"""",""geo"":{""latitude"":50.978772,""longitude"":11.031622}}","[]"
|
,7,10,1,6,6,"\NULL","https://thuecat.org/resources/215230952334-yyno","Merchants' Bridge",1,1,"{""street"":""Benediktsplatz 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""service@erfurt-tourismus.de"",""phone"":""+49 361 66 400"",""fax"":"""",""geo"":{""latitude"":50.978772,""longitude"":11.031622}}","[]"
|
||||||
,8,10,2,6,6,"\NULL","https://thuecat.org/resources/215230952334-yyno","Pont de l'épicier",1,1,"{""street"":""Benediktsplatz 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""service@erfurt-tourismus.de"",""phone"":""+49 361 66 400"",""fax"":"""",""geo"":{""latitude"":50.978772,""longitude"":11.031622}}","[]"
|
,8,10,2,6,6,"\NULL","https://thuecat.org/resources/215230952334-yyno","Pont de l'épicier",1,1,"{""street"":""Benediktsplatz 1"",""zip"":""99084"",""city"":""Erfurt"",""email"":""service@erfurt-tourismus.de"",""phone"":""+49 361 66 400"",""fax"":"""",""geo"":{""latitude"":50.978772,""longitude"":11.031622}}","[]"
|
||||||
|
|
|
File diff suppressed because one or more lines are too long
111
Tests/Unit/Domain/Model/Frontend/OfferTest.php
Normal file
111
Tests/Unit/Domain/Model/Frontend/OfferTest.php
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022 Daniel Siepmann <coding@daniel-siepmann.de>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace WerkraumMedia\ThueCat\Tests\Unit\Domain\Model\Frontend;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use WerkraumMedia\ThueCat\Domain\Model\Frontend\Offer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \WerkraumMedia\ThueCat\Domain\Model\Frontend\Offer
|
||||||
|
*/
|
||||||
|
class OfferTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function canBeCreatedWithLegacyTypeAsString(): void
|
||||||
|
{
|
||||||
|
$subject = Offer::createFromArray([
|
||||||
|
'type' => 'LegacyType',
|
||||||
|
|
||||||
|
'title' => 'Example Title',
|
||||||
|
'description' => 'Example Description',
|
||||||
|
'prices' => [],
|
||||||
|
]);
|
||||||
|
|
||||||
|
self::assertInstanceOf(
|
||||||
|
Offer::class,
|
||||||
|
$subject
|
||||||
|
);
|
||||||
|
self::assertSame('LegacyType', $subject->getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function canBeCreatedWithSingleType(): void
|
||||||
|
{
|
||||||
|
$subject = Offer::createFromArray([
|
||||||
|
'types' => ['ParkingFee'],
|
||||||
|
|
||||||
|
'title' => 'Example Title',
|
||||||
|
'description' => 'Example Description',
|
||||||
|
'prices' => [],
|
||||||
|
]);
|
||||||
|
|
||||||
|
self::assertInstanceOf(
|
||||||
|
Offer::class,
|
||||||
|
$subject
|
||||||
|
);
|
||||||
|
self::assertSame('ParkingFee', $subject->getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function canBeCreatedWithMultipleTypes(): void
|
||||||
|
{
|
||||||
|
$subject = Offer::createFromArray([
|
||||||
|
'types' => ['Childcare', 'CourseOffer'],
|
||||||
|
|
||||||
|
'title' => 'Example Title',
|
||||||
|
'description' => 'Example Description',
|
||||||
|
'prices' => [],
|
||||||
|
]);
|
||||||
|
|
||||||
|
self::assertInstanceOf(
|
||||||
|
Offer::class,
|
||||||
|
$subject
|
||||||
|
);
|
||||||
|
self::assertSame('CourseOffer', $subject->getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function canBeCreatedWithoutType(): void
|
||||||
|
{
|
||||||
|
$subject = Offer::createFromArray([
|
||||||
|
'title' => 'Example Title',
|
||||||
|
'description' => 'Example Description',
|
||||||
|
'prices' => [],
|
||||||
|
]);
|
||||||
|
|
||||||
|
self::assertInstanceOf(
|
||||||
|
Offer::class,
|
||||||
|
$subject
|
||||||
|
);
|
||||||
|
self::assertSame('', $subject->getType());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue