123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- <?php
- namespace Tests\Feature\Api;
- use App\AdditionalUsername;
- use App\DeletedUsername;
- use App\Recipient;
- use App\User;
- use Illuminate\Foundation\Testing\RefreshDatabase;
- use Tests\TestCase;
- class AdditionalUsernamesTest extends TestCase
- {
- use RefreshDatabase;
- protected function setUp(): void
- {
- parent::setUp();
- parent::setUpPassport();
- }
- /** @test */
- public function user_can_get_all_additional_usernames()
- {
- // Arrange
- factory(AdditionalUsername::class, 3)->create([
- 'user_id' => $this->user->id
- ]);
- // Act
- $response = $this->get('/api/v1/usernames');
- // Assert
- $response->assertSuccessful();
- $this->assertCount(3, $response->json()['data']);
- }
- /** @test */
- public function user_can_get_individual_additional_username()
- {
- // Arrange
- $username = factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id
- ]);
- // Act
- $response = $this->get('/api/v1/usernames/'.$username->id);
- // Assert
- $response->assertSuccessful();
- $this->assertCount(1, $response->json());
- $this->assertEquals($username->username, $response->json()['data']['username']);
- }
- /** @test */
- public function user_can_create_additional_username()
- {
- $response = $this->json('POST', '/api/v1/usernames', [
- 'username' => 'janedoe'
- ]);
- $response->assertStatus(201);
- $this->assertEquals('janedoe', $response->getData()->data->username);
- $this->assertEquals(1, $this->user->username_count);
- }
- /** @test */
- public function user_can_not_exceed_additional_username_limit()
- {
- $this->json('POST', '/api/v1/usernames', [
- 'username' => 'username1'
- ]);
- $this->json('POST', '/api/v1/usernames', [
- 'username' => 'username2'
- ]);
- $this->json('POST', '/api/v1/usernames', [
- 'username' => 'username3'
- ]);
- $response = $this->json('POST', '/api/v1/usernames', [
- 'username' => 'janedoe'
- ]);
- $response->assertStatus(403);
- $this->assertEquals(3, $this->user->username_count);
- $this->assertCount(3, $this->user->additionalUsernames);
- }
- /** @test */
- public function user_can_not_create_the_same_username()
- {
- factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id,
- 'username' => 'janedoe'
- ]);
- $response = $this->json('POST', '/api/v1/usernames', [
- 'username' => 'janedoe'
- ]);
- $response
- ->assertStatus(422)
- ->assertJsonValidationErrors('username');
- }
- /** @test */
- public function user_can_not_create_additional_username_that_has_been_deleted()
- {
- factory(DeletedUsername::class)->create([
- 'username' => 'janedoe'
- ]);
- $response = $this->json('POST', '/api/v1/usernames', [
- 'username' => 'janedoe'
- ]);
- $response
- ->assertStatus(422)
- ->assertJsonValidationErrors('username');
- }
- /** @test */
- public function must_be_unique_across_users_and_additional_usernames_tables()
- {
- $user = factory(User::class)->create();
- $response = $this->json('POST', '/api/v1/usernames', [
- 'username' => $user->username
- ]);
- $response
- ->assertStatus(422)
- ->assertJsonValidationErrors('username');
- }
- /** @test */
- public function additional_username_must_be_alpha_numeric()
- {
- $response = $this->json('POST', '/api/v1/usernames', [
- 'username' => 'username01_'
- ]);
- $response
- ->assertStatus(422)
- ->assertJsonValidationErrors('username');
- }
- /** @test */
- public function additional_username_must_be_less_than_max_length()
- {
- $response = $this->json('POST', '/api/v1/usernames', [
- 'username' => 'abcdefghijklmnopqrstu'
- ]);
- $response
- ->assertStatus(422)
- ->assertJsonValidationErrors('username');
- }
- /** @test */
- public function user_can_activate_additional_username()
- {
- $username = factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id,
- 'active' => false
- ]);
- $response = $this->json('POST', '/api/v1/active-usernames/', [
- 'id' => $username->id
- ]);
- $response->assertStatus(200);
- $this->assertEquals(true, $response->getData()->data->active);
- }
- /** @test */
- public function user_can_deactivate_additional_username()
- {
- $username = factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id,
- 'active' => true
- ]);
- $response = $this->json('DELETE', '/api/v1/active-usernames/'.$username->id);
- $response->assertStatus(204);
- $this->assertFalse($this->user->additionalUsernames[0]->active);
- }
- /** @test */
- public function user_can_update_additional_usernames_description()
- {
- $username = factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id
- ]);
- $response = $this->json('PATCH', '/api/v1/usernames/'.$username->id, [
- 'description' => 'The new description'
- ]);
- $response->assertStatus(200);
- $this->assertEquals('The new description', $response->getData()->data->description);
- }
- /** @test */
- public function user_can_delete_additional_username()
- {
- $username = factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id
- ]);
- $response = $this->json('DELETE', '/api/v1/usernames/'.$username->id);
- $response->assertStatus(204);
- $this->assertEmpty($this->user->additionalUsernames);
- $this->assertEquals(DeletedUsername::first()->username, $username->username);
- }
- /** @test */
- public function user_can_update_additional_username_default_recipient()
- {
- $additionalUsername = factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id
- ]);
- $newDefaultRecipient = factory(Recipient::class)->create([
- 'user_id' => $this->user->id
- ]);
- $response = $this->json('PATCH', '/api/v1/usernames/'.$additionalUsername->id.'/default-recipient', [
- 'default_recipient' => $newDefaultRecipient->id
- ]);
- $response->assertStatus(200);
- $this->assertDatabaseHas('additional_usernames', [
- 'id' => $additionalUsername->id,
- 'default_recipient_id' => $newDefaultRecipient->id
- ]);
- $this->assertEquals($newDefaultRecipient->email, $additionalUsername->refresh()->defaultRecipient->email);
- }
- /** @test */
- public function user_cannot_update_additional_username_default_recipient_with_unverified_recipient()
- {
- $additionalUsername = factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id
- ]);
- $newDefaultRecipient = factory(Recipient::class)->create([
- 'user_id' => $this->user->id,
- 'email_verified_at' => null
- ]);
- $response = $this->json('PATCH', '/api/v1/usernames/'.$additionalUsername->id.'/default-recipient', [
- 'default_recipient' => $newDefaultRecipient->id
- ]);
- $response->assertStatus(404);
- $this->assertDatabaseMissing('additional_usernames', [
- 'id' => $additionalUsername->id,
- 'default_recipient_id' => $newDefaultRecipient->id
- ]);
- }
- /** @test */
- public function user_can_remove_additional_username_default_recipient()
- {
- $defaultRecipient = factory(Recipient::class)->create([
- 'user_id' => $this->user->id
- ]);
- $additionalUsername = factory(AdditionalUsername::class)->create([
- 'user_id' => $this->user->id,
- 'default_recipient_id' => $defaultRecipient->id
- ]);
- $response = $this->json('PATCH', '/api/v1/usernames/'.$additionalUsername->id.'/default-recipient', [
- 'default_recipient' => ''
- ]);
- $response->assertStatus(200);
- $this->assertDatabaseHas('additional_usernames', [
- 'id' => $additionalUsername->id,
- 'default_recipient_id' => null
- ]);
- $this->assertNull($additionalUsername->refresh()->defaultRecipient);
- }
- }
|