Happening with some other tests not shore why. I try to use AtestadoDaSituacaoEconomica@updateStatus for alter a single value of "Atestado". I works in browser not in test.
Jun 4, 2020
10
Level 6
Laravel vendor\bin\phpunit test do not pass but controller working as supposed.
class AtestadoTest extends TestCase
{
use DatabaseMigrations;
/**
* A basic feature test example.
*
* @return void
*/
protected $atestado, $user_user, $user_funcionario, $role_user, $role_funcionario;
public function setUp() :void
{
parent::setUp();
$this->atestado = factory('App\Atestado')->state('Atestado da Situação Económica Incompleto')->create();
$this->user_user = factory('App\User')->state('Freguês')->create();
$this->role_user = Role::create(['name' => 'User']);
$this->user_user->assignRole($this->role_user);
$this->user_funcionario = factory('App\User')->state('Funcionário')->create();
$this->role_funcionario = Role::create(['name' => 'Funcionário']);
$this->user_funcionario->assignRole($this->role_funcionario);
$this->atestado->users()->attach([$this->user_user->id, $this->user_funcionario->id]);
}
/** @test */
public function um_atestado_notifica_todos_os_funcionarios_assim_que_o_estado_muda_de_incompleto_para_completo(){
$user_funcionario_ii = factory('App\User')->state('Funcionário')->create();
$user_funcionario_ii->assignRole($this->role_funcionario);
Notification::fake();
$this->actingAs($this->user_user)
->put(route('users.atestados.atestado-da-situacao-economica.updateStatus', $this->atestado->id),array(
'estado' => 'Completo'
))
->assertRedirect('atestado-da-situacao-economica');
$this->assertTrue($this->atestado->estado === 'Completo');
Notification::assertSentTo($this->user_funcionario, FuncionarioAtestadoCompleto::class);
Notification::assertSentTo($user_funcionario_ii, FuncionarioAtestadoCompleto::class);
/* AtestadosDaSituacaoEconomicaController */
public function updateStatus(Request $request, Atestado $atestado_da_situacao_economica){
$user = auth()->user();
if($user->hasRole('User')){
if($request->has('estado')){
switch($request->input('estado')){
case 'Completo':
$atestado_da_situacao_economica->fill(['estado' => 'Completo']);
$atestado_da_situacao_economica->save();
break;
default:
break;
}
}
}elseif($user->hasRole('Funcionário')){
}
return redirect(route('users.atestados.atestado-da-situacao-economica.index'));
}
Level 74
It would be much easier to understand your code if you wrote it in English ;)
However it's most likely that you need to refresh $this->atestado
So try this in your test
$this->assertTrue($this->atestado->fresh()->estado === 'Completo');
https://laravel.com/docs/7.x/eloquent-collections#method-fresh
Please or to participate in this conversation.