diff --git a/app/Services/Model/Imp/SummitOrderService.php b/app/Services/Model/Imp/SummitOrderService.php index 6b29c4b8c..b2776e8ec 100644 --- a/app/Services/Model/Imp/SummitOrderService.php +++ b/app/Services/Model/Imp/SummitOrderService.php @@ -4614,7 +4614,7 @@ public function processTicketData(int $summit_id, string $filename) if (!$ticket->hasBadge()) { // create it - if (!is_null($badge_type)) { + if (is_null($badge_type)) { Log::warning("SummitOrderService::processTicketData badge type is null stop current row processing."); return; } diff --git a/tests/SummitOrderServiceTest.php b/tests/SummitOrderServiceTest.php index 402c8a5fb..0aae939f5 100644 --- a/tests/SummitOrderServiceTest.php +++ b/tests/SummitOrderServiceTest.php @@ -678,4 +678,50 @@ public function testImportTicketDataBadgeFeaturesStillClearedAndReSet() $this->assertNotNull($answer); $this->assertEquals('Vegan', $answer->getValue()); } + + public function testImportTicketDataCreatesBadgeWhenTicketHasNone() + { + Queue::fake(); + + // every fixture ticket type carries a badge type, so SummitTicketType::applyTo + // auto-creates a badge at setTicketType time — build a ticket from a type with + // no badge type to get a genuinely badge-less ticket + $ticket_type = new SummitTicketType(); + $ticket_type->setName('NO BADGE TICKET TYPE'); + $ticket_type->setCost(100); + $ticket_type->setCurrency('USD'); + $ticket_type->setQuantity2Sell(10); + $ticket_type->setAudience(SummitTicketType::Audience_All); + self::$summit->addTicketType($ticket_type); + + $order = new SummitOrder(); + $order->setOwner(self::$defaultMember); + $order->setSummit(self::$summit); + self::$summit->addOrder($order); + + $ticket = new SummitAttendeeTicket(); + $ticket->setTicketType($ticket_type); + $ticket->activate(); + $order->addTicket($ticket); + $order->setPaid(); + $order->generateNumber(); + $ticket->generateNumber(); + $ticket->generateQRCode(); + + self::$em->persist(self::$summit); + self::$em->flush(); + + $this->assertFalse($ticket->hasBadge()); + + $csv_content = <<getNumber()},new.attendee@nowhere.com,New,Attendee,BADGE TYPE1 +CSV; + + $service = $this->buildTicketDataImportService($csv_content); + $service->processTicketData(self::$summit->getId(), 'tickets.csv'); + + $this->assertTrue($ticket->hasBadge()); + $this->assertEquals('BADGE TYPE1', $ticket->getBadge()->getType()->getName()); + } }