already tried with fresh() method does not change behavior...
Notifications populating database trough the browser but fails in test enviroment
Hi to all who might been reading this post. The title says it all i am starting a project where there are attestations and a single user of role "Funcionario as Staff" or "User" can change the status of an attestation. Therefor there is a controller method updateStatus witch allows users to change a the status of an attestation. The code is pretty raw but i supposed is understandable. So bellow i will put two view for "Funciocionario as Staff" and for "User" the one method in the controller witch allows "estado as status" changes and the test.
User View
@extends('layouts.app')
<?php
view()->share('pageTitle', __('Users'));
view()->share('hideSubHeader', true);
?>
@section('breadcrumbs')
{{-- Breadcrumbs::render('users.index') --}}
@endsection
@push('styles')
{{-- some styles --}}
@endpush
@section('content')
<form method="POST" action="{{ route('users.atestados.atestado-da-situacao-economica.updateStatus', $atestado_da_situacao_economica->id) }}">
@csrf
@method('PUT')
<select id="estado" name="estado">
<option class="line1" value="Incompleto">Incompleto</option>
<option class="line2" value="Completo">Completo<ooption>
</select>
<button type="submit">Submeter</button>
</form>
@endsection
@push('scripts')
<script src="{{ asset('js/bootstrap-select.js') }}"></script>
@endpush
´´´
Funcionario View
@extends('layouts.app')
@section('breadcrumbs') {{-- Breadcrumbs::render('users.index') --}} @endsection @push('styles') {{-- some style --}} @endpush
@section('content')
<form method="POST" action="{{ route('users.atestados.atestado-da-situacao-economica.update', $atestado_da_situacao_economica->id) }}">
@csrf
@method('PUT')
<select id="estado" name="estado">
<option class="line1" value="Válido">Válido</option>
<option class="line2" value="Inválido">Inválido</option>
</select>
<button type="submit">Submeter</button>
</form>
The updateStatus method inside AtestadoDaSituacaoEconomicaController
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();
$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')){
}
return redirect(route('users.atestados.atestado-da-situacao-economica.index'));
}
´´´
The Test
/** @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->atestado = $this->atestado->fresh();
$this->assertTrue($this->atestado->estado == 'Completo');
/*
$this->assertDatabaseHas('notifications', [
'type' => 'App\Notifications\FuncionarioAtestadoDaSituacaoEconomica',
'notifiable_type' => 'App\User',
'notifiable_id' => '2',
'data' => '{"data":"O fregu\u00eas deu o Atestado da Situa\u00e7\u00e3o Econ\u00f3mica como completo.","user_id":1}',
]);
*/
Notification::assertSentTo($this->user_funcionario, FuncionarioAtestadoDaSituacaoEconomica::class);
Notification::assertSentTo($user_funcionario_ii, FuncionarioAtestadoDaSituacaoEconomica::class);
}
´´´
The result:
The expected [App\Notifications\FuncionarioAtestadoDaSituacaoEconomica] notification was not sent. Failed asserting that false is true.
Expected Result:
Test passed
Please or to participate in this conversation.