Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
ruby 4.0.1
bundler 2.6.2
postgres 14.6
1 change: 1 addition & 0 deletions spec/fixtures/invalid.opml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
this is not valid opml content
10 changes: 10 additions & 0 deletions spec/system/account_setup_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,16 @@ def fill_in_fields(username:, confirm: "my-password")
expect(page).to have_link("sign up")
end

it "completes sign up for a second user" do
Setting::UserSignup.create!(enabled: true)
create(:user)
visit(setup_password_path)

fill_in_fields(username: "second-user")

expect(page).to have_text("Logged in as second-user")
end

it "does not allow a second user to signup when not enabled" do
create(:user)

Expand Down
11 changes: 11 additions & 0 deletions spec/system/authentication_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

RSpec.describe "authentication" do
it "redirects to login when accessing a protected page while logged out" do
create(:user)

visit(news_path)

expect(page).to have_current_path(login_path)
end
end
35 changes: 35 additions & 0 deletions spec/system/debug_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# frozen_string_literal: true

RSpec.describe "admin/debug" do
it "displays debug information" do
login_as(create(:user, admin: true))

visit("/admin/debug")

expect(page).to have_content(RUBY_VERSION)
end

it "shows None when there are no pending migrations" do
login_as(create(:user, admin: true))

visit("/admin/debug")

expect(page).to have_content("None")
end

it "shows the queued jobs count" do
login_as(create(:user, admin: true))

visit("/admin/debug")

expect(page).to have_content("Queued Jobs")
end

it "blocks non-admin users" do
login_as(default_user)

visit("/admin/debug")

expect(page).to have_content("No route matches")
end
end
23 changes: 21 additions & 2 deletions spec/system/feed_edit_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,27 @@ def visit_edit_feed
expect(page).to have_content("Updated the feed")
end

it "allows assigning a feed to a group", :aggregate_failures do
it "allows removing a group from a feed" do
login_as(default_user)
feed = create(:feed, :with_group)
a11y_skip = [
"aria-required-children",
"color-contrast",
"label",
"landmark-one-main",
"page-has-heading-one",
"region",
"select-name"
]
visit("/feeds/#{feed.id}/edit", a11y_skip:)

select("", from: "group-id")
click_on("Save")

expect(feed.reload.group).to be_nil
end

it "allows assigning a feed to a group" do
login_as(default_user)
group = create(:group)
feed = create(:feed)
Expand All @@ -44,7 +64,6 @@ def visit_edit_feed
select(group.name, from: "group-id")
click_on("Save")

expect(page).to have_content("Updated the feed")
expect(feed.reload.group).to eq(group)
end
end
10 changes: 10 additions & 0 deletions spec/system/feed_show_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,16 @@ def create_and_visit_feed(story_title: nil)
expect(page).to have_current_path(feeds_new_path)
end

it "displays read stories for the feed" do
login_as(default_user)
feed = create(:feed)
create(:story, :read, feed:, title: "Read Story")

visit("/feed/#{feed.id}")

expect(page).to have_content("Read Story")
end

it "only marks stories from the current feed as read" do
login_as(default_user)
other_feed = create(:feed)
Expand Down
31 changes: 31 additions & 0 deletions spec/system/feed_status_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# frozen_string_literal: true

RSpec.describe "feed status bubbles" do
it "shows a green status for a healthy feed" do
login_as(default_user)
create(:feed, status: :green)

visit("/feeds")

expect(page).to have_css(".status.green")
end

it "shows a red status for a feed that has never successfully fetched" do
login_as(default_user)
create(:feed, status: :red)

visit("/feeds")

expect(page).to have_css(".status.red")
end

it "shows a yellow status for a red feed that has stories" do
login_as(default_user)
feed = create(:feed, status: :red)
create(:story, feed:)

visit("/feeds")

expect(page).to have_css(".status.yellow")
end
end
11 changes: 11 additions & 0 deletions spec/system/feeds_index_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,15 @@

expect(page).to have_link(href: feed.url)
end

it "displays feeds in alphabetical order" do
login_as(default_user)
create(:feed, name: "Zebra Feed")
create(:feed, name: "Alpha Feed")

visit "/feeds"

names = all(".feed-title a").map(&:text).map(&:strip)
expect(names).to eq(["Alpha Feed", "Zebra Feed"])
end
end
10 changes: 10 additions & 0 deletions spec/system/import_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,14 @@

expect(page).to have_content("We're getting you some stories to read")
end

it "gracefully handles an invalid OPML file" do
login_as(default_user)
visit(feeds_import_path)
file_path = Rails.root.join("spec/fixtures/invalid.opml")

attach_file("opml_file", file_path, visible: false)

expect(page).to have_content("We're getting you some stories to read")
end
end
20 changes: 20 additions & 0 deletions spec/system/keyboard_shortcuts_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,26 @@ def open_story_and_send(key)
expect(page).to have_current_path(feeds_new_path)
end

it "opens story in new tab with b" do
login_as(default_user)
create_story_and_visit(title: "My Story")
send_keys("j")

send_keys("b")

expect(page.windows.size).to eq(2)
end

it "opens story in new tab with v" do
login_as(default_user)
create_story_and_visit(title: "My Story")
send_keys("j")

send_keys("v")

expect(page.windows.size).to eq(2)
end

it "opens the shortcuts modal with ?" do
login_as(default_user)
create_story_and_visit(title: "My Story")
Expand Down
23 changes: 23 additions & 0 deletions spec/system/stories_index_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,29 @@ def open_story_and_find_unread_icon(story_title)
expect(page).to have_css(".story.read")
end

it "displays stories in newest-first order by default" do
create(:story, title: "Older Story", published: 2.days.ago)
create(:story, title: "Newer Story", published: 1.day.ago)
login_as(default_user)

visit news_path

titles = all(".story-title").map(&:text)
expect(titles).to eq(["Newer Story", "Older Story"])
end

it "displays stories in oldest-first order when configured" do
default_user.update!(stories_order: "asc")
create(:story, title: "Older Story", published: 2.days.ago)
create(:story, title: "Newer Story", published: 1.day.ago)
login_as(default_user)

visit news_path

titles = all(".story-title").map(&:text)
expect(titles).to eq(["Older Story", "Newer Story"])
end

it "allows viewing a story with hot keys" do
create(:story, title: "My Story", body: "My Body")
login_as(default_user)
Expand Down