mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-nostr.git
synced 2026-04-01 04:18:41 +00:00
🔧 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:
@@ -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',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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 () {
|
||||||
|
|||||||
Reference in New Issue
Block a user