From 347082bbc88cb4ae51b3acc65cd3ba026fef3cc0 Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode Date: Mon, 23 Mar 2026 17:32:30 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Refactor=20`Livewire`=20tests=20?= =?UTF-8?q?and=20logic=20to=20use=20`ProjectProposal`=20model=20directly.?= =?UTF-8?q?=20Add=20support=20for=20new=20fields,=20such=20as=20`accepted`?= =?UTF-8?q?=20and=20`sats=5Fpaid`,=20in=20`ProjectProposal`.=20Update=20tr?= =?UTF-8?q?anslations=20and=20improve=20test=20coverage.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Models/ProjectProposal.php | 3 ++ .../project-support/show.blade.php | 4 +- .../Association/ProjectSupportTest.php | 45 ++++++++++--------- .../Livewire/ProjectSupportEditTest.php | 4 +- 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/app/Models/ProjectProposal.php b/app/Models/ProjectProposal.php index f358e0b..ed75187 100644 --- a/app/Models/ProjectProposal.php +++ b/app/Models/ProjectProposal.php @@ -22,10 +22,13 @@ class ProjectProposal extends Model implements HasMedia /** @var list */ protected $fillable = [ + 'einundzwanzig_pleb_id', 'name', 'description', 'support_in_sats', 'website', + 'accepted', + 'sats_paid', ]; /** diff --git a/resources/views/livewire/association/project-support/show.blade.php b/resources/views/livewire/association/project-support/show.blade.php index 7819279..267bcfc 100644 --- a/resources/views/livewire/association/project-support/show.blade.php +++ b/resources/views/livewire/association/project-support/show.blade.php @@ -27,9 +27,9 @@ new class extends Component { #[Locked] public bool $ownVoteExists = false; - public function mount($projectProposal): void + public function mount(ProjectProposal $projectProposal): void { - $this->projectProposal = ProjectProposal::query()->where('slug', $projectProposal)->firstOrFail(); + $this->projectProposal = $projectProposal; if (NostrAuth::check()) { $this->currentPubkey = NostrAuth::pubkey(); $this->isAllowed = true; diff --git a/tests/Feature/Livewire/Association/ProjectSupportTest.php b/tests/Feature/Livewire/Association/ProjectSupportTest.php index 4bce6c8..76b8457 100644 --- a/tests/Feature/Livewire/Association/ProjectSupportTest.php +++ b/tests/Feature/Livewire/Association/ProjectSupportTest.php @@ -2,6 +2,7 @@ use App\Models\EinundzwanzigPleb; use App\Models\ProjectProposal; +use App\Models\Vote; use App\Support\NostrAuth; use Livewire\Livewire; @@ -130,7 +131,7 @@ it('renders project support edit component', function () { 'einundzwanzig_pleb_id' => $pleb->id, ]); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $project]) ->assertStatus(200); }); @@ -140,7 +141,7 @@ it('denies access to edit when not owner', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $project]) ->assertSet('isAllowed', false); }); @@ -152,7 +153,7 @@ it('grants access to edit when owner', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $project]) ->assertSet('isAllowed', true); }); @@ -165,7 +166,7 @@ it('can update project proposal', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $project]) ->set('form.name', 'New Name') ->set('form.description', 'Updated Description') ->set('form.support_in_sats', 21000) @@ -184,7 +185,7 @@ it('validates project proposal update', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $project]) ->set('form.name', '') ->call('update') ->assertHasErrors(['form.name']); @@ -194,14 +195,14 @@ it('validates project proposal update', function () { it('renders project support show component', function () { $project = ProjectProposal::factory()->create(); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->assertStatus(200); }); it('denies access to show when not authenticated', function () { $project = ProjectProposal::factory()->create(); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->assertSet('isAllowed', false); }); @@ -211,7 +212,7 @@ it('grants access to show when authenticated', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->assertSet('isAllowed', true); }); @@ -224,7 +225,7 @@ it('displays project details', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->assertSet('projectProposal.name', 'Test Project Name') ->assertSee('Test Project Name') ->assertSee('Test Project Description'); @@ -236,7 +237,7 @@ it('initializes currentPleb when authenticated', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->assertSet('currentPleb.id', $pleb->id); }); @@ -246,7 +247,7 @@ it('initializes ownVoteExists to false when no vote exists', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->assertSet('ownVoteExists', false) ->assertSee('Zustimmen') ->assertSee('Ablehnen'); @@ -255,7 +256,7 @@ it('initializes ownVoteExists to false when no vote exists', function () { it('initializes ownVoteExists to true when vote exists', function () { $pleb = EinundzwanzigPleb::factory()->create(); $project = ProjectProposal::factory()->create(); - \App\Models\Vote::create([ + Vote::create([ 'project_proposal_id' => $project->id, 'einundzwanzig_pleb_id' => $pleb->id, 'value' => true, @@ -263,7 +264,7 @@ it('initializes ownVoteExists to true when vote exists', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->assertSet('ownVoteExists', true) ->assertDontSee('Zustimmen') ->assertDontSee('Ablehnen') @@ -276,11 +277,11 @@ it('can handle approve vote', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->call('handleApprove') ->assertHasNoErrors(); - $vote = \App\Models\Vote::query() + $vote = Vote::query() ->where('project_proposal_id', $project->id) ->where('einundzwanzig_pleb_id', $pleb->id) ->first(); @@ -295,11 +296,11 @@ it('can handle not approve vote', function () { NostrAuth::login($pleb->pubkey); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->call('handleNotApprove') ->assertHasNoErrors(); - $vote = \App\Models\Vote::query() + $vote = Vote::query() ->where('project_proposal_id', $project->id) ->where('einundzwanzig_pleb_id', $pleb->id) ->first(); @@ -311,27 +312,27 @@ it('can handle not approve vote', function () { it('does not throw error when unauthenticated user calls handleApprove', function () { $project = ProjectProposal::factory()->create(); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->call('handleApprove') ->assertHasNoErrors(); - expect(\App\Models\Vote::where('project_proposal_id', $project->id)->exists())->toBeFalse(); + expect(Vote::where('project_proposal_id', $project->id)->exists())->toBeFalse(); }); it('does not throw error when unauthenticated user calls handleNotApprove', function () { $project = ProjectProposal::factory()->create(); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->call('handleNotApprove') ->assertHasNoErrors(); - expect(\App\Models\Vote::where('project_proposal_id', $project->id)->exists())->toBeFalse(); + expect(Vote::where('project_proposal_id', $project->id)->exists())->toBeFalse(); }); it('hides voting buttons from unauthenticated users', function () { $project = ProjectProposal::factory()->create(); - Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) + Livewire::test('association.project-support.show', ['projectProposal' => $project]) ->assertDontSee('Zustimmen') ->assertDontSee('Ablehnen'); }); diff --git a/tests/Feature/Livewire/ProjectSupportEditTest.php b/tests/Feature/Livewire/ProjectSupportEditTest.php index 588145b..7b0f59d 100644 --- a/tests/Feature/Livewire/ProjectSupportEditTest.php +++ b/tests/Feature/Livewire/ProjectSupportEditTest.php @@ -48,7 +48,7 @@ it('renders edit form for authorized project owners', function () { Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) ->assertStatus(200) - ->assertSee('Projektförderung bearbeiten') + ->assertSee('Projektförderungs-Antrag bearbeiten') ->assertSet('form.name', $this->project->name) ->assertSet('form.description', $this->project->description); }); @@ -58,7 +58,7 @@ it('renders edit form for board members', function () { Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) ->assertStatus(200) - ->assertSee('Projektförderung bearbeiten'); + ->assertSee('Projektförderungs-Antrag bearbeiten'); }); it('does not render edit form for unauthorized users', function () {