From bdb69df52d534f76e97226845ffc8a78dd995d24 Mon Sep 17 00:00:00 2001
From: Jonny Barnes
Date: Tue, 11 Apr 2023 16:16:05 +0100
Subject: [PATCH] Switch bio to be stored in database
---
app/Http/Controllers/Admin/BioController.php | 32 +++++++++
app/Http/Controllers/FrontPageController.php | 4 ++
app/Models/Bio.php | 11 +++
database/factories/BioFactory.php | 23 +++++++
.../2023_04_11_115837_create_bios_table.php | 28 ++++++++
database/seeders/BioSeeder.php | 17 +++++
resources/views/admin/bio/show.blade.php | 19 ++++++
resources/views/admin/welcome.blade.php | 5 ++
resources/views/front-page.blade.php | 2 -
resources/views/master.blade.php | 8 ++-
resources/views/templates/bio.blade.php | 32 ---------
routes/web.php | 7 ++
tests/Feature/Admin/BioTest.php | 67 +++++++++++++++++++
tests/Unit/NotesTest.php | 2 +-
14 files changed, 219 insertions(+), 38 deletions(-)
create mode 100644 app/Http/Controllers/Admin/BioController.php
create mode 100644 app/Models/Bio.php
create mode 100644 database/factories/BioFactory.php
create mode 100644 database/migrations/2023_04_11_115837_create_bios_table.php
create mode 100644 database/seeders/BioSeeder.php
create mode 100644 resources/views/admin/bio/show.blade.php
delete mode 100644 resources/views/templates/bio.blade.php
create mode 100644 tests/Feature/Admin/BioTest.php
diff --git a/app/Http/Controllers/Admin/BioController.php b/app/Http/Controllers/Admin/BioController.php
new file mode 100644
index 00000000..c760e12c
--- /dev/null
+++ b/app/Http/Controllers/Admin/BioController.php
@@ -0,0 +1,32 @@
+ $bio,
+ ]);
+ }
+
+ public function update(Request $request): RedirectResponse
+ {
+ $bio = Bio::firstOrNew();
+ $bio->content = $request->input('content');
+ $bio->save();
+
+ return redirect()->route('admin.bio.show');
+ }
+}
diff --git a/app/Http/Controllers/FrontPageController.php b/app/Http/Controllers/FrontPageController.php
index 9d37c9db..52ff2adf 100644
--- a/app/Http/Controllers/FrontPageController.php
+++ b/app/Http/Controllers/FrontPageController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Models\Article;
+use App\Models\Bio;
use App\Models\Bookmark;
use App\Models\Like;
use App\Models\Note;
@@ -34,8 +35,11 @@ class FrontPageController extends Controller
->sortByDesc('updated_at')
->paginate(10);
+ $bio = Bio::first()?->content;
+
return view('front-page', [
'items' => $items,
+ 'bio' => $bio,
]);
}
}
diff --git a/app/Models/Bio.php b/app/Models/Bio.php
new file mode 100644
index 00000000..b9a0e78b
--- /dev/null
+++ b/app/Models/Bio.php
@@ -0,0 +1,11 @@
+
+ */
+class BioFactory extends Factory
+{
+ /**
+ * Define the model's default state.
+ *
+ * @return array
+ */
+ public function definition(): array
+ {
+ return [
+ 'content' => $this->faker->paragraph,
+ ];
+ }
+}
diff --git a/database/migrations/2023_04_11_115837_create_bios_table.php b/database/migrations/2023_04_11_115837_create_bios_table.php
new file mode 100644
index 00000000..4f26ec18
--- /dev/null
+++ b/database/migrations/2023_04_11_115837_create_bios_table.php
@@ -0,0 +1,28 @@
+id();
+ $table->text('content');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('bios');
+ }
+};
diff --git a/database/seeders/BioSeeder.php b/database/seeders/BioSeeder.php
new file mode 100644
index 00000000..093d0609
--- /dev/null
+++ b/database/seeders/BioSeeder.php
@@ -0,0 +1,17 @@
+create();
+ }
+}
diff --git a/resources/views/admin/bio/show.blade.php b/resources/views/admin/bio/show.blade.php
new file mode 100644
index 00000000..e8bc5532
--- /dev/null
+++ b/resources/views/admin/bio/show.blade.php
@@ -0,0 +1,19 @@
+@extends('master')
+
+@section('title')Edit Bio « Admin CP « @stop
+
+@section('content')
+ Edit bio
+
+@stop
diff --git a/resources/views/admin/welcome.blade.php b/resources/views/admin/welcome.blade.php
index 46ac746f..4ca4c4d0 100644
--- a/resources/views/admin/welcome.blade.php
+++ b/resources/views/admin/welcome.blade.php
@@ -46,4 +46,9 @@
You can either create new syndication targets,
or edit them.
+
+ Bio
+
+ Edit your bio .
+
@stop
diff --git a/resources/views/front-page.blade.php b/resources/views/front-page.blade.php
index a3f0bc8c..44eca1d4 100644
--- a/resources/views/front-page.blade.php
+++ b/resources/views/front-page.blade.php
@@ -27,6 +27,4 @@
{{ $items->links('templates.pagination') }}
-
- @include('templates.bio')
@stop
diff --git a/resources/views/master.blade.php b/resources/views/master.blade.php
index 7ab40938..df94fe72 100644
--- a/resources/views/master.blade.php
+++ b/resources/views/master.blade.php
@@ -43,9 +43,11 @@
-@yield('content')
-@section('bio')
-@show
+ @yield('content')
+
+ @isset($bio)
+ {!! $bio !!}
+ @endisset
diff --git a/resources/views/templates/bio.blade.php b/resources/views/templates/bio.blade.php
deleted file mode 100644
index 2f709288..00000000
--- a/resources/views/templates/bio.blade.php
+++ /dev/null
@@ -1,32 +0,0 @@
-@section('bio')
-
-@stop
diff --git a/routes/web.php b/routes/web.php
index 2a536f10..81976c0d 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -12,6 +12,7 @@
*/
use App\Http\Controllers\Admin\ArticlesController as AdminArticlesController;
+use App\Http\Controllers\Admin\BioController;
use App\Http\Controllers\Admin\ClientsController;
use App\Http\Controllers\Admin\ContactsController as AdminContactsController;
use App\Http\Controllers\Admin\HomeController;
@@ -133,6 +134,12 @@ Route::group(['domain' => config('url.longurl')], function () {
Route::put('/{syndicationTarget}', [SyndicationTargetsController::class, 'update']);
Route::delete('/{syndicationTarget}', [SyndicationTargetsController::class, 'destroy']);
});
+
+ // Bio
+ Route::group(['prefix' => 'bio'], function () {
+ Route::get('/', [BioController::class, 'show'])->name('admin.bio.show');
+ Route::put('/', [BioController::class, 'update']);
+ });
});
// Blog pages using ArticlesController
diff --git a/tests/Feature/Admin/BioTest.php b/tests/Feature/Admin/BioTest.php
new file mode 100644
index 00000000..7f1328ea
--- /dev/null
+++ b/tests/Feature/Admin/BioTest.php
@@ -0,0 +1,67 @@
+make();
+
+ $response = $this->actingAs($user)
+ ->get('/admin/bio');
+ $response->assertSeeText('Edit bio');
+ }
+
+ /** @test */
+ public function adminCanCreateBio(): void
+ {
+ $user = User::factory()->make();
+
+ $this->actingAs($user)
+ ->post('/admin/bio', [
+ '_method' => 'PUT',
+ 'content' => 'Bio content',
+ ]);
+ $this->assertDatabaseHas('bios', ['content' => 'Bio content']);
+ }
+
+ /** @test */
+ public function adminCanLoadExistingBio(): void
+ {
+ $user = User::factory()->make();
+ $bio = Bio::factory()->create([
+ 'content' => 'This is my bio. It uses HTML .',
+ ]);
+
+ $response = $this->actingAs($user)
+ ->get('/admin/bio');
+ $response->assertSeeText('This is my bio. It uses HTML .');
+ }
+
+ /** @test */
+ public function adminCanEditBio(): void
+ {
+ $user = User::factory()->make();
+ $bio = Bio::factory()->create();
+
+ $this->actingAs($user)
+ ->post('/admin/bio', [
+ '_method' => 'PUT',
+ 'content' => 'This bio has been edited',
+ ]);
+ $this->assertDatabaseHas('bios', [
+ 'content' => 'This bio has been edited',
+ ]);
+ }
+}
diff --git a/tests/Unit/NotesTest.php b/tests/Unit/NotesTest.php
index cda66fc2..0a8d0725 100644
--- a/tests/Unit/NotesTest.php
+++ b/tests/Unit/NotesTest.php
@@ -412,7 +412,7 @@ class NotesTest extends TestCase
'in_reply_to' => 'https://twitter.com/someRando/status/933662564587855877',
]);
- $this->assertSame($tempContent, $note->twitter);
+ $this->assertEquals($tempContent, $note->twitter);
}
/** @test */