From 6e097acf883eb3a4d589afa8a03394a0a9075b18 Mon Sep 17 00:00:00 2001 From: myrmidex Date: Tue, 28 Apr 2026 18:48:20 +0200 Subject: [PATCH] 6 - Add admin instances page listing url and last poll --- .../Controllers/Admin/InstancesController.php | 18 ++++++ resources/views/admin/index.blade.php | 22 ++++++++ resources/views/layouts/layout.blade.php | 8 +++ routes/web.php | 3 + .../Feature/Admin/InstancesAdminPageTest.php | 56 +++++++++++++++++++ 5 files changed, 107 insertions(+) create mode 100644 app/Http/Controllers/Admin/InstancesController.php create mode 100644 resources/views/admin/index.blade.php create mode 100644 resources/views/layouts/layout.blade.php create mode 100644 tests/Feature/Admin/InstancesAdminPageTest.php diff --git a/app/Http/Controllers/Admin/InstancesController.php b/app/Http/Controllers/Admin/InstancesController.php new file mode 100644 index 0000000..4cbdf88 --- /dev/null +++ b/app/Http/Controllers/Admin/InstancesController.php @@ -0,0 +1,18 @@ +get(); + + return view('admin.index', ['instances' => $instances]); + } +} diff --git a/resources/views/admin/index.blade.php b/resources/views/admin/index.blade.php new file mode 100644 index 0000000..05d00bf --- /dev/null +++ b/resources/views/admin/index.blade.php @@ -0,0 +1,22 @@ + +
+

Instances

+ + + + + + + + + + @foreach($instances as $instance) + + + + + @endforeach + +
InstanceLast polled at
{{ $instance->url }}{{ $instance->last_polled_at }}
+
+
diff --git a/resources/views/layouts/layout.blade.php b/resources/views/layouts/layout.blade.php new file mode 100644 index 0000000..5179da6 --- /dev/null +++ b/resources/views/layouts/layout.blade.php @@ -0,0 +1,8 @@ + + + {{ $title ?? 'Trove' }} + + + {{ $slot }} + + diff --git a/routes/web.php b/routes/web.php index 6199875..6b7b768 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use App\Http\Controllers\Admin\InstancesController; use Illuminate\Support\Facades\Route; Route::get('/', function () { @@ -11,3 +12,5 @@ Route::view('/submit', 'urls.submit'); Route::view('/bot', 'bot'); + +Route::get('/admin/instances', [InstancesController::class, 'index'])->name('admin.instances'); diff --git a/tests/Feature/Admin/InstancesAdminPageTest.php b/tests/Feature/Admin/InstancesAdminPageTest.php new file mode 100644 index 0000000..88c7670 --- /dev/null +++ b/tests/Feature/Admin/InstancesAdminPageTest.php @@ -0,0 +1,56 @@ +get('/admin/instances'); + + $response->assertStatus(200); + } + + // ------------------------------------------------------------------------- + // Test 4 — admin instances page lists each instance's URL and last_polled_at + // ------------------------------------------------------------------------- + + public function test_admin_instances_page_shows_each_instance_url_and_last_polled_at(): void + { + $mastodon = Instance::factory() + ->type(InstanceType::Mastodon) + ->enabled() + ->create([ + 'url' => 'https://mastodon.social', + 'last_polled_at' => '2024-06-01 12:00:00', + ]); + + $lemmy = Instance::factory() + ->type(InstanceType::Lemmy) + ->enabled() + ->create([ + 'url' => 'https://lemmy.world', + 'last_polled_at' => '2024-06-01 13:00:00', + ]); + + $response = $this->get('/admin/instances'); + + $response->assertSee($mastodon->url); + $response->assertSee($lemmy->url); + $response->assertSee($mastodon->last_polled_at->toDateString()); + $response->assertSee($lemmy->last_polled_at->toDateString()); + } +}