group(function () {
Route::get('/roles', [RoleController::class, 'index'])->name('roles.index');
+ Route::get('/roles/create', [RoleController::class, 'create'])->name('roles.create');
+ Route::post('/roles', [RoleController::class, 'store'])->name('roles.store');
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
diff --git a/tests/Feature/StoreRoleTest.php b/tests/Feature/StoreRoleTest.php
new file mode 100644
index 0000000..c6b0994
--- /dev/null
+++ b/tests/Feature/StoreRoleTest.php
@@ -0,0 +1,52 @@
+get('/roles/create')->assertRedirect('/login');
+});
+
+test('authenticated users can access the create role page', function () {
+ $this->actingAs(User::factory()->create())
+ ->get('/roles/create')
+ ->assertOk()
+ ->assertViewIs('roles.create');
+});
+
+test('authenticated users can create a role', function () {
+ $this->actingAs(User::factory()->create())
+ ->post('/roles', ['name' => 'Manager', 'description' => 'Manages things'])
+ ->assertRedirect(route('roles.index'))
+ ->assertSessionHas('status', 'role-created');
+
+ $this->assertDatabaseHas('roles', ['name' => 'Manager', 'description' => 'Manages things']);
+});
+
+test('role name is required', function () {
+ $this->actingAs(User::factory()->create())
+ ->post('/roles', ['name' => '', 'description' => 'Some description'])
+ ->assertSessionHasErrors('name');
+});
+
+test('role name must be unique', function () {
+ Role::factory()->create(['name' => 'Admin']);
+
+ $this->actingAs(User::factory()->create())
+ ->post('/roles', ['name' => 'Admin'])
+ ->assertSessionHasErrors('name');
+});
+
+test('description is optional', function () {
+ $this->actingAs(User::factory()->create())
+ ->post('/roles', ['name' => 'Viewer'])
+ ->assertRedirect(route('roles.index'));
+
+ $this->assertDatabaseHas('roles', ['name' => 'Viewer', 'description' => null]);
+});
+
+test('guests cannot create a role', function () {
+ $this->post('/roles', ['name' => 'Admin'])->assertRedirect('/login');
+
+ $this->assertDatabaseMissing('roles', ['name' => 'Admin']);
+});