80 lines
2.6 KiB
PHP
80 lines
2.6 KiB
PHP
<?php
|
|
|
|
use App\Models\Dynamic;
|
|
use App\Models\Ledger;
|
|
use App\Models\User;
|
|
|
|
test('dynamic owners can view ledger creation form and create ledgers', function () {
|
|
$owner = User::factory()->create();
|
|
$dynamic = Dynamic::factory()->create();
|
|
$dynamic->participants()->attach($owner->id, ['role' => 'owner']);
|
|
|
|
$this->actingAs($owner);
|
|
|
|
// Can view form
|
|
$this->get(route('dynamics.ledgers.create', $dynamic->uuid))->assertOk();
|
|
|
|
// Can store ledger
|
|
$response = $this->post(route('dynamics.ledgers.store', $dynamic->uuid), [
|
|
'name' => 'Chores Ledger',
|
|
'rules' => 'Do the tasks.',
|
|
'alignment' => 'positive',
|
|
]);
|
|
|
|
$response->assertSessionHasNoErrors();
|
|
$response->assertRedirect(route('dynamics.show', $dynamic->uuid));
|
|
|
|
$this->assertDatabaseHas('ledgers', [
|
|
'dynamic_id' => $dynamic->id,
|
|
'name' => 'Chores Ledger',
|
|
'alignment' => 'positive',
|
|
]);
|
|
});
|
|
|
|
test('non-owners cannot view ledger creation form or store ledgers', function () {
|
|
$owner = User::factory()->create();
|
|
$participant = User::factory()->create();
|
|
$dynamic = Dynamic::factory()->create();
|
|
$dynamic->participants()->attach($owner->id, ['role' => 'owner']);
|
|
$dynamic->participants()->attach($participant->id, ['role' => 'participant']);
|
|
|
|
$this->actingAs($participant);
|
|
|
|
// Cannot view form
|
|
$this->get(route('dynamics.ledgers.create', $dynamic->uuid))->assertStatus(403);
|
|
|
|
// Cannot store ledger
|
|
$response = $this->post(route('dynamics.ledgers.store', $dynamic->uuid), [
|
|
'name' => 'Illegal Ledger',
|
|
'rules' => 'This should fail.',
|
|
'alignment' => 'positive',
|
|
]);
|
|
|
|
$response->assertStatus(403);
|
|
$this->assertDatabaseMissing('ledgers', [
|
|
'name' => 'Illegal Ledger',
|
|
]);
|
|
});
|
|
|
|
test('owner can edit a ledger', function () {
|
|
$owner = User::factory()->create();
|
|
$dynamic = Dynamic::factory()->create();
|
|
$dynamic->participants()->attach($owner->id, ['role' => 'owner']);
|
|
$ledger = Ledger::factory()->create(['dynamic_id' => $dynamic->id]);
|
|
|
|
$this->actingAs($owner);
|
|
|
|
$response = $this->put(route('dynamics.ledgers.update', [$dynamic->uuid, $ledger->uuid]), [
|
|
'name' => 'Updated Ledger Name',
|
|
'rules' => 'Updated rules.',
|
|
'alignment' => 'negative',
|
|
]);
|
|
|
|
$response->assertRedirect(route('dynamics.ledgers.show', [$dynamic->uuid, $ledger->uuid]));
|
|
$ledger->refresh();
|
|
|
|
expect($ledger->name)->toBe('Updated Ledger Name');
|
|
expect($ledger->rules)->toBe('Updated rules.');
|
|
expect($ledger->alignment)->toBe('negative');
|
|
});
|