Skip to content

Commit

Permalink
Merge pull request #1572 from cultuurnet/PPF-652-imporove-test-getDra…
Browse files Browse the repository at this point in the history
…ftsByTypeAndBetweenMonthsOld

PPF-652 improve test_get_drafts_by_type_and_between_months_old()
  • Loading branch information
JonasVHG authored Dec 9, 2024
2 parents 0af5a1f + 3e8e208 commit 25b4740
Showing 1 changed file with 158 additions and 145 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Event;
use PHPUnit\Framework\Attributes\DataProvider;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\UuidInterface;
use Tests\TestCase;
Expand Down Expand Up @@ -704,161 +703,175 @@ public function test_it_can_not_save_integration_with_subscription_with_differen
);
}

#[DataProvider('dataProviderForGetDraftsByTypeAndBetweenMonthsOld')]
public function test_get_drafts_by_type_and_between_months_old(
IntegrationType $integrationType,
IntegrationStatus $status,
Carbon $date,
?Carbon $mailAlreadySent,
bool $hasContact,
bool $onHold,
TemplateName $templateName,
int $expectedCount,
): void {
$integrationId = Uuid::uuid4()->toString();
public function test_get_drafts_by_type_and_between_months_old(): void
{
$this->setUpDatabaseForGetDraftsByTypeAndBetweenMonthsOld();

$actual = $this->integrationRepository->getDraftsByTypeAndBetweenMonthsOld(
IntegrationType::SearchApi,
12,
24,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
);

$this->assertEqualsCanonicalizing(
[
'A different type of email has been sent, should be selected',
'Should be selected!',
'Should also be selected!',
],
$actual->map(fn ($item) => $item->name)->toArray()
);
}

private function setUpDatabaseForGetDraftsByTypeAndBetweenMonthsOld(): void
{
$wrongTypeId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $integrationId,
'type' => $integrationType->value,
'id' => $wrongTypeId,
'type' => IntegrationType::EntryApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Test',
'name' => 'Should not be selected: wrong type',
'description' => 'test',
'status' => $status,
'created_at' => $date,
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(14),
]);
$this->setUpContact($wrongTypeId);

if ($mailAlreadySent) {
DB::table('integrations_mails')->insert([
'id' => Uuid::uuid4()->toString(),
'integration_id' => $integrationId,
'template_name' => TemplateName::INTEGRATION_ACTIVATION_REMINDER->value,
]);
}
$alreadyActiveId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $alreadyActiveId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Should not be selected: already active',
'description' => 'test',
'status' => IntegrationStatus::Active,
'created_at' => Carbon::now()->subMonths(14),
]);
$this->setUpContact($alreadyActiveId);

if ($hasContact) {
DB::table('contacts')->insert([
'id' => Uuid::uuid4()->toString(),
'integration_id' => $integrationId,
'email' => '[email protected]',
'type' => ContactType::Technical->value,
'first_name' => 'Grote',
'last_name' => 'Smurf',
]);
}
$noContactsId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $noContactsId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Should not be selected: No contacts',
'description' => 'test',
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(14),
]);

if ($onHold) {
DB::table('admin_information')->insert([
'id' => Uuid::uuid4()->toString(),
'integration_id' => $integrationId,
'on_hold' => true,
'comment' => 'Integration is on hold',
]);
}
$createdToRecentlyId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $createdToRecentlyId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Should not be selected: Created too recently',
'description' => 'test',
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(11),
]);
$this->setUpContact($createdToRecentlyId);

$this->assertCount(
$expectedCount,
$this->integrationRepository->getDraftsByTypeAndBetweenMonthsOld(
IntegrationType::SearchApi,
12,
24,
$templateName,
)
);
$mailAlreadySentId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $mailAlreadySentId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Should not be selected: Created too recently',
'description' => 'test',
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(11),
]);
DB::table('integrations_mails')->insert([
'id' => Uuid::uuid4()->toString(),
'integration_id' => $mailAlreadySentId,
'template_name' => TemplateName::INTEGRATION_ACTIVATION_REMINDER->value,
]);
$this->setUpContact($mailAlreadySentId);

$tooOldId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $tooOldId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Should not be selected: Too old',
'description' => 'test',
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(50),
]);
$this->setUpContact($tooOldId);

$hasAdminHoldId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $hasAdminHoldId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Should not be selected: has an admin hold state',
'description' => 'test',
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(14),
]);
$this->setUpContact($hasAdminHoldId);
DB::table('admin_information')->insert([
'id' => Uuid::uuid4()->toString(),
'integration_id' => $hasAdminHoldId,
'on_hold' => true,
'comment' => 'Integration is on hold',
]);

$shouldBeSelectedId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $shouldBeSelectedId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Should be selected!',
'description' => 'test',
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(14),
]);
$this->setUpContact($shouldBeSelectedId);

$shouldAlsoBeSelectedId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $shouldAlsoBeSelectedId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'Should also be selected!',
'description' => 'test',
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(15),
]);
$this->setUpContact($shouldAlsoBeSelectedId);

$differentTypeOfMailId = Uuid::uuid4()->toString();
DB::table('integrations')->insert([
'id' => $differentTypeOfMailId,
'type' => IntegrationType::SearchApi,
'subscription_id' => Uuid::uuid4()->toString(),
'name' => 'A different type of email has been sent, should be selected',
'description' => 'test',
'status' => IntegrationStatus::Draft,
'created_at' => Carbon::now()->subMonths(15),
]);
DB::table('integrations_mails')->insert([
'id' => Uuid::uuid4()->toString(),
'integration_id' => $differentTypeOfMailId,
'template_name' => TemplateName::INTEGRATION_CREATED->value,
]);
$this->setUpContact($differentTypeOfMailId);
}

public static function dataProviderForGetDraftsByTypeAndBetweenMonthsOld(): array
private function setUpContact(string $integrationId): void
{
return [
'Should not be selected: wrong type' => [
IntegrationType::EntryApi,
IntegrationStatus::Draft,
Carbon::now()->subMonths(14),
null,
true,
false,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
0,
],
'Should not be selected: already active' => [
IntegrationType::SearchApi,
IntegrationStatus::Active,
Carbon::now()->subMonths(14),
null,
true,
false,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
0,
],
'Should not be selected: No contacts' => [
IntegrationType::SearchApi,
IntegrationStatus::Draft,
Carbon::now()->subMonths(14),
null,
false,
false,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
0,
],
'Should not be selected: Created too recently' => [
IntegrationType::SearchApi,
IntegrationStatus::Draft,
Carbon::now()->subMonths(11),
null,
true,
false,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
0,
],
'Should not be selected: Mail already sent' => [
IntegrationType::SearchApi,
IntegrationStatus::Draft,
Carbon::now()->subMonths(14),
Carbon::now(),
true,
false,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
0,
],
'Should not be selected: Too old' => [
IntegrationType::SearchApi,
IntegrationStatus::Draft,
Carbon::now()->subMonths(50),
null,
true,
false,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
0,
],
'Should not be selected: has an admin hold state' => [
IntegrationType::SearchApi,
IntegrationStatus::Draft,
Carbon::now()->subMonths(14),
null,
true,
true,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
0,
],
'Should be selected!' => [
IntegrationType::SearchApi,
IntegrationStatus::Draft,
Carbon::now()->subMonths(14),
null,
true,
false,
TemplateName::INTEGRATION_ACTIVATION_REMINDER,
1,
],
'A different type of email has been sent, should be selected' => [
IntegrationType::SearchApi,
IntegrationStatus::Draft,
Carbon::now()->subMonths(14),
Carbon::now(),
true,
false,
TemplateName::INTEGRATION_CREATED,
1,
],
];
DB::table('contacts')->insert([
'id' => Uuid::uuid4()->toString(),
'integration_id' => $integrationId,
'email' => '[email protected]',
'type' => ContactType::Technical->value,
'first_name' => 'Grote',
'last_name' => 'Smurf',
]);
}

private function givenThereIsASubscription(
Expand Down

0 comments on commit 25b4740

Please sign in to comment.