131 lines
4.2 KiB
Ruby
131 lines
4.2 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe "Articles", type: :request do
|
|
let(:user) { create(:user) }
|
|
let(:tag) { create(:tag) }
|
|
|
|
describe "GET /feed" do
|
|
it "returns rss+xml content" do
|
|
get "/feed"
|
|
expect(response.status).to eq(200)
|
|
expect(response.content_type).to eq("application/rss+xml")
|
|
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" }
|
|
|
|
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 } }
|
|
|
|
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 } }
|
|
|
|
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" } }
|
|
|
|
it("renders empty body") { expect(response.body).to be_empty }
|
|
end
|
|
end
|
|
|
|
describe "GET /feed/tag" do
|
|
shared_context "when tagged articles exist" do
|
|
let!(:tag_article) { create(:article, tags: tag.name) }
|
|
end
|
|
|
|
context "when :tag param is given and tag exists" do
|
|
include_context "when tagged articles exist"
|
|
before { get "/feed/tag/#{tag.name}" }
|
|
|
|
it "returns only articles for that tag" do
|
|
expect(response.body).to include(tag_article.title)
|
|
end
|
|
end
|
|
|
|
context "when :tag param is given and tag exists and is an alias" do
|
|
include_context "when tagged articles exist"
|
|
before do
|
|
alias_tag = create(:tag, alias_for: tag.name)
|
|
get "/feed/tag/#{alias_tag.name}"
|
|
end
|
|
|
|
it "returns only articles for the aliased for tag" do
|
|
expect(response.body).to include(tag_article.title)
|
|
end
|
|
end
|
|
|
|
context "when :tag param is given and tag does not exist" do
|
|
include_context "when tagged articles exist"
|
|
before { get "/feed/tag/unknown" }
|
|
|
|
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 have_http_status(:ok)
|
|
end
|
|
end
|
|
|
|
context "with authorized user with tag param" do
|
|
it "returns a new article" do
|
|
get "/new", params: { slug: "shecoded" }
|
|
expect(response).to have_http_status(:ok)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "GET /:path/edit" do
|
|
before { sign_in user }
|
|
|
|
it "returns a new article" do
|
|
article = create(:article, user_id: user.id)
|
|
get "#{article.path}/manage"
|
|
expect(response.body).to include("Manage Your Post")
|
|
end
|
|
it "returns unauthorized if user not author" do
|
|
second_user = create(:user)
|
|
article = create(:article, user_id: second_user.id)
|
|
expect { get "#{article.path}/manage" }.to raise_error(Pundit::NotAuthorizedError)
|
|
end
|
|
it "shows v1 if article has frontmatter" do
|
|
article = create(:article, user_id: user.id)
|
|
get "#{article.path}/edit"
|
|
expect(response.body).to include("articleform__form--v1")
|
|
end
|
|
end
|
|
end
|