docbrown/spec/requests/videos_spec.rb
Jeremy Friesen dce7c4b275
Ensuring VideoPolicy#new? is canonical (#16735)
This commit compresses the policy check that spanned both :new? and
:enabled?.  We hide the ability to upload a video (as per the altered
html.erb files of this commit) but we didn't enforce the same logic in
the controller.

Further, as Videos are a subset of Article, I'm adding the "verify the
user is not suspended" test.

Directly relates to #16483

For sleuthing this relates:

- #16728
- forem/forem#16537
- #16634

And for historical context, this relates to:

- #10955
- #10954
- forem/internalEngineering#149
2022-03-01 11:46:31 -05:00

74 lines
2.2 KiB
Ruby

require "rails_helper"
RSpec.describe "Videos", type: :request do
let(:unauthorized_user) { create(:user) }
let(:authorized_user) { create(:user, created_at: 1.month.ago) }
before { allow(Settings::General).to receive(:enable_video_upload).and_return(true) }
describe "GET /videos" do
it "shows video page" do
get "/videos"
expect(response.body).to include "#{community_name} on Video"
end
it "shows articles with video" do
not_video_article = create(:article)
video_article = create(:article)
video_article.update_columns(
video: "video",
video_thumbnail_url: "https://dummyimage.com/240x180.jpg",
title: "this video",
)
get "/videos"
expect(response.body).to include video_article.title
expect(response.body).not_to include not_video_article.title
end
end
describe "GET /videos/new" do
context "when not authorized" do
it "redirects non-logged in users" do
expect { get "/videos/new" }.to raise_error(Pundit::NotAuthorizedError)
end
it "redirects logged in users" do
sign_in unauthorized_user
expect { get "/videos/new" }.to raise_error(Pundit::NotAuthorizedError)
end
end
context "when authorized" do
it "allows authorized users" do
sign_in authorized_user
get "/videos/new"
expect(response.body).to include "Upload Video File"
end
end
end
describe "POST /videos" do
context "when not authorized" do
it "redirects non-logged in users" do
expect { post "/videos" }.to raise_error(Pundit::NotAuthorizedError)
end
it "redirects logged in users" do
sign_in unauthorized_user
expect { post "/videos" }.to raise_error(Pundit::NotAuthorizedError)
end
end
context "when authorized" do
before do
sign_in authorized_user
end
it "redirects to the article's edit page for the logged in user" do
stub_request(:get, %r{dw71fyauz7yz9\.cloudfront\.net/}).to_return(status: 200, body: "", headers: {})
post "/videos", params: { article: { video: "https://www.something.com/something.mp4" } }
expect(response.status).to eq(302)
end
end
end
end