From ddd2bf2b4b65ac24066c54eebd51c257647cc106 Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode Date: Mon, 23 Mar 2026 17:27:30 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Adjust=20`Livewire`=20tests=20to?= =?UTF-8?q?=20pass=20`ProjectProposal`=20model=20directly,=20refine=20edit?= =?UTF-8?q?=20form=20behavior,=20and=20test=20admin-specific=20functionali?= =?UTF-8?q?ty.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Livewire/ProjectSupportEditTest.php | 59 ++++++++++++++----- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/tests/Feature/Livewire/ProjectSupportEditTest.php b/tests/Feature/Livewire/ProjectSupportEditTest.php index facd2df..588145b 100644 --- a/tests/Feature/Livewire/ProjectSupportEditTest.php +++ b/tests/Feature/Livewire/ProjectSupportEditTest.php @@ -22,16 +22,17 @@ beforeEach(function () { 'event_id' => 'test_event_'.Str::random(40), ]); - $this->project = ProjectProposal::factory()->create([ + $this->project = ProjectProposal::query()->create([ 'einundzwanzig_pleb_id' => $this->pleb->id, 'name' => 'Original Project', 'description' => 'Original Description', 'support_in_sats' => 21000, - 'website' => 'https://example.com', + 'website' => 'https://original.example.com', + 'accepted' => false, + 'sats_paid' => 0, ]); // Get board member pubkeys from config - $boardPubkeys = config('einundzwanzig.config.current_board', []); $this->boardMember = EinundzwanzigPleb::query()->create([ 'pubkey' => 'board_pubkey_'.Str::random(20), 'npub' => 'board_npub_'.Str::random(20), @@ -45,8 +46,9 @@ beforeEach(function () { it('renders edit form for authorized project owners', function () { NostrAuth::login($this->pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) ->assertStatus(200) + ->assertSee('Projektförderung bearbeiten') ->assertSet('form.name', $this->project->name) ->assertSet('form.description', $this->project->description); }); @@ -54,8 +56,9 @@ it('renders edit form for authorized project owners', function () { it('renders edit form for board members', function () { NostrAuth::login($this->boardMember->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project->slug]) - ->assertStatus(200); + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) + ->assertStatus(200) + ->assertSee('Projektförderung bearbeiten'); }); it('does not render edit form for unauthorized users', function () { @@ -67,14 +70,14 @@ it('does not render edit form for unauthorized users', function () { NostrAuth::login($unauthorizedPleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) ->assertSet('isAllowed', false); }); it('validates required name field', function () { NostrAuth::login($this->pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) ->set('form.name', '') ->set('form.description', 'Test description') ->call('update') @@ -84,7 +87,7 @@ it('validates required name field', function () { it('validates required description field', function () { NostrAuth::login($this->pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) ->set('form.name', 'Test Project') ->set('form.description', '') ->call('update') @@ -94,11 +97,9 @@ it('validates required description field', function () { it('updates project proposal successfully', function () { NostrAuth::login($this->pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) ->set('form.name', 'Updated Name') ->set('form.description', 'Updated Description') - ->set('form.support_in_sats', 42000) - ->set('form.website', 'https://updated.com') ->call('update') ->assertHasNoErrors(); @@ -107,14 +108,42 @@ it('updates project proposal successfully', function () { expect($this->project->description)->toBe('Updated Description'); }); +it('saves accepted and sats_paid when admin updates', function () { + NostrAuth::login($this->boardMember->pubkey); + + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) + ->assertSet('isAdmin', true) + ->set('form.accepted', true) + ->set('form.sats_paid', 50000) + ->call('update') + ->assertHasNoErrors(); + + $this->project->refresh(); + expect($this->project->accepted)->toBeTrue(); + expect($this->project->sats_paid)->toBe(50000); +}); + +it('does not allow non-admin to change accepted and sats_paid', function () { + NostrAuth::login($this->pleb->pubkey); + + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) + ->assertSet('isAdmin', false) + ->set('form.accepted', true) + ->set('form.sats_paid', 99999) + ->call('update') + ->assertHasNoErrors(); + + $this->project->refresh(); + expect($this->project->accepted)->toBeFalse(); + expect($this->project->sats_paid)->toBe(0); +}); + it('disables update button during save', function () { NostrAuth::login($this->pleb->pubkey); - Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project->slug]) + Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) ->set('form.name', 'Test') ->set('form.description', 'Test') - ->set('form.support_in_sats', 21000) - ->set('form.website', 'https://example.com') ->call('update') ->assertSeeHtml('wire:loading'); });