get(EntityManagerInterface::class); foreach ($this->toDelete as [$entity, $id]) { $entity = $em->find($entity, $id); $em->remove($entity); } $em->flush(); } public function testSendBulkMessageToEligibleCalendar() { $em = self::getContainer()->get(EntityManagerInterface::class); $calendar = new Calendar(); $calendar ->addPerson($this->getRandomPerson($em)) ->setMainUser($user = $this->prepareUser([])) ->setStartDate(new \DateTimeImmutable('now')) ->setEndDate($calendar->getStartDate()->add(new \DateInterval('PT30M'))) ->setSendSMS(true); $user->setUsername(uniqid()); $user->setEmail(uniqid().'@gmail.com'); $calendar->getPersons()->first()->setAcceptSMS(true); // hack to prevent side effect with messages $calendar->preventEnqueueChanges = true; $em->persist($user); // $this->toDelete[] = [User::class, $user->getId()]; $em->persist($calendar); // $this->toDelete[] = [Calendar::class, $calendar->getId()]; $em->flush(); $provider = $this->prophesize(CalendarForShortMessageProvider::class); $provider->getCalendars(Argument::type(\DateTimeImmutable::class)) ->willReturn(new \ArrayIterator([$calendar])); $messageBuilder = $this->prophesize(ShortMessageForCalendarBuilderInterface::class); $messageBuilder->buildMessageForCalendar(Argument::type(Calendar::class)) ->willReturn( [ new SmsMessage( '+32470123456', 'content', ), ] ); $texter = $this->prophesize(TexterInterface::class); $texter->send(Argument::type(SmsMessage::class)) ->will(fn ($args): SentMessage => new SentMessage($args[0], 'sms')) ->shouldBeCalledTimes(1); $bulk = new BulkCalendarShortMessageSender( $provider->reveal(), $em, new NullLogger(), $texter->reveal(), $messageBuilder->reveal() ); $bulk->sendBulkMessageToEligibleCalendars(); $em->clear(); $calendar = $em->find(Calendar::class, $calendar->getId()); $this->assertEquals(Calendar::SMS_SENT, $calendar->getSmsStatus()); } }