docbrown/spec/controllers/articles_controller_spec.rb
Dmitrii Krasnov 9375d2436f Fix articles feed not filtering articles by user/organization (#1941)
* Fix articles feed not filtering articles by user/organization
fix #1940

* add specs for articles fetching in articles#feed controller action
2019-03-02 07:48:55 -08:00

79 lines
2.6 KiB
Ruby

# controller specs are now discouraged in favor of request specs.
# This file should eventually be removed
require "rails_helper"
RSpec.describe ArticlesController, type: :controller do
let(:user) { create(:user) }
describe "GET #feed" do
render_views
it "works" do
get :feed, format: :rss
expect(response.status).to eq(200)
end
context "when :username param is not given" do
let!(:featured_article) { create(:article, featured: true) }
let!(:not_featured_article) { create(:article, featured: false) }
before { get :feed, format: :rss }
it "returns only featured articles" do
expect(response.body).to include(featured_article.title)
expect(response.body).not_to include(not_featured_article.title)
end
end
shared_context "when user/organization articles exist" do
let(:organization) { create(:organization) }
let!(:user_article) { create(:article, user_id: user.id) }
let!(:organization_article) { create(:article, organization_id: organization.id) }
end
context "when :username param is given and belongs to a user" do
include_context "when user/organization articles exist"
before { get :feed, params: { username: user.username }, format: :rss }
it "returns only articles for that user" do
expect(response.body).to include(user_article.title)
expect(response.body).not_to include(organization_article.title)
end
end
context "when :username param is given and belongs to an organization" do
include_context "when user/organization articles exist"
before { get :feed, params: { username: organization.slug }, format: :rss }
it "returns only articles for that organization" do
expect(response.body).not_to include(user_article.title)
expect(response.body).to include(organization_article.title)
end
end
context "when :username param is given but it belongs to nither user nor organization" do
include_context "when user/organization articles exist"
before { get :feed, params: { username: "unknown" }, format: :rss }
it("renders empty body") { expect(response.body).to be_empty }
end
end
describe "GET #new" do
before { sign_in user }
context "with authorized user" do
it "returns a new article" do
get :new
expect(response).to render_template(:new)
end
end
context "with authorized user with tag param" do
it "returns a new article" do
get :new, params: { slug: "shecoded" }
expect(response).to render_template(:new)
end
end
end
end