Reputation: 1165
I have following test case in which I want to test scenario as, if user found with usertype superadmin then redirect user to /home route and if user not found redirect him to /superadmin/setup route. Tried multiple approch but can't figure out. How can pass this test?
I'm using Laravel 5.4.
<?php
namespace Tests\Feature;
use App\User;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class SuperAdminRegistrationTest extends TestCase
{
use DatabaseMigrations;
public function testRegistrationForm()
{
factory(User::class)->create(['usertype' => 'superadmin']);
$user = User::getUserFromUsertype('superadmin');
//If valid user is found with usertype 'superadmin' then
// $this->get('/home');
// $this->assertStatus(200);
//Else user not found with given usertype then
// $this->get('/superadmin/setup');
// $this->assertStatus(200);
}
}
Upvotes: 2
Views: 3233
Reputation: 538
As a rule of thumb, do not use if else statements in your test methods. Since you want to test all the possible cases, but if else statements selects only one case.
From experience, I recommend you use two test methods as follows:
public function testSuperAdminCanViewRegistrationForm()
{
factory(User::class)->create(['usertype' => 'superadmin']);
$user = User::getUserFromUsertype('superadmin');
$this->actingAs($user);
$response = $this->get('/home');
$response->assertStatus(200);
}
public function testNonSuperAdminCanViewRegistrationForm()
{
factory(User::class)->create(['usertype' => 'non_superadmin']);
$user = User::getUserFromUsertype('non_superadmin');
$this->actingAs($user);
$response = $this->get('/home');
$response->assertStatus(302);
$response->assertRedirect('/superadmin/setup');
}
NB: I worked in Laravel ^6.0
Upvotes: 1
Reputation: 151
$this->assertRedirectedTo($uri, $with = []);
maybe try something like that
This PHPUnit method will assert whether you have been redirected to the $uri you provide within the arguments.
https://laravel.com/docs/5.4/testing
you can read more about this in the official laravel documentation for testing
Upvotes: 2
Reputation: 479
Create a 2nd user that is not of type superadmin. Make sure they get redirected to /superadmin/setup.
Upvotes: 0