docbrown/spec/requests/admin/podcasts_spec.rb
rhymes cc8bfcb5c0
Enable Rubocop 0.89 cops and fix Lint/ violations (#9709)
* Enable new Lint/ cops and run rubocop -a

* Fixing last remaining things with rubocop -a

* Enable and fix Style/ExplicitBlockArgument and Style/GlobalStdStream

* Forgot parenthesis
2020-08-10 16:57:12 +02:00

99 lines
3.6 KiB
Ruby

require "rails_helper"
RSpec.describe "/admin/podcasts", type: :request do
let(:admin) { create(:user, :super_admin) }
let(:podcast) { create(:podcast) }
let(:user) { create(:user) }
before do
sign_in admin
end
describe "GET /admin/podcasts" do
let!(:no_eps_podcast) { create(:podcast, title: Faker::Book.title) }
before do
create(:podcast_episode, podcast: podcast)
user.add_role(:podcast_admin, Podcast.order(Arel.sql("RANDOM()")).first)
end
it "renders success" do
get admin_podcasts_path
expect(response).to be_successful
end
it "displays podcasts with and without episodes" do
get admin_podcasts_path
expect(response.body).to include(CGI.escapeHTML(no_eps_podcast.title))
expect(response.body).to include(CGI.escapeHTML(podcast.title))
end
end
describe "Adding admin" do
it "adds an admin" do
expect do
post add_admin_admin_podcast_path(podcast.id), params: { podcast: { user_id: user.id } }
end.to change(Role, :count).by(1)
user.reload
expect(user.has_role?(:podcast_admin, podcast)).to be true
end
it "does nothing when adding an admin for non-existent user" do
post add_admin_admin_podcast_path(podcast.id), params: { podcast: { user_id: user.id + 1 } }
expect(response).to redirect_to(edit_admin_podcast_path(podcast))
end
end
describe "Removing admin" do
it "removes an admin" do
user.add_role(:podcast_admin, podcast)
expect do
delete remove_admin_admin_podcast_path(podcast.id), params: { podcast: { user_id: user.id } }
end.to change(Role, :count).by(-1)
expect(user.has_role?(:podcast_admin, podcast)).to be false
end
it "does nothing when removing an admin for non-existent user" do
delete remove_admin_admin_podcast_path(podcast.id), params: { podcast: { user_id: user.id + 1 } }
expect(response).to redirect_to(edit_admin_podcast_path(podcast))
end
end
describe "Updating" do
it "updates" do
put admin_podcast_path(podcast), params: { podcast: { title: "hello",
feed_url: "https://pod.example.com/rss.rss" } }
podcast.reload
expect(podcast.title).to eq("hello")
expect(podcast.feed_url).to eq("https://pod.example.com/rss.rss")
end
it "redirects after update" do
put admin_podcast_path(podcast), params: { podcast: { title: "hello",
feed_url: "https://pod.example.com/rss.rss" } }
expect(response).to redirect_to(admin_podcasts_path)
end
end
describe "POST /admin/podcasts/:id/fetch_podcasts" do
it "redirects back to index with a notice" do
post fetch_admin_podcast_path(podcast.id)
expect(response).to redirect_to(admin_podcasts_path)
expect(flash[:notice]).to include("Podcast's episodes fetching was scheduled (#{podcast.title}, ##{podcast.id})")
end
it "schedules a worker to fetch episodes" do
sidekiq_assert_enqueued_with(job: Podcasts::GetEpisodesWorker,
args: [{ podcast_id: podcast.id, limit: 5, force: false }]) do
post fetch_admin_podcast_path(podcast.id), params: { limit: "5", force: nil }
end
end
it "schedules a worker without limit and with force" do
sidekiq_assert_enqueued_with(job: Podcasts::GetEpisodesWorker,
args: [{ podcast_id: podcast.id, force: true, limit: nil }]) do
post fetch_admin_podcast_path(podcast.id), params: { force: "1", limit: "" }
end
end
end
end