🔧 Refactor Livewire tests and logic to use ProjectProposal model directly. Add support for new fields, such as accepted and sats_paid, in ProjectProposal. Update translations and improve test coverage.

This commit is contained in:
HolgerHatGarKeineNode
2026-03-23 17:32:30 +00:00
parent ddd2bf2b4b
commit 347082bbc8
4 changed files with 30 additions and 26 deletions

View File

@@ -22,10 +22,13 @@ class ProjectProposal extends Model implements HasMedia
/** @var list<string> */ /** @var list<string> */
protected $fillable = [ protected $fillable = [
'einundzwanzig_pleb_id',
'name', 'name',
'description', 'description',
'support_in_sats', 'support_in_sats',
'website', 'website',
'accepted',
'sats_paid',
]; ];
/** /**

View File

@@ -27,9 +27,9 @@ new class extends Component {
#[Locked] #[Locked]
public bool $ownVoteExists = false; 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()) { if (NostrAuth::check()) {
$this->currentPubkey = NostrAuth::pubkey(); $this->currentPubkey = NostrAuth::pubkey();
$this->isAllowed = true; $this->isAllowed = true;

View File

@@ -2,6 +2,7 @@
use App\Models\EinundzwanzigPleb; use App\Models\EinundzwanzigPleb;
use App\Models\ProjectProposal; use App\Models\ProjectProposal;
use App\Models\Vote;
use App\Support\NostrAuth; use App\Support\NostrAuth;
use Livewire\Livewire; use Livewire\Livewire;
@@ -130,7 +131,7 @@ it('renders project support edit component', function () {
'einundzwanzig_pleb_id' => $pleb->id, '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); ->assertStatus(200);
}); });
@@ -140,7 +141,7 @@ it('denies access to edit when not owner', function () {
NostrAuth::login($pleb->pubkey); 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); ->assertSet('isAllowed', false);
}); });
@@ -152,7 +153,7 @@ it('grants access to edit when owner', function () {
NostrAuth::login($pleb->pubkey); 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); ->assertSet('isAllowed', true);
}); });
@@ -165,7 +166,7 @@ it('can update project proposal', function () {
NostrAuth::login($pleb->pubkey); 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.name', 'New Name')
->set('form.description', 'Updated Description') ->set('form.description', 'Updated Description')
->set('form.support_in_sats', 21000) ->set('form.support_in_sats', 21000)
@@ -184,7 +185,7 @@ it('validates project proposal update', function () {
NostrAuth::login($pleb->pubkey); 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', '') ->set('form.name', '')
->call('update') ->call('update')
->assertHasErrors(['form.name']); ->assertHasErrors(['form.name']);
@@ -194,14 +195,14 @@ it('validates project proposal update', function () {
it('renders project support show component', function () { it('renders project support show component', function () {
$project = ProjectProposal::factory()->create(); $project = ProjectProposal::factory()->create();
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->assertStatus(200); ->assertStatus(200);
}); });
it('denies access to show when not authenticated', function () { it('denies access to show when not authenticated', function () {
$project = ProjectProposal::factory()->create(); $project = ProjectProposal::factory()->create();
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->assertSet('isAllowed', false); ->assertSet('isAllowed', false);
}); });
@@ -211,7 +212,7 @@ it('grants access to show when authenticated', function () {
NostrAuth::login($pleb->pubkey); NostrAuth::login($pleb->pubkey);
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->assertSet('isAllowed', true); ->assertSet('isAllowed', true);
}); });
@@ -224,7 +225,7 @@ it('displays project details', function () {
NostrAuth::login($pleb->pubkey); 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') ->assertSet('projectProposal.name', 'Test Project Name')
->assertSee('Test Project Name') ->assertSee('Test Project Name')
->assertSee('Test Project Description'); ->assertSee('Test Project Description');
@@ -236,7 +237,7 @@ it('initializes currentPleb when authenticated', function () {
NostrAuth::login($pleb->pubkey); 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); ->assertSet('currentPleb.id', $pleb->id);
}); });
@@ -246,7 +247,7 @@ it('initializes ownVoteExists to false when no vote exists', function () {
NostrAuth::login($pleb->pubkey); NostrAuth::login($pleb->pubkey);
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->assertSet('ownVoteExists', false) ->assertSet('ownVoteExists', false)
->assertSee('Zustimmen') ->assertSee('Zustimmen')
->assertSee('Ablehnen'); ->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 () { it('initializes ownVoteExists to true when vote exists', function () {
$pleb = EinundzwanzigPleb::factory()->create(); $pleb = EinundzwanzigPleb::factory()->create();
$project = ProjectProposal::factory()->create(); $project = ProjectProposal::factory()->create();
\App\Models\Vote::create([ Vote::create([
'project_proposal_id' => $project->id, 'project_proposal_id' => $project->id,
'einundzwanzig_pleb_id' => $pleb->id, 'einundzwanzig_pleb_id' => $pleb->id,
'value' => true, 'value' => true,
@@ -263,7 +264,7 @@ it('initializes ownVoteExists to true when vote exists', function () {
NostrAuth::login($pleb->pubkey); NostrAuth::login($pleb->pubkey);
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->assertSet('ownVoteExists', true) ->assertSet('ownVoteExists', true)
->assertDontSee('Zustimmen') ->assertDontSee('Zustimmen')
->assertDontSee('Ablehnen') ->assertDontSee('Ablehnen')
@@ -276,11 +277,11 @@ it('can handle approve vote', function () {
NostrAuth::login($pleb->pubkey); NostrAuth::login($pleb->pubkey);
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->call('handleApprove') ->call('handleApprove')
->assertHasNoErrors(); ->assertHasNoErrors();
$vote = \App\Models\Vote::query() $vote = Vote::query()
->where('project_proposal_id', $project->id) ->where('project_proposal_id', $project->id)
->where('einundzwanzig_pleb_id', $pleb->id) ->where('einundzwanzig_pleb_id', $pleb->id)
->first(); ->first();
@@ -295,11 +296,11 @@ it('can handle not approve vote', function () {
NostrAuth::login($pleb->pubkey); NostrAuth::login($pleb->pubkey);
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->call('handleNotApprove') ->call('handleNotApprove')
->assertHasNoErrors(); ->assertHasNoErrors();
$vote = \App\Models\Vote::query() $vote = Vote::query()
->where('project_proposal_id', $project->id) ->where('project_proposal_id', $project->id)
->where('einundzwanzig_pleb_id', $pleb->id) ->where('einundzwanzig_pleb_id', $pleb->id)
->first(); ->first();
@@ -311,27 +312,27 @@ it('can handle not approve vote', function () {
it('does not throw error when unauthenticated user calls handleApprove', function () { it('does not throw error when unauthenticated user calls handleApprove', function () {
$project = ProjectProposal::factory()->create(); $project = ProjectProposal::factory()->create();
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->call('handleApprove') ->call('handleApprove')
->assertHasNoErrors(); ->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 () { it('does not throw error when unauthenticated user calls handleNotApprove', function () {
$project = ProjectProposal::factory()->create(); $project = ProjectProposal::factory()->create();
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->call('handleNotApprove') ->call('handleNotApprove')
->assertHasNoErrors(); ->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 () { it('hides voting buttons from unauthenticated users', function () {
$project = ProjectProposal::factory()->create(); $project = ProjectProposal::factory()->create();
Livewire::test('association.project-support.show', ['projectProposal' => $project->slug]) Livewire::test('association.project-support.show', ['projectProposal' => $project])
->assertDontSee('Zustimmen') ->assertDontSee('Zustimmen')
->assertDontSee('Ablehnen'); ->assertDontSee('Ablehnen');
}); });

View File

@@ -48,7 +48,7 @@ it('renders edit form for authorized project owners', function () {
Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project]) Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project])
->assertStatus(200) ->assertStatus(200)
->assertSee('Projektförderung bearbeiten') ->assertSee('Projektförderungs-Antrag bearbeiten')
->assertSet('form.name', $this->project->name) ->assertSet('form.name', $this->project->name)
->assertSet('form.description', $this->project->description); ->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]) Livewire::test('association.project-support.form.edit', ['projectProposal' => $this->project])
->assertStatus(200) ->assertStatus(200)
->assertSee('Projektförderung bearbeiten'); ->assertSee('Projektförderungs-Antrag bearbeiten');
}); });
it('does not render edit form for unauthorized users', function () { it('does not render edit form for unauthorized users', function () {