* Article query spec for scheduled articles * Added scheduled article badge on the user dashboard * Added published_at field to editor options * Accept and validate published_at from editor * Refactor published_at validation * Allow 1-minute difference in published_at * Notice on an unpublished article page * Added specs for 'Click to edit' link on scheduled article preview page * ContextNotification model * Articles::Publish worker * Added specs for articles publish worker * Schedule publish articles worker * Added tests to check for scheduled posts in feeds * Don't allow managing scheduled articles * Don't send notifications for scheduled articles * Set published_at in Articles::Updater when publishing * Published_at value in post options * Pass timezone and set published_at accordingly * Limit setting published_at to the future * Readonly published_at for articles that were already published * Chagning published_at format in editor v1 (start) * Changed published_at format in frontmatter, specs * Added specs for updating published_at from frontmatter * Fixed accepting past published_at for articles published_from_feed * Enabled published_at validation: don't allow updating published_at for already published articles * Validate published_at on create * Added a spec for updating published_at for exported articles * Fixed specs related to creating articles with past published_at * Fixed specs related to past published_at for articles * Added a hack so that admins would be able to update published_at * Switch button text schedule/publish when changin publishedAt * Fixed saving published_at with timezone * Added a feature flag for scheduling articles * Default text in markdown editor depends on feature flag * Enable article editor cache again * Fixed the default value in the markdown editor * Fix sitemaps spec * Removed tooltip * Fixed articles update specs * Added missing locales * Fixed article create specs * Fixed spec * Removed commented code * Returned enabling extensions in the schema * Returned accidentally deleted constraint * Make articles query spec more stable Co-authored-by: Jeremy Friesen <jeremy.n.friesen@gmail.com> * Removed commented code * Removed unused code * A clearer policy Co-authored-by: Jeremy Friesen <jeremy.n.friesen@gmail.com> * Use StringInquirer for article current state * Added a note and todo to articles factory past trait * Remove duplicated PropType Co-authored-by: Suzanne Aitchison <suzanne@forem.com> * Refactor query in the Articles::PublishWorker Co-authored-by: Mac Siri <krairit.siri@gmail.com> * Refactor articleForm.jsx Co-authored-by: Mac Siri <krairit.siri@gmail.com> * Removed specs that are no longer relevant * Removed useless onKeyUp on a hidden input * Refactored articleForm * Hide scheduling from post options when published_at is readonly * Run sends notifications worker every 5 minutes instead of every minute Co-authored-by: Jeremy Friesen <jeremy.n.friesen@gmail.com> Co-authored-by: Suzanne Aitchison <suzanne@forem.com> Co-authored-by: Mac Siri <krairit.siri@gmail.com>
192 lines
6.3 KiB
Ruby
192 lines
6.3 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe "User visits articles by timeframe", type: :system do
|
|
let(:author) { create(:user) }
|
|
let!(:article) { create(:article, user: author, published_at: Time.current) }
|
|
let!(:days_old_article) { create(:article, :past, past_published_at: 2.days.ago, user: author) }
|
|
let!(:weeks_old_article) { create(:article, :past, past_published_at: 2.weeks.ago, user: author) }
|
|
let!(:months_old_article) { create(:article, :past, past_published_at: 2.months.ago, user: author) }
|
|
let!(:years_old_article) { create(:article, :past, past_published_at: 2.years.ago, user: author) }
|
|
|
|
def shows_correct_articles_count(count)
|
|
expect(page).to have_selector(".crayons-story", visible: :visible, count: count)
|
|
end
|
|
|
|
def shows_correct_articles_count_via_xpath(count)
|
|
expect(page).to have_xpath(
|
|
"//article[contains(@class, 'crayons-story') and not(contains(@class, 'crayons-story--featured'))]",
|
|
count: count,
|
|
)
|
|
end
|
|
|
|
def shows_main_article
|
|
expect(page).to have_selector(".crayons-story--featured", visible: :visible, count: 1)
|
|
end
|
|
|
|
context "when user hasn't logged in" do
|
|
context "when viewing articles for week" do
|
|
before { visit "/top/week" }
|
|
|
|
it "shows correct articles", :aggregate_failures do
|
|
shows_correct_articles_count(2)
|
|
shows_main_article
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when viewing articles for month" do
|
|
before { visit "/top/month" }
|
|
|
|
it "shows correct articles", :aggregate_failures do
|
|
shows_correct_articles_count(3)
|
|
shows_main_article
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
expect(page).to have_text(weeks_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when viewing articles for year" do
|
|
before { visit "/top/year" }
|
|
|
|
it "shows correct articles", :aggregate_failures do
|
|
shows_correct_articles_count(4)
|
|
shows_main_article
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
expect(page).to have_text(weeks_old_article.title)
|
|
expect(page).to have_text(months_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when viewing articles for infinity" do
|
|
before { visit "/top/infinity" }
|
|
|
|
it "shows correct articles and cta count", :aggregate_failures do
|
|
shows_correct_articles_count(5)
|
|
shows_main_article
|
|
expect(page).to have_selector(".authentication-feed__card", count: 1)
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
expect(page).to have_text(weeks_old_article.title)
|
|
expect(page).to have_text(months_old_article.title)
|
|
expect(page).to have_text(years_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when viewing articles for latest" do
|
|
before { visit "/latest" }
|
|
|
|
it "shows correct articles and cta-count", :aggregate_failures do
|
|
shows_correct_articles_count(5)
|
|
shows_main_article
|
|
expect(page).to have_selector(".authentication-feed__card", count: 1)
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
expect(page).to have_text(weeks_old_article.title)
|
|
expect(page).to have_text(months_old_article.title)
|
|
expect(page).to have_text(years_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when user has logged in", js: true do
|
|
let(:user) { create(:user) }
|
|
|
|
before { sign_in user }
|
|
|
|
context "when viewing articles for week" do
|
|
before { visit "/top/week" }
|
|
|
|
it "shows correct articles", :aggregate_failures do
|
|
shows_correct_articles_count_via_xpath(1)
|
|
shows_main_article
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when viewing articles for month" do
|
|
before { visit "/top/month" }
|
|
|
|
it "shows correct articles", :aggregate_failures do
|
|
shows_correct_articles_count_via_xpath(2)
|
|
shows_main_article
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
expect(page).to have_text(weeks_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when viewing articles for year" do
|
|
before { visit "/top/year" }
|
|
|
|
it "shows correct articles", :aggregate_failures do
|
|
shows_correct_articles_count_via_xpath(3)
|
|
shows_main_article
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
expect(page).to have_text(weeks_old_article.title)
|
|
expect(page).to have_text(months_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when viewing articles for infinity" do
|
|
before { visit "/top/infinity" }
|
|
|
|
it "shows correct articles", :aggregate_failures do
|
|
shows_correct_articles_count_via_xpath(4)
|
|
shows_main_article
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
expect(page).to have_text(weeks_old_article.title)
|
|
expect(page).to have_text(months_old_article.title)
|
|
expect(page).to have_text(years_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when viewing articles for latest" do
|
|
before { visit "/latest" }
|
|
|
|
it "shows correct articles", :aggregate_failures do
|
|
shows_correct_articles_count_via_xpath(4)
|
|
shows_main_article
|
|
|
|
within("#main-content") do
|
|
expect(page).to have_text(article.title)
|
|
expect(page).to have_text(days_old_article.title)
|
|
expect(page).to have_text(weeks_old_article.title)
|
|
expect(page).to have_text(months_old_article.title)
|
|
expect(page).to have_text(years_old_article.title)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|