The project consists in the interaction between user and attestations. But never the less the problem is when i create a user using my User Factory (the user comes with an assing role out of no where):
$factory->define(User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => 'yIXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
'num_id_fiscal' => $faker->unique()->numberBetween($min = 100000000, $max = 299999999),
'nomes_proprios' => $faker->firstName,
'apelidos' => $faker->lastName,
'data_de_nascimento' => $faker->dateTimeBetween($startDate = '-50 years', $endDate = '-18 years', $timezone = null),
'data_de_validade' => $faker->dateTimeBetween($startDate = 'now', $endDate = '+8 years', $timezone = null),
'num_id_civil' => $faker->unique()->numberBetween($min = 10000000, $max = 19999999),
'num_id_seg_social' => $faker->unique()->numberBetween($min = 10000000000, $max = 19999999999),
'estado' => 'Dados Confirmados',
'profissao' => $faker->jobTitle,
'nome_do_pai' => $faker->name,
'nome_da_mae' => $faker->name,
'estado_civil' => 'Casado',
'natural_da_freguesia_de' => $faker->citySuffix,
'natural_do_concelho_de' => $faker->city,
'created_at' => \Carbon\Carbon::now(),
'updated_at' => \Carbon\Carbon::now(),
];
});
In the setUp() : void function of InteracaoComAtestadoTest (the user comes with an assing role out of no where):
public function setUp() :void
{
parent::setUp();
// Seed the default permissions
$permissions = Permission::defaultPermissions();
foreach ($permissions as $perms) {
Permission::firstOrCreate(['name' => $perms]);
}
$roles_array = ['SuperAdmin', 'Admin', 'Funcionário', 'Freguês'];
// add roles
foreach($roles_array as $role) {
$role = Role::firstOrCreate(['guard_name' => 'web', 'name' => trim($role)]);
if( $role->name == 'Admin' ) {
// assign all permissions
$role->syncPermissions(Permission::where('name', 'LIKE', 'access_%')->get());
$role->syncPermissions(Permission::where('name', 'LIKE', 'manage_%')->get());
$role->syncPermissions(Permission::where('name', 'LIKE', 'admin_%')->get());
} elseif($role->name == 'Freguês') {
// for others by default only read access
$role->syncPermissions(Permission::where('name', 'LIKE', 'access_%')->get());
} elseif($role->name == 'Funcionário'){
$role->syncPermissions(Permission::where('name', 'LIKE', 'access_%')->get());
} elseif( $role->name == 'SuperAdmin') {
$role->syncPermissions(Permission::all());
}
}
$this->atestado = factory('App\Atestado')->state('Atestado da Situação Económica Incompleto')->create();
$this->user_user = factory('App\User')->create();
$condition = $this->user_user->hasRole('Freguês');
$this->user_user->assignRole('Freguês');
$condition = $this->user_user->hasRole('Freguês');
$this->user_funcionario = factory('App\User')->create();
$condition = $this->user_funcionario->hasRole('Freguês');
$this->user_funcionario->assignRole('Funcionário');
$condition = $this->user_funcionario->hasRole('Freguês');
$this->atestado->users()->attach([$this->user_user->id, $this->user_funcionario->id]);
}
The test where it falling:
/** @test */
public function um_atestado_so_pode_mudar_para_valido_ou_invalido_apenas_depois_de_ser_dado_como_completo(){
$response = $this->actingAs($this->user_funcionario)
->put(route('users.atestados.atestado-da-situacao-economica.updateStatus', $this->atestado->id), array(
'estado' => 'Inválido'
))
->assertRedirect('atestado-da-situacao-economica/'. $this->atestado->id);
$this->assertTrue($this->atestado->estado == 'Incompleto');
}
The controller related with this test:
public function updateStatus(Request $request, Atestado $atestado_da_situacao_economica){
$user = auth()->user();
if(tem_permissao($user,'Freguês','access_App') && $atestado_da_situacao_economica->users->contains($user->id)){
if($request->has('estado')){
switch($request->input('estado')){
case 'Completo':
$atestado_da_situacao_economica->fill(['estado' => 'Completo']);
$atestado_da_situacao_economica->save();
$funcionarios = User::with('roles')->get()->reject(function ($user, $key){
return $user->hasRole('Funcionário');
});
foreach($funcionarios as $funcionario){
$detalhes = [
'texto' => 'O freguês deu o Atestado da Situação Económica como completo.',
'user_id' => $user->id,
];
$funcionario->notify(new FuncionarioAtestadoDaSituacaoEconomica($detalhes));
}
break;
default:
break;
}
}
}elseif($user->hasRole('Funcionário')){
// where it was supposed to enter not above
}
return redirect(route('users.atestados.atestado-da-situacao-economica.index'));
}
Expect result:
Test passed with out error.
Actual Behavior:
Failed asserting that two strings are equal.
Expected :'http://localhost/atestado-da-situacao-economica/1'
Actual :'http://localhost/atestado-da-situacao-economica'