Created
October 27, 2020 00:01
-
-
Save opejovic/747fea20648e0ae55eb2a255f8c50f0a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Tests\Feature; | |
use Tests\TestCase; | |
use taskbee\Models\User; | |
use taskbee\Models\Workspace; | |
use taskbee\Models\Invitation; | |
use taskbee\Mail\InvitationEmail; | |
use taskbee\Facades\InvitationCode; | |
use Illuminate\Support\Facades\Mail; | |
use taskbee\Models\WorkspaceSetupAuthorization; | |
use Illuminate\Foundation\Testing\WithFaker; | |
use Illuminate\Foundation\Testing\RefreshDatabase; | |
class InitialWorkspaceSetupProcessTest extends TestCase | |
{ | |
use RefreshDatabase; | |
/** @test */ | |
public function authorized_users_can_view_initial_workspace_setup_page_with_an_unused_authorization_code() | |
{ | |
$user = factory(User::class)->create(); | |
$authorization = factory(WorkspaceSetupAuthorization::class)->create([ | |
'admin_id' => null, | |
'workspace_id' => null, | |
'members_invited' => null, | |
'members_limit' => 5, | |
'code' => 'SAMPLEAUTHORIZATIONCODE123' | |
]); | |
$response = $this->actingAs($user)->get("/workspace-setup/SAMPLEAUTHORIZATIONCODE123"); | |
$response->assertStatus(200); | |
$response->assertViewIs('workspace-setup.create-workspace'); | |
$authorization->update([ | |
'workspace_id' => 1, | |
'admin_id' => $user->id | |
]); | |
$response = $this->actingAs($user)->get("/workspace-setup/SAMPLEAUTHORIZATIONCODE123"); | |
$response->assertStatus(200); | |
$response->assertViewIs('workspace-setup.invite-members'); | |
$authorization->update([ | |
'members_invited' => 5, | |
'members_limit' => 5, | |
]); | |
$response = $this->actingAs($user)->get("/workspace-setup/SAMPLEAUTHORIZATIONCODE123"); | |
$response->assertStatus(404); | |
} | |
/** @test */ | |
public function user_cannot_view_initial_workspace_setup_page_with_an_used_authorization_code() | |
{ | |
$user = factory(User::class)->create(); | |
$authorization = factory(WorkspaceSetupAuthorization::class)->states('used')->create(); | |
$response = $this->actingAs($user)->get("/workspace-setup/SAMPLEAUTHORIZATIONCODE123"); | |
$response->assertStatus(404); | |
} | |
/** @test */ | |
public function user_is_authorized_to_set_up_his_workspace_after_a_successful_subscription_purchase() | |
{ | |
$user = factory(User::class)->create(); | |
$setupAuthorization = factory(WorkspaceSetupAuthorization::class)->create([ | |
'admin_id' => $user->id, | |
'workspace_id' => null, | |
'members_invited' => 1, | |
'members_limit' => 5, | |
'email' => '[email protected]', | |
'code' => 'SAMPLEAUTHORIZATIONCODE123' | |
]); | |
$this->actingAs($user)->get("/workspace-setup/SAMPLEAUTHORIZATIONCODE123") | |
->assertStatus(200) | |
->assertViewIs('workspace-setup.create-workspace'); | |
$response = $this->actingAs($user)->from("/workspace-setup/SAMPLEAUTHORIZATIONCODE123") | |
->json('POST', '/workspace-setup/workspace', [ | |
'name' => 'Sample Workspace Name', | |
'authorization_code' => $setupAuthorization->code, | |
]); | |
$this->assertCount(1, Workspace::all()); | |
$workspace = Workspace::where('name', 'Sample Workspace Name')->first(); | |
$this->assertNotNull($workspace); | |
$this->assertTrue($setupAuthorization->fresh()->hasBeenUsedForWorkspace()); | |
$response->assertRedirect('/workspace-setup/SAMPLEAUTHORIZATIONCODE123'); | |
$this->get('/workspace-setup/SAMPLEAUTHORIZATIONCODE123') | |
->assertViewIs('workspace-setup.invite-members'); | |
} | |
/** @test */ | |
public function user_is_authorized_to_invite_members_to_his_workspace_after_a_successful_workspace_setup() | |
{ | |
Mail::fake(); | |
InvitationCode::shouldReceive('generate')->andReturn('TESTINVITATIONCODE123'); | |
$admin = factory(User::class)->create(); | |
$workspace = factory(Workspace::class)->create(['created_by' => $admin->id]); | |
$setupAuthorization = factory(WorkspaceSetupAuthorization::class)->create([ | |
'admin_id' => $admin->id, | |
'workspace_id' => $workspace->id, | |
'members_invited' => 1, | |
'members_limit' => 2, | |
'email' => '[email protected]', | |
'code' => 'SAMPLEAUTHORIZATIONCODE123', | |
'subscription_id' => $workspace->subscription_id, | |
]); | |
$this->actingAs($admin)->get("/workspace-setup/SAMPLEAUTHORIZATIONCODE123") | |
->assertStatus(200) | |
->assertViewIs('workspace-setup.invite-members'); | |
$response = $this->actingAs($admin)->from("/workspace-setup/SAMPLEAUTHORIZATIONCODE123") | |
->json('POST', "/workspace-setup/{$workspace->id}/members", [ | |
'first_name' => 'Jackie', | |
'last_name' => 'Doe', | |
'email' => '[email protected]', | |
'authorization_code' => 'SAMPLEAUTHORIZATIONCODE123', | |
]); | |
$invitation = Invitation::first(); | |
$this->assertNotNull($invitation); | |
$this->assertEquals('[email protected]', $invitation->email); | |
Mail::assertQueued(InvitationEmail::class, function ($mail) use ($invitation) { | |
return $mail->hasTo('[email protected]') | |
&& $mail->invitation->is($invitation); | |
}); | |
$this->assertTrue($setupAuthorization->fresh()->hasBeenUsedForMemberInvites()); | |
$response->assertRedirect("/workspaces/{$workspace->id}"); | |
$this->get('/workspace-setup/SAMPLEAUTHORIZATIONCODE123') | |
->assertStatus(404); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment