Skip to content

Commit 5893579

Browse files
committed
Prevent article deletion for sponsored articles
1 parent 433ba2c commit 5893579

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

app/Policies/ArticlePolicy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function update(User $user, Article $article): bool
2828

2929
public function delete(User $user, Article $article): bool
3030
{
31-
return $article->isAuthoredBy($user) || $user->isModerator() || $user->isAdmin();
31+
return ($article->isAuthoredBy($user) && ! $article->isSponsored()) || $user->isModerator() || $user->isAdmin();
3232
}
3333

3434
public function approve(User $user, Article $article): bool

tests/Feature/ArticleTest.php

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@
345345
Article::factory()->create([
346346
'author_id' => $user->id(),
347347
'slug' => 'my-first-article',
348+
'is_sponsored' => false,
348349
]);
349350

350351
$this->loginAs($user);
@@ -363,6 +364,20 @@
363364
->assertForbidden();
364365
});
365366

367+
test('users cannot delete an article that is sponsored', function () {
368+
$user = $this->createUser();
369+
Article::factory()->create([
370+
'author_id' => $user->id(),
371+
'slug' => 'my-first-article',
372+
'is_sponsored' => true,
373+
]);
374+
375+
$this->loginAs($user);
376+
377+
$this->delete('/articles/my-first-article')
378+
->assertForbidden();
379+
});
380+
366381
test('canonical urls are rendered', function () {
367382
Article::factory()->create(['slug' => 'my-first-article', 'submitted_at' => now(), 'approved_at' => now()]);
368383

@@ -560,4 +575,4 @@
560575
$this->get("/articles/{$article->slug()}")
561576
->assertSee('My First Article')
562577
->assertSee('10 views');
563-
});
578+
});

tests/Integration/Jobs/DeleteArticleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414
$this->dispatch(new DeleteArticle($article));
1515

1616
$this->assertDatabaseMissing('articles', ['id' => $article->id()]);
17-
});
17+
});

0 commit comments

Comments
 (0)