AliasRecipientsTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace Tests\Feature\Api;
  3. use App\Models\Alias;
  4. use App\Models\AliasRecipient;
  5. use App\Models\Recipient;
  6. use Illuminate\Foundation\Testing\RefreshDatabase;
  7. use Tests\TestCase;
  8. class AliasRecipientsTest extends TestCase
  9. {
  10. use RefreshDatabase;
  11. protected function setUp(): void
  12. {
  13. parent::setUp();
  14. parent::setUpPassport();
  15. }
  16. /** @test */
  17. public function user_can_attach_recipient_to_alias()
  18. {
  19. $alias = Alias::factory()->create([
  20. 'user_id' => $this->user->id
  21. ]);
  22. $recipient = Recipient::factory()->create([
  23. 'user_id' => $this->user->id
  24. ]);
  25. $response = $this->json('POST', '/api/v1/alias-recipients', [
  26. 'alias_id' => $alias->id,
  27. 'recipient_ids' => [$recipient->id]
  28. ]);
  29. $response->assertStatus(200);
  30. $this->assertCount(1, $alias->recipients);
  31. $this->assertEquals($recipient->email, $alias->recipients[0]->email);
  32. }
  33. /** @test */
  34. public function user_can_attach_multiple_recipients_to_alias()
  35. {
  36. $alias = Alias::factory()->create([
  37. 'user_id' => $this->user->id
  38. ]);
  39. $recipient1 = Recipient::factory()->create([
  40. 'user_id' => $this->user->id
  41. ]);
  42. $recipient2 = Recipient::factory()->create([
  43. 'user_id' => $this->user->id
  44. ]);
  45. $recipient3 = Recipient::factory()->create([
  46. 'user_id' => $this->user->id
  47. ]);
  48. $response = $this->json('POST', '/api/v1/alias-recipients', [
  49. 'alias_id' => $alias->id,
  50. 'recipient_ids' => [$recipient1->id, $recipient2->id, $recipient3->id]
  51. ]);
  52. $response->assertStatus(200);
  53. $this->assertCount(3, $alias->recipients);
  54. }
  55. /** @test */
  56. public function user_can_update_existing_recipients_for_alias()
  57. {
  58. $alias = Alias::factory()->create([
  59. 'user_id' => $this->user->id
  60. ]);
  61. $recipient1 = Recipient::factory()->create([
  62. 'user_id' => $this->user->id
  63. ]);
  64. AliasRecipient::create([
  65. 'alias' => $alias,
  66. 'recipient' => $recipient1
  67. ]);
  68. $recipient2 = Recipient::factory()->create([
  69. 'user_id' => $this->user->id
  70. ]);
  71. $recipient3 = Recipient::factory()->create([
  72. 'user_id' => $this->user->id
  73. ]);
  74. $response = $this->json('POST', '/api/v1/alias-recipients', [
  75. 'alias_id' => $alias->id,
  76. 'recipient_ids' => [$recipient2->id, $recipient3->id]
  77. ]);
  78. $response->assertStatus(200);
  79. $this->assertCount(2, $alias->recipients);
  80. }
  81. /** @test */
  82. public function user_cannot_attach_unverified_recipient_to_alias()
  83. {
  84. $alias = Alias::factory()->create([
  85. 'user_id' => $this->user->id
  86. ]);
  87. $unverifiedRecipient = Recipient::factory()->create([
  88. 'user_id' => $this->user->id,
  89. 'email_verified_at' => null
  90. ]);
  91. $response = $this->json('POST', '/api/v1/alias-recipients', [
  92. 'alias_id' => $alias->id,
  93. 'recipient_ids' => [$unverifiedRecipient->id]
  94. ]);
  95. $response->assertStatus(422);
  96. $this->assertCount(0, $alias->recipients);
  97. }
  98. /** @test */
  99. public function user_cannot_attach_more_than_allowed_recipients_to_alias()
  100. {
  101. $alias = Alias::factory()->create([
  102. 'user_id' => $this->user->id
  103. ]);
  104. $recipients = Recipient::factory()->count(11)->create([
  105. 'user_id' => $this->user->id
  106. ]);
  107. $response = $this->json('POST', '/api/v1/alias-recipients', [
  108. 'alias_id' => $alias->id,
  109. 'recipient_ids' => $recipients->pluck('id')
  110. ]);
  111. $response->assertStatus(422);
  112. $this->assertCount(0, $alias->recipients);
  113. }
  114. /** @test */
  115. public function alias_recipient_record_is_deleted_if_recipient_is_deleted()
  116. {
  117. $alias = Alias::factory()->create([
  118. 'user_id' => $this->user->id
  119. ]);
  120. $recipient = Recipient::factory()->create([
  121. 'user_id' => $this->user->id
  122. ]);
  123. AliasRecipient::create([
  124. 'alias' => $alias,
  125. 'recipient' => $recipient
  126. ]);
  127. $this->assertEquals($alias->recipients[0]->email, $recipient->email);
  128. $recipient->delete();
  129. $this->assertCount(0, AliasRecipient::all());
  130. $this->assertDatabaseMissing('alias_recipients', [
  131. 'alias_id' => $alias->id,
  132. 'recipient_id' => $recipient->id
  133. ]);
  134. }
  135. }