Skip to content

Commit 13df8f2

Browse files
committed
test: add tests for article archiving and blog ordering
1 parent 92e96fe commit 13df8f2

3 files changed

Lines changed: 75 additions & 0 deletions

File tree

test/controllers/admin/articles_controller_test.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,24 @@ class Admin::ArticlesControllerTest < ActionDispatch::IntegrationTest
7878
end
7979
assert_redirected_to admin_articles_path
8080
end
81+
82+
test "archive" do
83+
assert_nil @article.archived_at
84+
patch archive_admin_article_path(@article)
85+
assert_redirected_to admin_article_path(@article)
86+
assert_not_nil @article.reload.archived_at
87+
end
88+
89+
test "unarchive" do
90+
@article.update!(archived_at: Time.current)
91+
patch unarchive_admin_article_path(@article)
92+
assert_redirected_to admin_article_path(@article)
93+
assert_nil @article.reload.archived_at
94+
end
95+
96+
test "index shows archived articles at the end" do
97+
articles(:martians_article).update!(archived_at: Time.current)
98+
get admin_articles_path
99+
assert_response :success
100+
end
81101
end

test/controllers/admin/blogs_controller_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,10 @@ class Admin::BlogsControllerTest < ActionDispatch::IntegrationTest
8686
blog = Blog.last
8787
assert_equal ["ruby", "rails", "web"], blog.tags
8888
end
89+
90+
test "index excludes archived articles from blog ordering" do
91+
articles(:martians_article).update!(archived_at: Time.current)
92+
get admin_blogs_path
93+
assert_response :success
94+
end
8995
end

test/models/article_test.rb

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,53 @@ class ArticleTest < ActiveSupport::TestCase
5151
assert_includes featured, articles(:featured_article)
5252
assert_not_includes featured, articles(:rails_performance)
5353
end
54+
55+
test "archived? returns true when archived_at is set" do
56+
article = articles(:rails_performance)
57+
assert_not article.archived?
58+
59+
article.archive!
60+
assert article.archived?
61+
end
62+
63+
test "archive! sets archived_at" do
64+
article = articles(:rails_performance)
65+
assert_nil article.archived_at
66+
67+
article.archive!
68+
assert_not_nil article.reload.archived_at
69+
end
70+
71+
test "unarchive! clears archived_at" do
72+
article = articles(:rails_performance)
73+
article.update!(archived_at: Time.current)
74+
75+
article.unarchive!
76+
assert_nil article.reload.archived_at
77+
end
78+
79+
test "archived scope returns only archived articles" do
80+
article = articles(:rails_performance)
81+
article.update!(archived_at: Time.current)
82+
83+
assert_includes Article.archived, article
84+
assert_not_includes Article.not_archived, article
85+
end
86+
87+
test "not_archived scope excludes archived articles" do
88+
article = articles(:rails_performance)
89+
assert_includes Article.not_archived, article
90+
91+
article.update!(archived_at: Time.current)
92+
assert_not_includes Article.not_archived, article
93+
end
94+
95+
test "archived_last scope puts archived articles at the end" do
96+
recent = articles(:martians_article)
97+
older = articles(:rails_performance)
98+
recent.update!(archived_at: Time.current)
99+
100+
results = Article.archived_last.by_publish_date.to_a
101+
assert results.index(older) < results.index(recent)
102+
end
54103
end

0 commit comments

Comments
 (0)