From a1ccaba32a4492986ce100b55463c6feeaa339e0 Mon Sep 17 00:00:00 2001 From: aslan Date: Tue, 23 Apr 2024 14:23:21 +0300 Subject: [PATCH] add feedback and status resources --- .../Controllers/admin/FeedbackController.php | 49 ++++++ .../admin/FeedbackStatusController.php | 55 +++++++ .../Requests/admin/StoreFeedbackRequest.php | 22 +++ .../admin/StoreFeedbackStatusRequest.php | 20 +++ .../Requests/admin/UpdateFeedbackRequest.php | 22 +++ .../admin/UpdateFeedbackStatusRequest.php | 20 +++ app/Models/Feedback.php | 25 +++ app/Models/FeedbackStatus.php | 23 +++ database/factories/FeedbackFactory.php | 18 +++ database/factories/FeedbackStatusFactory.php | 15 ++ ..._120816_create_feedback_statuses_table.php | 28 ++++ ...024_04_22_120817_create_feedback_table.php | 30 ++++ database/seeders/DatabaseSeeder.php | 5 + database/seeders/FeedbackSeeder.php | 26 ++++ database/seeders/FeedbackStatusSeeder.php | 22 +++ resources/views/admin/feedback/edit.blade.php | 56 +++++++ .../views/admin/feedback/index.blade.php | 35 +++++ .../admin/feedback_statuses/create.blade.php | 36 +++++ .../admin/feedback_statuses/edit.blade.php | 36 +++++ .../admin/feedback_statuses/index.blade.php | 36 +++++ .../views/layouts/admin_layout.blade.php | 14 +- routes/admin.php | 5 + routes/pages.php | 144 +++++++++--------- tests/Feature/admin/FeedbackStatusTest.php | 92 +++++++++++ tests/Feature/admin/FeedbackTest.php | 75 +++++++++ .../Feature/admin/{catalog => }/NewsTest.php | 5 +- 26 files changed, 834 insertions(+), 80 deletions(-) create mode 100644 app/Http/Controllers/admin/FeedbackController.php create mode 100644 app/Http/Controllers/admin/FeedbackStatusController.php create mode 100644 app/Http/Requests/admin/StoreFeedbackRequest.php create mode 100644 app/Http/Requests/admin/StoreFeedbackStatusRequest.php create mode 100644 app/Http/Requests/admin/UpdateFeedbackRequest.php create mode 100644 app/Http/Requests/admin/UpdateFeedbackStatusRequest.php create mode 100644 app/Models/Feedback.php create mode 100644 app/Models/FeedbackStatus.php create mode 100644 database/factories/FeedbackFactory.php create mode 100644 database/factories/FeedbackStatusFactory.php create mode 100644 database/migrations/2024_04_22_120816_create_feedback_statuses_table.php create mode 100644 database/migrations/2024_04_22_120817_create_feedback_table.php create mode 100644 database/seeders/FeedbackSeeder.php create mode 100644 database/seeders/FeedbackStatusSeeder.php create mode 100644 resources/views/admin/feedback/edit.blade.php create mode 100644 resources/views/admin/feedback/index.blade.php create mode 100644 resources/views/admin/feedback_statuses/create.blade.php create mode 100644 resources/views/admin/feedback_statuses/edit.blade.php create mode 100644 resources/views/admin/feedback_statuses/index.blade.php create mode 100644 tests/Feature/admin/FeedbackStatusTest.php create mode 100644 tests/Feature/admin/FeedbackTest.php rename tests/Feature/admin/{catalog => }/NewsTest.php (95%) diff --git a/app/Http/Controllers/admin/FeedbackController.php b/app/Http/Controllers/admin/FeedbackController.php new file mode 100644 index 0000000..f86a3cd --- /dev/null +++ b/app/Http/Controllers/admin/FeedbackController.php @@ -0,0 +1,49 @@ +validated(); + $feedback = new Feedback(); + + $feedback->contact = $validated['contact']; + $feedback->text = $validated['text']; + $feedback->status_id = $validated['status_id']; + $feedback->save(); + + return response()->json(["result" => "success"]); + } + + public function edit(Feedback $feedback) + { + $feedbackStatuses = FeedbackStatus::pluck('name', 'id'); + return view('admin.feedback.edit', compact('feedback', 'feedbackStatuses')); + } + + public function update(UpdateFeedbackRequest $request, Feedback $feedback) + { + $validated = $request->validated(); + + $feedback->contact = $validated['contact']; + $feedback->text = $validated['text']; + $feedback->status_id = $validated['status_id']; + $feedback->save(); + + return redirect()->route('feedback.index'); + } +} diff --git a/app/Http/Controllers/admin/FeedbackStatusController.php b/app/Http/Controllers/admin/FeedbackStatusController.php new file mode 100644 index 0000000..30b5bfc --- /dev/null +++ b/app/Http/Controllers/admin/FeedbackStatusController.php @@ -0,0 +1,55 @@ +validated(); + $feedbackStatus = new FeedbackStatus(); + $feedbackStatus->name = $validated['name']; + $feedbackStatus->save(); + + return redirect()->route('feedback_statuses.index'); + } + + public function edit(FeedbackStatus $feedbackStatus) + { + return view('admin.feedback_statuses.edit', compact('feedbackStatus')); + } + + public function update(UpdateFeedbackStatusRequest $request, FeedbackStatus $feedbackStatus) + { + $validated = $request->validated(); + $feedbackStatus->name = $validated['name']; + $feedbackStatus->save(); + + return redirect()->route('feedback_statuses.index'); + } + + public function destroy(FeedbackStatus $feedbackStatus) + { + if ($feedbackStatus->feedbacks()->exists()) { + return back(); + } + $feedbackStatus->delete(); + return redirect()->route('feedback_statuses.index'); + } +} diff --git a/app/Http/Requests/admin/StoreFeedbackRequest.php b/app/Http/Requests/admin/StoreFeedbackRequest.php new file mode 100644 index 0000000..4a87b35 --- /dev/null +++ b/app/Http/Requests/admin/StoreFeedbackRequest.php @@ -0,0 +1,22 @@ + 'required|string|max:255', + 'text' => 'string|nullable', + 'status_id' => 'required|numeric|exists:feedback_statuses,id', + ]; + } +} diff --git a/app/Http/Requests/admin/StoreFeedbackStatusRequest.php b/app/Http/Requests/admin/StoreFeedbackStatusRequest.php new file mode 100644 index 0000000..c3b4372 --- /dev/null +++ b/app/Http/Requests/admin/StoreFeedbackStatusRequest.php @@ -0,0 +1,20 @@ + 'required|string|max:255', + ]; + } +} diff --git a/app/Http/Requests/admin/UpdateFeedbackRequest.php b/app/Http/Requests/admin/UpdateFeedbackRequest.php new file mode 100644 index 0000000..edff568 --- /dev/null +++ b/app/Http/Requests/admin/UpdateFeedbackRequest.php @@ -0,0 +1,22 @@ + 'required|string|max:255', + 'text' => 'string|nullable', + 'status_id' => 'required|numeric|exists:feedback_statuses,id', + ]; + } +} diff --git a/app/Http/Requests/admin/UpdateFeedbackStatusRequest.php b/app/Http/Requests/admin/UpdateFeedbackStatusRequest.php new file mode 100644 index 0000000..ea936a1 --- /dev/null +++ b/app/Http/Requests/admin/UpdateFeedbackStatusRequest.php @@ -0,0 +1,20 @@ + 'required|string|max:255', + ]; + } +} diff --git a/app/Models/Feedback.php b/app/Models/Feedback.php new file mode 100644 index 0000000..067f639 --- /dev/null +++ b/app/Models/Feedback.php @@ -0,0 +1,25 @@ +belongsTo(FeedbackStatus::class); + } +} diff --git a/app/Models/FeedbackStatus.php b/app/Models/FeedbackStatus.php new file mode 100644 index 0000000..a49a44b --- /dev/null +++ b/app/Models/FeedbackStatus.php @@ -0,0 +1,23 @@ +hasMany('App\Models\Feedback', 'status_id'); + } +} diff --git a/database/factories/FeedbackFactory.php b/database/factories/FeedbackFactory.php new file mode 100644 index 0000000..f5ddc5a --- /dev/null +++ b/database/factories/FeedbackFactory.php @@ -0,0 +1,18 @@ + fake()->email(), + 'text' => fake()->text(), + 'status_id' => 1, + ]; + } +} diff --git a/database/factories/FeedbackStatusFactory.php b/database/factories/FeedbackStatusFactory.php new file mode 100644 index 0000000..995c3e4 --- /dev/null +++ b/database/factories/FeedbackStatusFactory.php @@ -0,0 +1,15 @@ + fake()->name(), + ]; + } +} diff --git a/database/migrations/2024_04_22_120816_create_feedback_statuses_table.php b/database/migrations/2024_04_22_120816_create_feedback_statuses_table.php new file mode 100644 index 0000000..3eaec1c --- /dev/null +++ b/database/migrations/2024_04_22_120816_create_feedback_statuses_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('name', 255); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('feedback_statuses'); + } +}; diff --git a/database/migrations/2024_04_22_120817_create_feedback_table.php b/database/migrations/2024_04_22_120817_create_feedback_table.php new file mode 100644 index 0000000..a6a0e20 --- /dev/null +++ b/database/migrations/2024_04_22_120817_create_feedback_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('contact', 255); + $table->text('text'); + $table->foreignId('status_id')->constrained('feedback_statuses'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('feedback'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index c5ca847..53f700c 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -36,5 +36,10 @@ class DatabaseSeeder extends Seeder AdmissionSeeder::class, DocumentSeeder::class, ]); + + $this->call([ + FeedbackStatusSeeder::class, + FeedbackSeeder::class, + ]); } } diff --git a/database/seeders/FeedbackSeeder.php b/database/seeders/FeedbackSeeder.php new file mode 100644 index 0000000..37c591f --- /dev/null +++ b/database/seeders/FeedbackSeeder.php @@ -0,0 +1,26 @@ +insert([ + [ + 'contact' => '79112223344', + 'text' => 'Мое новое обращение', + 'status_id' => 1, + ], + [ + 'contact' => 'example@example.com', + 'text' => 'Мое новое обращение', + 'status_id' => 1, + ], + ]); + } +} diff --git a/database/seeders/FeedbackStatusSeeder.php b/database/seeders/FeedbackStatusSeeder.php new file mode 100644 index 0000000..568ab07 --- /dev/null +++ b/database/seeders/FeedbackStatusSeeder.php @@ -0,0 +1,22 @@ +insert([ + [ + 'name' => 'создано', + ], + [ + 'name' => 'в работе', + ], + ]); + } +} diff --git a/resources/views/admin/feedback/edit.blade.php b/resources/views/admin/feedback/edit.blade.php new file mode 100644 index 0000000..fa14a31 --- /dev/null +++ b/resources/views/admin/feedback/edit.blade.php @@ -0,0 +1,56 @@ +@php use App\Helpers\PositionHelper; @endphp +@extends('layouts.admin_layout') +@section('content') + @auth() +
+
+

Изменить Статус обращения

+ {{ Form::open(['url' => route('feedback.update', $feedback), 'method' => 'PATCH', 'files'=>'true', 'class' => 'needs-validation', 'novalidate']) }} +
+ +
+ {{ Form::label('contact', 'Контакт', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.feedback.contact')]) }} +
+
+ {{ Form::text('contact', $feedback->contact, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.feedback.contact'), 'required', 'readonly' => ""]) }} +
+
+ @if ($errors->any()) + {{ $errors->first('contact') }} + @endif +
+ +
+ {{ Form::label('text', 'Текст', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.feedback.text')]) }} +
+
+ {{ Form::textarea('text', $feedback->text, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.feedback.text'), 'required', 'readonly' => ""]) }} +
+
+ @if ($errors->any()) + {{ $errors->first('text') }} + @endif +
+ +
+ {{ Form::label('status_id', 'Статус обращения', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.feedback.status_id')]) }} +
+
+ {{ Form::select('status_id', $feedbackStatuses, $feedback->status_id, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.feedback.status_id'), 'required']) }} +
+
+ @if ($errors->any()) + {{ $errors->first('text') }} + @endif +
+ +
+ {{ Form::submit('Изменить', ['class' => 'btn btn-primary']) }} +
+
+ {{ Form::close() }} +
+
+ @endauth + @include('layouts.bootstrap_validation') +@endsection diff --git a/resources/views/admin/feedback/index.blade.php b/resources/views/admin/feedback/index.blade.php new file mode 100644 index 0000000..696efd3 --- /dev/null +++ b/resources/views/admin/feedback/index.blade.php @@ -0,0 +1,35 @@ +@extends('layouts.admin_layout') +@section('content') +
+

Обр. связь

+
+
+ + + + + + + + + + + + @foreach($feedbacks as $feedback) + + + + + + + + @endforeach + +
КонтактТекстСтатусСозданоДействия
{{ $feedback->contact }}{{ $feedback->text }}{{ $feedback->status->name }}{{ $feedback->created_at }}редактировать +
+
+
+
+ +@endsection diff --git a/resources/views/admin/feedback_statuses/create.blade.php b/resources/views/admin/feedback_statuses/create.blade.php new file mode 100644 index 0000000..692aeae --- /dev/null +++ b/resources/views/admin/feedback_statuses/create.blade.php @@ -0,0 +1,36 @@ +@php use App\Helpers\PositionHelper; @endphp +@extends('layouts.admin_layout') +@section('content') + @auth() +
+
+

Создать Статус

+ {{ Form::open(['url' => route('feedback_statuses.store'), 'method' => 'POST', 'files'=>'true', 'class' => 'needs-validation', 'novalidate']) }} +
+ +
+ {{ Form::label('name', 'Название', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.name')]) }} + * +
+
+ {{ Form::text('name', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.name'), 'required']) }} +
+ Поле "Название" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('name') }} + @endif +
+ +
+ {{ Form::submit('Создать', ['class' => 'btn btn-primary']) }} +
+
+ {{ Form::close() }} +
+
+ @endauth + @include('layouts.bootstrap_validation') +@endsection diff --git a/resources/views/admin/feedback_statuses/edit.blade.php b/resources/views/admin/feedback_statuses/edit.blade.php new file mode 100644 index 0000000..343d028 --- /dev/null +++ b/resources/views/admin/feedback_statuses/edit.blade.php @@ -0,0 +1,36 @@ +@php use App\Helpers\PositionHelper; @endphp +@extends('layouts.admin_layout') +@section('content') + @auth() +
+
+

Изменить Новость

+ {{ Form::open(['url' => route('feedback_statuses.update', $feedbackStatus), 'method' => 'PATCH', 'files'=>'true', 'class' => 'needs-validation', 'novalidate']) }} +
+ +
+ {{ Form::label('name', 'Название', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.name')]) }} + * +
+
+ {{ Form::text('name', $feedbackStatus->name, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.name'), 'required']) }} +
+ Поле "Название" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('name') }} + @endif +
+ +
+ {{ Form::submit('Изменить', ['class' => 'btn btn-primary']) }} +
+
+ {{ Form::close() }} +
+
+ @endauth + @include('layouts.bootstrap_validation') +@endsection diff --git a/resources/views/admin/feedback_statuses/index.blade.php b/resources/views/admin/feedback_statuses/index.blade.php new file mode 100644 index 0000000..01be06e --- /dev/null +++ b/resources/views/admin/feedback_statuses/index.blade.php @@ -0,0 +1,36 @@ +@extends('layouts.admin_layout') +@section('content') +
+

Статусы

+
+ Создать Статус +
+
+ + + + + + + + + @foreach($feedbackStatuses as $status) + + + + + @endforeach + +
НазваниеДействия
{{ $status->name }}редактировать + + удалить + +
+
+
+
+ +@endsection diff --git a/resources/views/layouts/admin_layout.blade.php b/resources/views/layouts/admin_layout.blade.php index 56fe108..2a4d278 100644 --- a/resources/views/layouts/admin_layout.blade.php +++ b/resources/views/layouts/admin_layout.blade.php @@ -3,10 +3,13 @@ - - - - + @php + // phpcs:disable + echo ''; + echo ''; + echo ''; + // phpcs:enable + @endphp Панель администратора @@ -49,6 +52,7 @@
@yield('content')
diff --git a/routes/admin.php b/routes/admin.php index cd54653..fa4ff38 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -13,6 +13,8 @@ use App\Http\Controllers\admin\Catalog\DirectionController; use App\Http\Controllers\admin\Catalog\EducationalInstitutionController; use App\Http\Controllers\admin\Catalog\FacultyController; use App\Http\Controllers\admin\DocumentController; +use App\Http\Controllers\admin\FeedbackController; +use App\Http\Controllers\admin\FeedbackStatusController; use App\Http\Controllers\admin\UserController; use App\Http\Controllers\NewsController; use Rap2hpoutre\LaravelLogViewer\LogViewerController; @@ -68,6 +70,9 @@ Route::middleware(['auth', 'verified'])->prefix('admin')->group(function () { Route::resource('/direction_profiles', DirectionProfileController::class) ->scoped(['direction_profile' => 'slug']); + Route::resource('/feedback', FeedbackController::class)->only(['index', 'edit', 'update']); + Route::resource('/feedback_statuses', FeedbackStatusController::class); + Route::resources([ '/documents' => DocumentController::class, '/users' => UserController::class, diff --git a/routes/pages.php b/routes/pages.php index 41dfb92..5b3c0ad 100644 --- a/routes/pages.php +++ b/routes/pages.php @@ -1,5 +1,6 @@ name('inostran'); Route::get('/magistr', [PageController::class, 'magistr'])->name('magistr'); +Route::post('/feedback', [FeedbackController::class, 'store'])->name('feedback.store'); - - -Route::get('/course', function () { - return view('menu.course'); -})->name('course'); - -Route::get('/applicant', function () { - return view('menu.abitur'); -})->name('abitur'); - -Route::get('/for-foreign-applicants', function () { - return view('menu.inostrannym-abiturientam'); -})->name('inostrannym-abiturientam'); - -Route::get('/paid_edu', function () { - return view('menu.paid_edu'); -})->name('paid_edu'); - -Route::get('/olympiads-for-schoolchildren', function () { - return view('menu.olimpiady-dlya-shkolnikov'); -})->name('olimpiady-dlya-shkolnikov'); - -Route::get('/training courses', function () { - return view('menu.podgotovitelnye-kursy'); -})->name('podgotovitelnye-kursy'); +//Route::get('/course', function () { +// return view('menu.course'); +//})->name('course'); +// +//Route::get('/applicant', function () { +// return view('menu.abitur'); +//})->name('abitur'); +// +//Route::get('/for-foreign-applicants', function () { +// return view('menu.inostrannym-abiturientam'); +//})->name('inostrannym-abiturientam'); +// +//Route::get('/paid_edu', function () { +// return view('menu.paid_edu'); +//})->name('paid_edu'); +// +//Route::get('/olympiads-for-schoolchildren', function () { +// return view('menu.olimpiady-dlya-shkolnikov'); +//})->name('olimpiady-dlya-shkolnikov'); +// +//Route::get('/training courses', function () { +// return view('menu.podgotovitelnye-kursy'); +//})->name('podgotovitelnye-kursy'); Route::get('/reception-screens', [PageController::class, 'index'])->name('reception-screens'); -Route::get('/web-consultations', function () { - return view('menu.abitur.web-consultations'); -})->name('web-consultations'); - -Route::get('/specialty-magistracy', function () { - return view('menu.abitur.spetsialitet-magistratura'); -})->name('spetsialitet-magistratura'); - -Route::get('/college', function () { - return view('menu.abitur.kolledzh'); -})->name('kolledzh'); - -Route::get('/paid-educational-services', function () { - return view('menu.abitur.platnye-obrazovatelnye-uslugi'); -})->name('platnye-obrazovatelnye-uslugi'); - -Route::get('/residency', function () { - return view('menu.abitur.ordinatura'); -})->name('ordinatura'); - -Route::get('/traineeship', function () { - return view('menu.abitur.aspirantura'); -})->name('aspirantura'); - -Route::get('/video-materials-for-applicants', function () { - return view('menu.abitur.videomaterialy-dlya-postupayushchikh'); -})->name('videomaterialy-dlya-postupayushchikh'); - -Route::get('/international-activity', function () { - return view('menu.inostrannym-abiturientam.mezhdunarodnaya-deyatelnost'); -})->name('mezhdunarodnaya-deyatelnost'); - -Route::get('/general-information', function () { - return view('menu.inostrannym-abiturientam.obshchie-svedeniya'); -})->name('obshchie-svedeniya'); - -Route::get('/departments-list', function () { - return view('menu.inostrannym-abiturientam.kafedry'); -})->name('kafedry'); - -Route::get('/international-education-center', function () { - return view('menu.inostrannym-abiturientam.tsentr-mezhdunarodnogo-obrazovaniya'); -})->name('tsentr-mezhdunarodnogo-obrazovaniya'); - -Route::get('/academic-mobility-and-international-cooperation', function () { - return view('menu.inostrannym-abiturientam.akademicheskaya-mobilnost-i-mezhdunarodnoe-sotrudnichestvo'); -})->name('akademicheskaya-mobilnost-i-mezhdunarodnoe-sotrudnichestvo'); +//Route::get('/web-consultations', function () { +// return view('menu.abitur.web-consultations'); +//})->name('web-consultations'); +// +//Route::get('/specialty-magistracy', function () { +// return view('menu.abitur.spetsialitet-magistratura'); +//})->name('spetsialitet-magistratura'); +// +//Route::get('/college', function () { +// return view('menu.abitur.kolledzh'); +//})->name('kolledzh'); +// +//Route::get('/paid-educational-services', function () { +// return view('menu.abitur.platnye-obrazovatelnye-uslugi'); +//})->name('platnye-obrazovatelnye-uslugi'); +// +//Route::get('/residency', function () { +// return view('menu.abitur.ordinatura'); +//})->name('ordinatura'); +// +//Route::get('/traineeship', function () { +// return view('menu.abitur.aspirantura'); +//})->name('aspirantura'); +// +//Route::get('/video-materials-for-applicants', function () { +// return view('menu.abitur.videomaterialy-dlya-postupayushchikh'); +//})->name('videomaterialy-dlya-postupayushchikh'); +// +//Route::get('/international-activity', function () { +// return view('menu.inostrannym-abiturientam.mezhdunarodnaya-deyatelnost'); +//})->name('mezhdunarodnaya-deyatelnost'); +// +//Route::get('/general-information', function () { +// return view('menu.inostrannym-abiturientam.obshchie-svedeniya'); +//})->name('obshchie-svedeniya'); +// +//Route::get('/departments-list', function () { +// return view('menu.inostrannym-abiturientam.kafedry'); +//})->name('kafedry'); +// +//Route::get('/international-education-center', function () { +// return view('menu.inostrannym-abiturientam.tsentr-mezhdunarodnogo-obrazovaniya'); +//})->name('tsentr-mezhdunarodnogo-obrazovaniya'); +// +//Route::get('/academic-mobility-and-international-cooperation', function () { +// return view('menu.inostrannym-abiturientam.akademicheskaya-mobilnost-i-mezhdunarodnoe-sotrudnichestvo'); +//})->name('akademicheskaya-mobilnost-i-mezhdunarodnoe-sotrudnichestvo'); diff --git a/tests/Feature/admin/FeedbackStatusTest.php b/tests/Feature/admin/FeedbackStatusTest.php new file mode 100644 index 0000000..4c13598 --- /dev/null +++ b/tests/Feature/admin/FeedbackStatusTest.php @@ -0,0 +1,92 @@ +status = FeedbackStatus::factory()->create(); + $this->data = FeedbackStatus::factory()->make()->only([ + 'name', + ]); + + $this->user = User::factory()->create([ + 'name' => 'admin', + 'email' => 'test@example.com', + 'password' => 123456 + ]); + } + + public function testIndexFeedbackStatusPage(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->get(route('feedback_statuses.index')); + + $response->assertOk(); + } + + public function testCreateFeedbackStatusPage(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->get(route('feedback_statuses.create')); + + $response->assertOk(); + } + + public function testStoreFeedbackStatus(): void + { + $file = UploadedFile::fake()->create('fake.jpg', 100); + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->post(route('feedback_statuses.store'), $this->data); + + $response->assertRedirect(route('feedback_statuses.index')); + + $this->assertDatabaseHas('feedback_statuses', $this->data); + } + + public function testEditFeedbackStatusPage(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->get(route('feedback_statuses.edit', $this->status)); + + $response->assertOk(); + } + + public function testUpdateFeedbackStatus(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->patch(route('feedback_statuses.update', $this->status), $this->data); + + $response->assertRedirect(route('feedback_statuses.index')); + + $this->assertDatabaseHas('feedback_statuses', $this->data); + } + + public function testDestroyFeedbackStatus(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->delete(route('feedback_statuses.destroy', $this->status)); + + $response->assertRedirect(route('feedback_statuses.index')); + + $this->assertDatabaseMissing('feedback_statuses', $this->status->toArray()); + } +} diff --git a/tests/Feature/admin/FeedbackTest.php b/tests/Feature/admin/FeedbackTest.php new file mode 100644 index 0000000..671bbe0 --- /dev/null +++ b/tests/Feature/admin/FeedbackTest.php @@ -0,0 +1,75 @@ +feedbackStatus = FeedbackStatus::factory()->create(); + $this->feedback = Feedback::factory()->create(); + $this->data = Feedback::factory()->make()->only([ + 'contact', + 'text', + 'status_id', + ]); + + $this->user = User::factory()->create([ + 'name' => 'admin', + 'email' => 'test@example.com', + 'password' => 123456 + ]); + } + + public function testIndexFeedbacksPage(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->get(route('feedback.index')); + + $response->assertOk(); + } + + public function testStoreFeedback(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->post(route('feedback.store'), $this->data); + + $response->assertJson(["result" => "success"]); + + $this->assertDatabaseHas('feedback', $this->data); + } + + public function testEditFeedbackPage(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->get(route('feedback.edit', $this->feedback)); + + $response->assertOk(); + } + + public function testUpdateFeedback(): void + { + $response = $this->actingAs($this->user) + ->withSession(['banned' => false]) + ->patch(route('feedback.update', $this->feedback), $this->data); + + $response->assertRedirect(route('feedback.index')); + + $this->assertDatabaseHas('feedback', $this->data); + } +} diff --git a/tests/Feature/admin/catalog/NewsTest.php b/tests/Feature/admin/NewsTest.php similarity index 95% rename from tests/Feature/admin/catalog/NewsTest.php rename to tests/Feature/admin/NewsTest.php index c384b42..9cbc7d0 100644 --- a/tests/Feature/admin/catalog/NewsTest.php +++ b/tests/Feature/admin/NewsTest.php @@ -1,10 +1,7 @@