Skip to content

Instantly share code, notes, and snippets.

@opejovic
Created October 27, 2020 00:01
Show Gist options
  • Save opejovic/747fea20648e0ae55eb2a255f8c50f0a to your computer and use it in GitHub Desktop.
Save opejovic/747fea20648e0ae55eb2a255f8c50f0a to your computer and use it in GitHub Desktop.
<?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