docbrown/spec/requests/follows_create_spec.rb
Ben Halpern c76abbbdb3
Allow users to follow podcasts (#2690)
* Allow users to follow podcasts

* Only display podcasts user follows

* Add main_color_hex to factory

* Fix podcast test and modify styles

* Fix tests

* Remove weird test
2019-05-04 15:30:40 -04:00

99 lines
2.8 KiB
Ruby

require "rails_helper"
RSpec.describe "Following/Unfollowing", type: :request do
let(:user) { create(:user) }
let(:user_2) { create(:user) }
describe "POST #create" do
before do
login_as user
end
context "when followable_type is a Tag" do
let(:tag) { create(:tag) }
before do
run_background_jobs_immediately do
post "/follows", params: { followable_type: "Tag", followable_id: tag.id }
end
end
it "follows" do
expect(JSON.parse(response.body)["outcome"]).to eq("followed")
end
it "unfollows if already followed" do
post "/follows", params: { followable_type: "Tag", followable_id: tag.id, verb: "unfollow" }
expect(JSON.parse(response.body)["outcome"]).to eq("unfollowed")
end
end
context "when followable_type is a User" do
before do
post "/follows", params: {
followable_type: "User", followable_id: user_2.id
}
end
it "follows" do
expect(JSON.parse(response.body)["outcome"]).to eq("followed")
end
it "unfollows if already followed" do
post "/follows", params: {
followable_type: "User", followable_id: user_2.id, verb: "unfollow"
}
expect(JSON.parse(response.body)["outcome"]).to eq("unfollowed")
end
end
context "when followable_type is an Organization" do
let(:organization) { create(:organization) }
before do
post "/follows", params: {
followable_type: "Organization", followable_id: organization.id
}
end
it "follows" do
expect(JSON.parse(response.body)["outcome"]).to eq("followed")
end
it "unfollows if already followed" do
post "/follows", params: {
followable_type: "Organization", followable_id: organization.id, verb: "unfollow"
}
expect(JSON.parse(response.body)["outcome"]).to eq("unfollowed")
end
end
context "when followable_type is a Podcast" do
let(:podcast) { create(:podcast) }
before do
post "/follows", params: {
followable_type: "Podcast", followable_id: podcast.id
}
end
it "follows" do
expect(JSON.parse(response.body)["outcome"]).to eq("followed")
end
it "unfollows if already followed" do
post "/follows", params: {
followable_type: "Podcast", followable_id: podcast.id, verb: "unfollow"
}
expect(JSON.parse(response.body)["outcome"]).to eq("unfollowed")
end
end
it "returns articles of tag the user follows" do
article = create(:article)
user.follow(Tag.find_by(name: article.tag_list.first))
get "/followed_articles"
expect(JSON.parse(response.body)["articles"].first["title"]).to eq(article.title)
end
end
end