UserTest.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <?php
  2. namespace Tests\Unit;
  3. use App\Models\Alias;
  4. use App\Models\AliasRecipient;
  5. use App\Models\Recipient;
  6. use App\Models\User;
  7. use Illuminate\Foundation\Testing\RefreshDatabase;
  8. use Tests\TestCase;
  9. class UserTest extends TestCase
  10. {
  11. use RefreshDatabase;
  12. protected $user;
  13. protected function setUp(): void
  14. {
  15. parent::setUp();
  16. $this->user = User::factory()->create();
  17. $this->user->recipients()->save($this->user->defaultRecipient);
  18. }
  19. /** @test */
  20. public function user_can_get_aliases_from_relationship()
  21. {
  22. $aliases = Alias::factory()->count(10)->create([
  23. 'user_id' => $this->user->id
  24. ]);
  25. $aliases->assertEquals($this->user->aliases);
  26. }
  27. /** @test */
  28. public function user_can_only_get_their_own_aliases_from_relationship()
  29. {
  30. $aliases = Alias::factory()->count(5)->create([
  31. 'user_id' => $this->user->id
  32. ]);
  33. Alias::factory()->count(10)->create();
  34. $aliases->assertEquals($this->user->aliases);
  35. }
  36. /** @test */
  37. public function user_can_get_total_emails_forwarded()
  38. {
  39. Alias::factory()->create([
  40. 'user_id' => $this->user->id,
  41. 'emails_forwarded' => 5
  42. ]);
  43. Alias::factory()->create([
  44. 'user_id' => $this->user->id,
  45. 'emails_forwarded' => 3,
  46. 'deleted_at' => now()
  47. ]);
  48. Alias::factory()->create([
  49. 'user_id' => $this->user->id,
  50. 'emails_forwarded' => 2,
  51. 'active' => false
  52. ]);
  53. $this->assertEquals(10, $this->user->totalEmailsForwarded());
  54. }
  55. /** @test */
  56. public function user_can_get_total_emails_blocked()
  57. {
  58. Alias::factory()->create([
  59. 'user_id' => $this->user->id,
  60. 'emails_blocked' => 3
  61. ]);
  62. Alias::factory()->create([
  63. 'user_id' => $this->user->id,
  64. 'emails_blocked' => 4,
  65. 'deleted_at' => now()
  66. ]);
  67. Alias::factory()->create([
  68. 'user_id' => $this->user->id,
  69. 'emails_blocked' => 1,
  70. 'active' => false
  71. ]);
  72. $this->assertEquals(8, $this->user->totalEmailsBlocked());
  73. }
  74. /** @test */
  75. public function user_can_get_total_emails_replied()
  76. {
  77. Alias::factory()->create([
  78. 'user_id' => $this->user->id,
  79. 'emails_replied' => 2
  80. ]);
  81. Alias::factory()->create([
  82. 'user_id' => $this->user->id,
  83. 'emails_replied' => 4,
  84. 'deleted_at' => now()
  85. ]);
  86. Alias::factory()->create([
  87. 'user_id' => $this->user->id,
  88. 'emails_replied' => 1,
  89. 'active' => false
  90. ]);
  91. $this->assertEquals(7, $this->user->totalEmailsReplied());
  92. }
  93. /** @test */
  94. public function user_can_get_aliases_using_default_recipient()
  95. {
  96. $recipient = Recipient::factory()->create([
  97. 'user_id' => $this->user->id
  98. ]);
  99. $aliasNotUsingDefault = Alias::factory()->create([
  100. 'user_id' => $this->user->id
  101. ]);
  102. AliasRecipient::create([
  103. 'alias' => $aliasNotUsingDefault,
  104. 'recipient' => $recipient
  105. ]);
  106. Alias::factory()->create([
  107. 'user_id' => $this->user->id
  108. ]);
  109. Alias::factory()->create([
  110. 'user_id' => $this->user->id,
  111. 'deleted_at' => now()
  112. ]);
  113. Alias::factory()->create([
  114. 'user_id' => $this->user->id,
  115. 'active' => false
  116. ]);
  117. $this->assertCount(2, $this->user->aliasesUsingDefault);
  118. $this->assertCount(3, $this->user->aliases);
  119. }
  120. /** @test */
  121. public function user_can_get_bandwidth_in_mb()
  122. {
  123. $this->user->update(['bandwidth' => 10485760]);
  124. $this->assertDatabaseHas('users', [
  125. 'id' => $this->user->id,
  126. 'bandwidth' => 10485760
  127. ]);
  128. $this->assertEquals(10, $this->user->bandwidth_mb);
  129. }
  130. /** @test */
  131. public function user_can_get_bandwidth_in_mb_to_correct_precision()
  132. {
  133. $this->user->update(['bandwidth' => 7324019]);
  134. $this->assertDatabaseHas('users', [
  135. 'id' => $this->user->id,
  136. 'bandwidth' => 7324019
  137. ]);
  138. $this->assertEquals(6.98, $this->user->bandwidth_mb);
  139. }
  140. /** @test */
  141. public function user_can_get_bandwidth_limit_in_mb()
  142. {
  143. $this->assertEquals(100, $this->user->getBandwidthLimitMb());
  144. }
  145. /** @test */
  146. public function user_can_check_if_near_bandwidth_usage_limit()
  147. {
  148. $this->user->update(['bandwidth' => 100943820]);
  149. $this->assertDatabaseHas('users', [
  150. 'id' => $this->user->id,
  151. 'bandwidth' => 100943820
  152. ]);
  153. $this->assertTrue($this->user->nearBandwidthLimit());
  154. $this->assertEquals(96.27, $this->user->bandwidth_mb);
  155. }
  156. /** @test */
  157. public function user_get_domain_options()
  158. {
  159. $username = $this->user->username;
  160. $domainOptions = $this->user->domainOptions();
  161. $expected = collect([
  162. 'anonaddy.me',
  163. 'anonaddy.com',
  164. $username.'.anonaddy.me',
  165. $username.'.anonaddy.com',
  166. ]);
  167. $this->assertCount($expected->count(), $domainOptions);
  168. $expected->zip($domainOptions)->each(function ($itemPair) {
  169. $this->assertEquals($itemPair[0], $itemPair[1]);
  170. });
  171. }
  172. /** @test */
  173. public function user_can_match_verified_recipient_with_extension()
  174. {
  175. $this->user->defaultRecipient->email = 'hello+anonaddy@example.com';
  176. $this->user->defaultRecipient->save();
  177. $this->assertTrue($this->user->isVerifiedRecipient('hello@example.com'));
  178. $this->user->defaultRecipient->email = 'hello+anonaddy+another@example.net';
  179. $this->user->defaultRecipient->save();
  180. $this->assertTrue($this->user->isVerifiedRecipient('hello@example.net'));
  181. $this->user->defaultRecipient->email = 'hello+anonaddy@example.net';
  182. $this->user->defaultRecipient->save();
  183. $this->assertTrue($this->user->isVerifiedRecipient('hello+anonaddy@example.net'));
  184. }
  185. }