diff --git a/tests/Generators/Simple/ViewsGeneratorTest.php b/tests/Generators/Simple/ViewsGeneratorTest.php new file mode 100644 index 0000000..f504984 --- /dev/null +++ b/tests/Generators/Simple/ViewsGeneratorTest.php @@ -0,0 +1,188 @@ +artisan('make:crud-simple', ['name' => $this->model_name, '--no-interaction' => true]); + + $indexViewPath = resource_path("views/{$this->table_name}/index.blade.php"); + $this->assertFileExists($indexViewPath); + $indexViewContent = "@extends('layouts.app') + +@section('title', trans('{$this->lang_name}.list')) + +@section('content') +

+
+ @can('create', new {$this->full_model_name}) + {{ link_to_route('{$this->table_name}.index', trans('{$this->lang_name}.create'), ['action' => 'create'], ['class' => 'btn btn-success']) }} + @endcan +
+ {{ trans('{$this->lang_name}.list') }} + {{ trans('app.total') }} : {{ \${$this->collection_model_var_name}->total() }} {{ trans('{$this->lang_name}.{$this->lang_name}') }} +

+
+
+
+
+ {{ Form::open(['method' => 'get','class' => 'form-inline']) }} + {!! FormField::text('q', ['value' => request('q'), 'label' => trans('{$this->lang_name}.search'), 'class' => 'input-sm']) !!} + {{ Form::submit(trans('{$this->lang_name}.search'), ['class' => 'btn btn-sm']) }} + {{ link_to_route('{$this->table_name}.index', trans('app.reset')) }} + {{ Form::close() }} +
+ + + + + + + + + + + @foreach(\${$this->collection_model_var_name} as \$key => \${$this->single_model_var_name}) + + + + + + + @endforeach + +
{{ trans('app.table_no') }}{{ trans('{$this->lang_name}.name') }}{{ trans('{$this->lang_name}.description') }}{{ trans('app.action') }}
{{ \${$this->collection_model_var_name}->firstItem() + \$key }}{{ \${$this->single_model_var_name}->name }}{{ \${$this->single_model_var_name}->description }} + @can('update', \${$this->single_model_var_name}) + {!! link_to_route( + '{$this->table_name}.index', + trans('app.edit'), + ['action' => 'edit', 'id' => \${$this->single_model_var_name}->id] + Request::only('page', 'q'), + ['id' => 'edit-{$this->single_model_var_name}-' . \${$this->single_model_var_name}->id] + ) !!} | + @endcan + @can('delete', \${$this->single_model_var_name}) + {!! link_to_route( + '{$this->table_name}.index', + trans('app.delete'), + ['action' => 'delete', 'id' => \${$this->single_model_var_name}->id] + Request::only('page', 'q'), + ['id' => 'del-{$this->single_model_var_name}-' . \${$this->single_model_var_name}->id] + ) !!} + @endcan +
+
{{ \${$this->collection_model_var_name}->appends(Request::except('page'))->render() }}
+
+
+
+ @if(Request::has('action')) + @include('{$this->table_name}.forms') + @endif +
+
+@endsection +"; + $this->assertEquals($indexViewContent, file_get_contents($indexViewPath)); + } + + /** @test */ + public function it_creates_correct_forms_view_content() + { + $this->artisan('make:crud-simple', ['name' => $this->model_name, '--no-interaction' => true]); + + $formViewPath = resource_path("views/{$this->table_name}/forms.blade.php"); + $this->assertFileExists($formViewPath); + $formViewContent = "@if (Request::get('action') == 'create') +@can('create', new {$this->full_model_name}) + {!! Form::open(['route' => '{$this->table_name}.store']) !!} + {!! FormField::text('name', ['required' => true, 'label' => trans('{$this->lang_name}.name')]) !!} + {!! FormField::textarea('description', ['label' => trans('{$this->lang_name}.description')]) !!} + {!! Form::submit(trans('{$this->lang_name}.create'), ['class' => 'btn btn-success']) !!} + {{ link_to_route('{$this->table_name}.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }} + {!! Form::close() !!} +@endcan +@endif +@if (Request::get('action') == 'edit' && \$editable{$this->model_name}) +@can('update', \$editable{$this->model_name}) + {!! Form::model(\$editable{$this->model_name}, ['route' => ['{$this->table_name}.update', \$editable{$this->model_name}->id],'method' => 'patch']) !!} + {!! FormField::text('name', ['required' => true, 'label' => trans('{$this->lang_name}.name')]) !!} + {!! FormField::textarea('description', ['label' => trans('{$this->lang_name}.description')]) !!} + @if (request('q')) + {{ Form::hidden('q', request('q')) }} + @endif + @if (request('page')) + {{ Form::hidden('page', request('page')) }} + @endif + {!! Form::submit(trans('{$this->lang_name}.update'), ['class' => 'btn btn-success']) !!} + {{ link_to_route('{$this->table_name}.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }} + {!! Form::close() !!} +@endcan +@endif +@if (Request::get('action') == 'delete' && \$editable{$this->model_name}) +@can('delete', \$editable{$this->model_name}) +
+

{{ trans('{$this->lang_name}.delete') }}

+
+ +

{{ \$editable{$this->model_name}->name }}

+ +

{{ \$editable{$this->model_name}->description }}

+ {!! \$errors->first('{$this->lang_name}_id', ':message') !!} +
+
+
{{ trans('app.delete_confirm') }}
+
+ {!! FormField::delete( + ['route'=>['{$this->table_name}.destroy',\$editable{$this->model_name}->id]], + trans('app.delete_confirm_button'), + ['class'=>'btn btn-danger'], + [ + '{$this->lang_name}_id' => \$editable{$this->model_name}->id, + 'page' => request('page'), + 'q' => request('q'), + ] + ) !!} + {{ link_to_route('{$this->table_name}.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }} +
+
+@endcan +@endif +"; + $this->assertEquals($formViewContent, file_get_contents($formViewPath)); + } + + /** @test */ + public function it_not_gives_warning_message_if_default_layout_view_does_exists() + { + $defaultLayoutView = config('simple-crud.default_layout_view'); + $this->generateDefaultLayoutView($defaultLayoutView); + + $this->artisan('make:crud-simple', ['name' => $this->model_name, '--no-interaction' => true]); + + $this->assertNotRegExp("/{$defaultLayoutView} view does not exists./", app(Kernel::class)->output()); + } + + /** @test */ + public function it_gives_warning_message_if_default_layout_view_does_not_exists() + { + $this->artisan('make:crud-simple', ['name' => $this->model_name, '--no-interaction' => true]); + $defaultLayoutView = config('simple-crud.default_layout_view'); + + $this->assertRegExp("/{$defaultLayoutView} view does not exists./", app(Kernel::class)->output()); + } + + public function generateDefaultLayoutView($defaultLayoutView) + { + $dataViewPathArray = explode('.', $defaultLayoutView); + $fileName = array_pop($dataViewPathArray); + $defaultLayoutPath = resource_path('views/'.implode('/', $dataViewPathArray)); + + $files = app('Illuminate\Filesystem\Filesystem'); + $files->makeDirectory($defaultLayoutPath); + $files->put($defaultLayoutPath.'/'.$fileName.'.blade.php', ''); + } +}