Merge pull request #14808 from snipe/fixes/small_redirect_tweaks

Small UI tweaks and redirects when asset model is invalid
This commit is contained in:
snipe 2024-05-31 20:46:07 +01:00 committed by GitHub
commit 46be0f6610
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 235 additions and 76 deletions

View file

@ -12,7 +12,6 @@ use App\Models\CheckoutAcceptance;
use App\Models\LicenseSeat;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Log;
@ -47,6 +46,10 @@ class AssetCheckinController extends Controller
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.already_checked_in'));
}
if (!$asset->model) {
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
}
return view('hardware/checkin', compact('asset'))->with('statusLabel_list', Helper::statusLabelList())->with('backto', $backto)->with('table_name', 'Assets');
}
@ -72,6 +75,11 @@ class AssetCheckinController extends Controller
if (is_null($target = $asset->assignedTo)) {
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.already_checked_in'));
}
if (!$asset->model) {
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
}
$this->authorize('checkin', $asset);
if ($asset->assignedType() == Asset::USER) {

View file

@ -34,12 +34,17 @@ class AssetCheckoutController extends Controller
$this->authorize('checkout', $asset);
if (!$asset->model) {
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
}
if ($asset->availableForCheckout()) {
return view('hardware/checkout', compact('asset'))
->with('statusLabel_list', Helper::deployableStatusLabelList())
->with('table_name', 'Assets');
}
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkout.not_available'));
}
@ -62,6 +67,11 @@ class AssetCheckoutController extends Controller
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkout.not_available'));
}
$this->authorize('checkout', $asset);
if (!$asset->model) {
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
}
$admin = Auth::user();
$target = $this->determineCheckoutTarget();

View file

@ -15,8 +15,8 @@ return [
'delete_confirm' => 'Are you sure you want to delete this asset?',
'edit' => 'Edit Asset',
'model_deleted' => 'This Assets model has been deleted. You must restore the model before you can restore the Asset.',
'model_invalid' => 'The Model of this Asset is invalid.',
'model_invalid_fix' => 'The Asset should be edited to correct this before attempting to check it in or out.',
'model_invalid' => 'This model for this asset is invalid.',
'model_invalid_fix' => 'The asset must be updated use a valid asset model this before attempting to check it in or out, or to audit it.',
'requestable' => 'Requestable',
'requested' => 'Requested',
'not_requestable' => 'Not Requestable',

View file

@ -18,7 +18,7 @@
<div class="row">
<!-- left column -->
<div class="col-md-7">
<div class="col-md-8 col-md-offset-2">
<div class="box box-default">
{{ Form::open([
@ -32,15 +32,28 @@
</div>
<div class="box-body">
{{csrf_field()}}
@if ($asset->model->name)
<!-- Asset name -->
<!-- Asset model -->
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
{{ Form::label('name', trans('admin/hardware/form.model'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-8">
<p class="form-control-static">{{ $asset->model->name }}</p>
<p class="form-control-static">
@if (($asset->model) && ($asset->model->name))
{{ $asset->model->name }}
@else
<span class="text-danger text-bold">
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
{{ trans('admin/hardware/general.model_invalid')}}
</span>
{{ trans('admin/hardware/general.model_invalid_fix')}}
<a href="{{ route('hardware.edit', $asset->id) }}">
<strong>{{ trans('admin/hardware/general.edit') }}</strong>
</a>
@endif
</p>
</div>
</div>
@endif
<!-- Asset Name -->
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
@ -114,7 +127,10 @@
</div> <!--/.box-body-->
<div class="box-footer">
<a class="btn btn-link" href="{{ URL::previous() }}"> {{ trans('button.cancel') }}</a>
<button type="submit" class="btn btn-success pull-right"><i class="fas fa-check icon-white" aria-hidden="true"></i> {{ trans('general.audit') }}</button>
<button type="submit" class="btn btn-success pull-right{{ (!$asset->model ? ' disabled' : '') }}"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'" disabled' : '') !!}>
<i class="fas fa-check icon-white" aria-hidden="true"></i>
{{ trans('general.audit') }}
</button>
</div>
</form>
</div>

View file

@ -16,50 +16,56 @@
</style>
<div class="row">
<div class="row"><!-- .row -->
<!-- left column -->
<div class="col-md-9">
<div class="box box-default">
<div class="box-header with-border">
<h2 class="box-title">{{ trans('admin/hardware/form.tag') }} {{ $asset->asset_tag }}</h2>
<div class="col-md-7 col-sm-11 col-xs-12 col-md-offset-2">
<div class="box box-default"><!-- .box-default -->
<div class="box-header with-border"><!-- .box-header -->
<h2 class="box-title">
{{ trans('admin/hardware/form.tag') }}
{{ $asset->asset_tag }}
</h2>
</div><!-- /.box-header -->
<div class="box-body">
<div class="col-md-12">
@if ($backto=='user')
<div class="box-body"><!-- .box-body -->
<div class="col-md-12"><!-- .col-md-12 -->
@if ($backto == 'user')
<form class="form-horizontal" method="post" action="{{ route('hardware.checkin.store', array('assetId'=> $asset->id, 'backto'=>'user')) }}" autocomplete="off">
@else
<form class="form-horizontal" method="post"
action="{{ route('hardware.checkin.store', array('assetId'=> $asset->id, 'backto'=>'user')) }}"
autocomplete="off">
@else
<form class="form-horizontal" method="post"
action="{{ route('hardware.checkin.store', array('assetId'=> $asset->id)) }}" autocomplete="off">
@endif
action="{{ route('hardware.checkin.store', array('assetId'=> $asset->id)) }}" autocomplete="off">
@endif
{{csrf_field()}}
<!-- AssetModel name -->
<div class="form-group">
{{ Form::label('model', trans('admin/hardware/form.model'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-8">
<p class="form-control-static">
@if (($asset->model) && ($asset->model->name))
{{ $asset->model->name }}
@else
<span class="text-danger text-bold">
<i class="fas fa-exclamation-triangle"></i>{{ trans('admin/hardware/general.model_invalid')}}
<a href="{{ route('hardware.edit', $asset->id) }}"></a> {{ trans('admin/hardware/general.model_invalid_fix')}}</span>
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
{{ trans('admin/hardware/general.model_invalid')}}
</span>
{{ trans('admin/hardware/general.model_invalid_fix')}}
<a href="{{ route('hardware.edit', $asset->id) }}">
<strong>{{ trans('admin/hardware/general.edit') }}</strong>
</a>
@endif
</p>
</div>
</div>
<!-- Asset Name -->
<div class="form-group {{ $errors->has('name') ? 'error' : '' }}">
{{ Form::label('name', trans('admin/hardware/form.name'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-8">
<input class="form-control" type="text" name="name" aria-label="name" id="name"
value="{{ old('name', $asset->name) }}"/>
<input class="form-control" type="text" name="name" aria-label="name" id="name" value="{{ old('name', $asset->name) }}"/>
{!! $errors->first('name', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
@ -67,7 +73,7 @@
<!-- Status -->
<div class="form-group {{ $errors->has('status_id') ? 'error' : '' }}">
{{ Form::label('status_id', trans('admin/hardware/form.status'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-7 required">
<div class="col-md-8 required">
{{ Form::select('status_id', $statusLabel_list, '', array('class'=>'select2', 'style'=>'width:100%','id' =>'modal-statuslabel_types', 'aria-label'=>'status_id')) }}
{!! $errors->first('status_id', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
@ -77,7 +83,9 @@
<!-- Checkout/Checkin Date -->
<div class="form-group{{ $errors->has('checkin_at') ? ' has-error' : '' }}">
{{ Form::label('checkin_at', trans('admin/hardware/form.checkin_date'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-8">
<div class="input-group col-md-5 required">
<div class="input-group date" data-provide="datepicker" data-date-format="yyyy-mm-dd" data-autoclose="true">
@ -89,25 +97,29 @@
</div>
</div>
<!-- Note -->
<div class="form-group {{ $errors->has('note') ? 'error' : '' }}">
{{ Form::label('note', trans('admin/hardware/form.notes'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-8">
<textarea class="col-md-6 form-control" id="note"
name="note">{{ old('note', $asset->note) }}</textarea>
<textarea class="col-md-6 form-control" id="note" name="note">{{ old('note', $asset->note) }}</textarea>
{!! $errors->first('note', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
@include ('partials.forms.redirect_submit_options', ['route' => 'hardware.index', 'table_name' => $table_name, 'type'=> $asset->model->name, 'checkin' => true])
</form>
</div> <!--/.col-md-12-->
</div> <!--/.box-body-->
</div> <!--/.box-body-->
</div> <!--/.box-body-->
</div> <!--/.box.box-default-->
@include ('partials.forms.redirect_submit_options',
[
'route' => 'hardware.index',
'table_name' => $table_name,
'type'=> ($asset->model ? $asset->model->name : trans('general.asset_model')),
'checkin' => true
])
</form>
</div>
</div>
</div>
@stop

View file

@ -36,7 +36,8 @@
</div>
</div>
@endif
<!-- AssetModel name -->
<!-- AssetModel name -->
<div class="form-group">
{{ Form::label('model', trans('admin/hardware/form.model'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-8">
@ -45,8 +46,14 @@
{{ $asset->model->name }}
@else
<span class="text-danger text-bold">
<i class="fas fa-exclamation-triangle"></i>{{ trans('admin/hardware/general.model_invalid')}}
<a href="{{ route('hardware.edit', $asset->id) }}"></a> {{ trans('admin/hardware/general.model_invalid_fix')}}</span>
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
{{ trans('admin/hardware/general.model_invalid')}}
</span>
{{ trans('admin/hardware/general.model_invalid_fix')}}
<a href="{{ route('hardware.edit', $asset->id) }}">
<strong>{{ trans('admin/hardware/general.edit') }}</strong>
</a>
@endif
</p>
</div>
@ -141,7 +148,13 @@
@endif
</div> <!--/.box-body-->
@include ('partials.forms.redirect_submit_options', ['route' => 'hardware.index', 'table_name' => $table_name, 'type'=> $asset->model->name, 'checkin' => false])
@include ('partials.forms.redirect_submit_options',
[
'route' => 'hardware.index',
'table_name' => $table_name,
'type'=> ($asset->model ? $asset->model->name : trans('general.asset_model')),
'checkin' => false
])
</form>
</div>
</div> <!--/.col-md-7-->

View file

@ -867,7 +867,7 @@
'id' => 'bulkForm']) }}
<input type="hidden" name="bulk_actions" value="labels" />
<input type="hidden" name="ids[{{$asset->id}}]" value="{{ $asset->id }}" />
<button class="btn btn-sm btn-default" id="bulkEdit" ><i class="fas fa-barcode" aria-hidden="true"></i> {{ trans_choice('button.generate_labels', 1) }}</button>
<button class="btn btn-sm btn-default" id="bulkEdit"{{ (!$asset->model ? ' disabled' : '') }}{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid').'"' : '') !!}><i class="fas fa-barcode" aria-hidden="true"></i> {{ trans_choice('button.generate_labels', 1) }}</button>
{{ Form::close() }}
@ -895,17 +895,21 @@
@if (($asset->assigned_to != '') && ($asset->deleted_at==''))
@can('checkin', \App\Models\Asset::class)
<div class="col-md-12">
<a href="{{ route('hardware.checkin.create', $asset->id) }}" style="width: 100%;" class="btn btn-sm btn-primary hidden-print">
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
<a role="button" href="{{ route('hardware.checkin.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
{{ trans('admin/hardware/general.checkin') }}
</a>
</span>
</div>
@endcan
@elseif (($asset->assigned_to == '') && ($asset->deleted_at==''))
@can('checkout', \App\Models\Asset::class)
<div class="col-md-12" style="padding-top: 5px;">
<a href="{{ route('hardware.checkout.create', $asset->id) }}" style="width: 100%;" class="btn btn-sm btn-primary hidden-print">
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
<a href="{{ route('hardware.checkout.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
{{ trans('admin/hardware/general.checkout') }}
</a>
</span>
</div>
@endcan
@endif
@ -915,7 +919,7 @@
@can('update', $asset)
@if ($asset->deleted_at=='')
<div class="col-md-12" style="padding-top: 5px;">
<a href="{{ route('hardware.edit', $asset->id) }}" style="width: 100%;" class="btn btn-sm btn-primary hidden-print">
<a href="{{ route('hardware.edit', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print">
{{ trans('admin/hardware/general.edit') }}
</a>
</div>
@ -924,7 +928,7 @@
@can('create', $asset)
<div class="col-md-12" style="padding-top: 5px;">
<a href="{{ route('clone/hardware', $asset->id) }}" style="width: 100%;" class="btn btn-sm btn-primary hidden-print">
<a href="{{ route('clone/hardware', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print">
{{ trans('admin/hardware/general.clone') }}
</a>
</div>
@ -932,21 +936,24 @@
@can('audit', \App\Models\Asset::class)
<div class="col-md-12" style="padding-top: 5px;">
<a href="{{ route('asset.audit.create', $asset->id) }}" style="width: 100%;" class="btn btn-sm btn-primary hidden-print">
{{ trans('general.audit') }}
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
<a href="{{ route('asset.audit.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
{{ trans('general.audit') }}
</a>
</span>
</div>
@endcan
@can('delete', $asset)
<div class="col-md-12" style="padding-top: 30px; padding-bottom: 30px;">
@if ($asset->deleted_at=='')
<button class="btn btn-sm btn-block btn-danger delete-asset" data-toggle="modal" data-title="{{ trans('general.delete') }}" data-content="{{ trans('general.sure_to_delete_var', ['item' => $asset->asset_tag]) }}" data-target="#dataConfirmModal">{{ trans('general.delete') }} </button>
<button class="btn btn-sm btn-block btn-danger delete-asset" data-toggle="modal" data-title="{{ trans('general.delete') }}" data-content="{{ trans('general.sure_to_delete_var', ['item' => $asset->asset_tag]) }}" data-target="#dataConfirmModal">{{ trans('general.delete') }}
</button>
<span class="sr-only">{{ trans('general.delete') }}</span>
@else
<form method="POST" action="{{ route('restore/hardware', ['assetId' => $asset->id]) }}">
@csrf
<button class="btn btn-sm btn-warning col-md-12">{{ trans('general.restore') }}</button>
<button class="btn btn-sm btn-warning btn-block">{{ trans('general.restore') }}</button>
</form>
@endif
</div>

View file

@ -11,7 +11,7 @@
@endif
@if ($message = Session::get('status'))
@if ($message = session()->get('status'))
<div class="col-md-12">
<div class="alert alert-success fade in">
<button type="button" class="close" data-dismiss="alert">&times;</button>
@ -23,7 +23,7 @@
@endif
@if ($message = Session::get('success'))
@if ($message = session()->get('success'))
<div class="col-md-12">
<div class="alert alert-success fade in">
<button type="button" class="close" data-dismiss="alert">&times;</button>
@ -35,7 +35,7 @@
@endif
@if ($message = Session::get('success-unescaped'))
@if ($message = session()->get('success-unescaped'))
<div class="col-md-12">
<div class="alert alert-success fade in">
<button type="button" class="close" data-dismiss="alert">&times;</button>
@ -47,7 +47,7 @@
@endif
@if ($assets = Session::get('assets'))
@if ($assets = session()->get('assets'))
@foreach ($assets as $asset)
<div class="col-md-12">
<div class="alert alert-info fade in">
@ -62,9 +62,9 @@
<li><b>{{ trans('general.asset_name') }} </b> {{ $asset->model->name }}</li>
@endisset
<li><b>{{ trans('general.asset_tag') }}</b> {{ $asset->asset_tag }}</li>
@isset ($asset->notes)
<li><b>{{ trans('general.notes') }}</b> {{ $asset->notes }}</li>
@endisset
@isset ($asset->notes)
<li><b>{{ trans('general.notes') }}</b> {{ $asset->notes }}</li>
@endisset
</ul>
</div>
@ -73,7 +73,7 @@
@endif
@if ($consumables = Session::get('consumables'))
@if ($consumables = session()->get('consumables'))
@foreach ($consumables as $consumable)
<div class="col-md-12">
<div class="alert alert-info fade in">
@ -87,7 +87,7 @@
@endif
@if ($accessories = Session::get('accessories'))
@if ($accessories = session()->get('accessories'))
@foreach ($accessories as $accessory)
<div class="col-md-12">
<div class="alert alert-info fade in">
@ -101,7 +101,7 @@
@endif
@if ($message = Session::get('error'))
@if ($message = session()->get('error'))
<div class="col-md-12">
<div class="alert alert alert-danger fade in">
<button type="button" class="close" data-dismiss="alert">&times;</button>
@ -113,7 +113,7 @@
@endif
@if ($messages = Session::get('error_messages'))
@if ($messages = session()->get('error_messages'))
@foreach ($messages as $message)
<div class="col-md-12">
<div class="alert alert alert-danger fade in">
@ -127,7 +127,7 @@
@endif
@if ($messages = Session::get('bulk_asset_errors'))
@if ($messages = session()->get('bulk_asset_errors'))
<div class="col-md-12">
<div class="alert alert alert-danger fade in">
<button type="button" class="close" data-dismiss="alert">&times;</button>
@ -146,7 +146,7 @@
@endif
@if ($message = Session::get('warning'))
@if ($message = session()->get('warning'))
<div class="col-md-12">
<div class="alert alert-warning fade in">
<button type="button" class="close" data-dismiss="alert">&times;</button>
@ -158,7 +158,7 @@
@endif
@if ($message = Session::get('info'))
@if ($message = session()->get('info'))
<div class="col-md-12">
<div class="alert alert-info fade in">
<button type="button" class="close" data-dismiss="alert">&times;</button>

View file

@ -1,11 +1,36 @@
<!-- begin redirect submit options -->
<div class="box-footer">
<a class="btn btn-link" href="{{ route($route) }}">{{ trans('button.cancel') }}</a>
<button type="submit" class="btn btn-primary pull-right"><i class="fas fa-check icon-white" aria-hidden="true"></i> {{$checkin ? trans('general.checkin') : trans('general.checkout') }}</button>
<div class="btn-group pull-right" style="margin-right:5px;">
<select class="redirect-options form-control" name="redirect_option">
<option {{(Session::get('redirect_option')=="0" || (Session::get('redirect_option')=="2" && $checkin)) ? 'selected' : ''}} value="0">{{trans('admin/hardware/form.redirect_to_all', ['type' => $table_name])}}</option>
<option {{Session::get('redirect_option')=="1" ? 'selected' : ''}} value="1">{{trans('admin/hardware/form.redirect_to_type', ['type' => $type])}}</option>
<option {{Session::get('redirect_option')=="2" && !$checkin ? 'selected' : ''}}{{$checkin ? 'disabled hidden' : ''}} value="2" >{{trans('admin/hardware/form.redirect_to_checked_out_to')}}</option>
</select>
<div class="row">
<div class="col-md-3">
<a class="btn btn-link" href="{{ route($route) }}">{{ trans('button.cancel') }}</a>
</div>
</div> <!-- /.box-->
<div class="col-md-9 text-right">
<div class="btn-group text-left">
<select class="redirect-options form-control select2" name="redirect_option" style="min-width: 200px"{{ (!$asset->model ? ' disabled' : '') }}>
<option {{ (Session::get('redirect_option')=="0" || (Session::get('redirect_option')=="2" && $checkin)) ? 'selected' : '' }} value="0">
{{ trans('admin/hardware/form.redirect_to_all', ['type' => $table_name]) }}
</option>
<option {{ Session::get('redirect_option')=="1" ? 'selected' : ''}} value="1">
{{ trans('admin/hardware/form.redirect_to_type', ['type' => $type]) }}
</option>
<option {{ Session::get('redirect_option')=="2" && !$checkin ? 'selected' : ''}}{{ $checkin ? 'disabled hidden' : '' }} value="2" >
{{ trans('admin/hardware/form.redirect_to_checked_out_to') }}
</option>
</select>
<button type="submit" class="btn btn-primary pull-right{{ (!$asset->model ? ' disabled' : '') }}" style="margin-left:5px; border-radius: 3px;"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.edit').'" disabled' : '') !!}>
<i class="fas fa-check icon-white" aria-hidden="true"></i>
{{ $checkin ? trans('general.checkin') : trans('general.checkout') }}
</button>
</div><!-- /.btn-group -->
</div><!-- /.col-md-9 -->
</div><!-- /.row -->
</div> <!-- /.box-footer -->
<!-- end redirect submit options -->

View file

@ -28,6 +28,16 @@ class AssetCheckinTest extends TestCase
{
$this->actingAs(User::factory()->checkinAssets()->create())
->post(route('hardware.checkin.store', ['assetId' => Asset::factory()->create()->id]))
->assertStatus(302)
->assertSessionHas('error')
->assertRedirect(route('hardware.index'));
}
public function testCannotStoreAssetCheckinThatIsNotCheckedOut()
{
$this->actingAs(User::factory()->checkinAssets()->create())
->get(route('hardware.checkin.store', ['assetId' => Asset::factory()->create()->id]))
->assertStatus(302)
->assertSessionHas('error')
->assertRedirect(route('hardware.index'));
}
@ -159,4 +169,31 @@ class AssetCheckinTest extends TestCase
return $event->action_date === '2023-01-02' && $event->note === 'hello';
}, 1);
}
public function testAssetCheckinPageIsRedirectedIfModelIsInvalid()
{
$asset = Asset::factory()->assignedToUser()->create();
$asset->model_id = 0;
$asset->forceSave();
$this->actingAs(User::factory()->admin()->create())
->get(route('hardware.checkin.create', ['assetId' => $asset->id]))
->assertStatus(302)
->assertSessionHas('error')
->assertRedirect(route('hardware.show',['hardware' => $asset->id]));
}
public function testAssetCheckinPagePostIsRedirectedIfModelIsInvalid()
{
$asset = Asset::factory()->assignedToUser()->create();
$asset->model_id = 0;
$asset->forceSave();
$this->actingAs(User::factory()->admin()->create())
->post(route('hardware.checkin.store', ['assetId' => $asset->id]))
->assertStatus(302)
->assertSessionHas('error')
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
}
}

View file

@ -236,4 +236,35 @@ class AssetCheckoutTest extends TestCase
$this->assertTrue(Carbon::parse($asset->last_checkout)->diffInSeconds(now()) < 2);
}
public function testAssetCheckoutPageIsRedirectedIfModelIsInvalid()
{
$asset = Asset::factory()->create();
$asset->model_id = 0;
$asset->forceSave();
$this->actingAs(User::factory()->admin()->create())
->get(route('hardware.checkout.create', ['assetId' => $asset->id]))
->assertStatus(302)
->assertSessionHas('error')
->assertRedirect(route('hardware.show',['hardware' => $asset->id]));
}
public function testAssetCheckoutPagePostIsRedirectedIfModelIsInvalid()
{
$asset = Asset::factory()->create();
$asset->model_id = 0;
$asset->forceSave();
$user = User::factory()->create();
$this->actingAs(User::factory()->admin()->create())
->post(route('hardware.checkout.store', $asset), [
'checkout_to_type' => 'user',
'assigned_user' => $user->id,
])
->assertStatus(302)
->assertSessionHas('error')
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
}
}