* feat: composer require symfony/mailer * feat: add entities for massive emailing * feat: expose mail API resources * feat: add BatchStatus::SentErrors * fix: show client status after consent command * feat: define shape of audiences criteria * fix: missing map entity provider for mail entities * fix: unsupported array/object conversion of audience criterias * fix: rename MailBatch to MailBroadcast and MailBatchRecipient to MailDispatch * feat: add command to process broadcasts * feat: add lock to broadcast process command * fix: remove dispatchCursor from Broadcast * fix: make broadcasts-process command fast * feat: update mailpit config for local dev * feat: add app:mail:dispatches-process command * feat: it was fun to play with a massive mailing prototype * feat: composer require symfonycasts/reset-password-bundle * feat: make reset-password * fix: bad ALTER on migration down op * feat: add migration for reset password bundle * fix: update forms style * feat: configure mailer address via env var * fix: remove missing asset reference * feat: translate /auth/reset-password * feat: translate email message * fix: calendar minimum optimum deadline not being set when release was given * feat: translate /check-email * feat: translate /reset * fix: rename main SecurityController path to /auth * feat: add known oauth2 clients controllr * fix: deprecated custom responses openapi context definitions * fix: projects not in campaign can still have a calendar * fix: weird af regression out of the blue, fuck software * feat: fuck my life
61 lines
2.1 KiB
PHP
61 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Tests\Entity;
|
|
|
|
use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;
|
|
use App\Entity\Project\Project;
|
|
use App\Entity\Project\ProjectDeadline;
|
|
use App\Entity\Project\ProjectStatus;
|
|
use App\Entity\Project\Review;
|
|
use App\Entity\Project\ReviewType;
|
|
use App\Entity\User\User;
|
|
use App\Service\Project\ProjectService;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Zenstruck\Foundry\Test\ResetDatabase;
|
|
|
|
class ProjectCampaignReviewTest extends ApiTestCase
|
|
{
|
|
use ResetDatabase;
|
|
private EntityManagerInterface $entityManager;
|
|
private ProjectService $projectService;
|
|
private User $owner;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
$this->entityManager = static::getContainer()->get(EntityManagerInterface::class);
|
|
$this->projectService = static::getContainer()->get(ProjectService::class);
|
|
$this->owner = new User();
|
|
$this->owner->setHandle('test_user');
|
|
$this->owner->setEmail('testuser@example.com');
|
|
$this->owner->setPassword('projectapitestpassword');
|
|
$this->entityManager->persist($this->owner);
|
|
$this->entityManager->flush();
|
|
}
|
|
|
|
private function createProjectAndSetToInCampaignReview(): Project
|
|
{
|
|
$project = new Project();
|
|
$project->setTitle('test project title');
|
|
$project->setSubtitle('test project subtitle');
|
|
$project->setOwner($this->owner);
|
|
$project->setStatus(ProjectStatus::InDraft);
|
|
$project->setDeadline(ProjectDeadline::Minimum);
|
|
$this->entityManager->persist($project);
|
|
$this->entityManager->flush();
|
|
$project = $this->projectService->transition($project, ProjectStatus::ToCampaignReview);
|
|
$this->entityManager->flush();
|
|
|
|
return $project;
|
|
}
|
|
|
|
public function testCreatesReviewOnStatusChange(): void
|
|
{
|
|
$project = $this->createProjectAndSetToInCampaignReview();
|
|
$reviews = $this->entityManager->getRepository(Review::class)->findBy(['project' => $project->getId()]);
|
|
|
|
$this->assertCount(1, $reviews);
|
|
$this->assertSame(ReviewType::Campaign->value, $reviews[0]->getType()->value);
|
|
}
|
|
}
|