From ef57e991c96e552da808182958863a5e66d6375b Mon Sep 17 00:00:00 2001 From: Neil Smith Date: Mon, 6 Jan 2014 18:55:12 +0000 Subject: [PATCH] Add response format specs --- spec/requests/format_spec.rb | 58 +++++++++++++++++++++++ spec/requests/update_spec.rb | 89 +++++++++++++++++++----------------- 2 files changed, 104 insertions(+), 43 deletions(-) create mode 100644 spec/requests/format_spec.rb diff --git a/spec/requests/format_spec.rb b/spec/requests/format_spec.rb new file mode 100644 index 0000000..9481d3a --- /dev/null +++ b/spec/requests/format_spec.rb @@ -0,0 +1,58 @@ +require 'spec_helper' + +describe "format" do + let!(:feed_item1) { FactoryGirl.create(:feed_item, + title: "item 1") } + let!(:feed_item2) { FactoryGirl.create(:feed_item, + title: "item 2") } + let!(:other_feed_item) { FactoryGirl.create(:feed_item, + feed_name: "other_test_feed") } + + it "changes the description of an existing item" do + post_via_redirect '', + FactoryGirl.attributes_for(:feed_item, + title: "item 1", description: "New description") + expect(assigns(:feed_items).map{|f| f.description}).to include("New description") + expect(assigns(:feed_items).length).to eq(2) + get '/index' + expect(assigns(:feeds).length).to eq(2) + end + + it "adds the item when inserting a new title into an existing feed" do + post_via_redirect '', + FactoryGirl.attributes_for(:feed_item, title: "item 99", + description: "New description") + expect(assigns(:feed_items).map{|f| f.description}).to include("New description") + expect(assigns(:feed_items).length).to eq(3) + get '/index' + expect(assigns(:feeds).length).to eq(2) + end + + it "adds a new feed when inserting a new item into a new feed" do + post_via_redirect '', + FactoryGirl.attributes_for(:feed_item, feed_name: "new_feed") + expect(assigns(:feed_items).length).to eq(1) + expect(assigns(:feed_items)[0].feed_name).to eq("new_feed") + get '/index' + expect(assigns(:feeds).length).to eq(3) + end + + it "removes the item when updated with a blank description" do + post_via_redirect '', + FactoryGirl.attributes_for(:feed_item, title: "item 1", + description: "") + expect(assigns(:feed_items).map{|f| f.title}).not_to include("item 1") + expect(assigns(:feed_items).length).to eq(1) + get '/index' + expect(assigns(:feeds).length).to eq(2) + end + + it "removes the feed when deleting the last item from a feed" do + post_via_redirect '', + FactoryGirl.attributes_for(:feed_item, feed_name: "other_test_feed", + description: "") + get '/index' + expect(assigns(:feeds).length).to eq(1) + end +end + diff --git a/spec/requests/update_spec.rb b/spec/requests/update_spec.rb index bfe8647..8f3e8a6 100644 --- a/spec/requests/update_spec.rb +++ b/spec/requests/update_spec.rb @@ -8,51 +8,54 @@ describe "update" do let!(:other_feed_item) { FactoryGirl.create(:feed_item, feed_name: "other_test_feed") } - it "changes the description of an existing item" do - post_via_redirect '', - FactoryGirl.attributes_for(:feed_item, - title: "item 1", description: "New description") - expect(assigns(:feed_items).map{|f| f.description}).to include("New description") - expect(assigns(:feed_items).length).to eq(2) - get '/index' - expect(assigns(:feeds).length).to eq(2) + it "serves index as html by default" do + get_via_redirect '/index' + expect(response.header['Content-Type']).to include('text/html') + end + + it "serves index.html as html" do + get_via_redirect '/index.html' + expect(response.header['Content-Type']).to include('text/html') + end + + it "serves index.rss as rss" do + get_via_redirect '/index.rss' + expect(response.header['Content-Type']).to include('application/rss+xml') + end + + it "serves index as html with the accept header" do + get_via_redirect '/index', {}, {'Accept' => 'text/html'} + expect(response.header['Content-Type']).to include('text/html') + end + + it "serves index as rss with the accept header" do + get_via_redirect '/index', {}, {'Accept' => 'application/rss+xml'} + expect(response.header['Content-Type']).to include('application/rss+xml') + end + + it "serves feed as html by default" do + get_via_redirect '/other_test_feed' + expect(response.header['Content-Type']).to include('text/html') + end + + it "serves feed.html as html" do + get_via_redirect '/other_test_feed.html' + expect(response.header['Content-Type']).to include('text/html') + end + + it "serves feed.rss as rss" do + get_via_redirect '/other_test_feed.rss' + expect(response.header['Content-Type']).to include('application/rss+xml') end - it "adds the item when inserting a new title into an existing feed" do - post_via_redirect '', - FactoryGirl.attributes_for(:feed_item, title: "item 99", - description: "New description") - expect(assigns(:feed_items).map{|f| f.description}).to include("New description") - expect(assigns(:feed_items).length).to eq(3) - get '/index' - expect(assigns(:feeds).length).to eq(2) - end - - it "adds a new feed when inserting a new item into a new feed" do - post_via_redirect '', - FactoryGirl.attributes_for(:feed_item, feed_name: "new_feed") - expect(assigns(:feed_items).length).to eq(1) - expect(assigns(:feed_items)[0].feed_name).to eq("new_feed") - get '/index' - expect(assigns(:feeds).length).to eq(3) - end - - it "removes the item when updated with a blank description" do - post_via_redirect '', - FactoryGirl.attributes_for(:feed_item, title: "item 1", - description: "") - expect(assigns(:feed_items).map{|f| f.title}).not_to include("item 1") - expect(assigns(:feed_items).length).to eq(1) - get '/index' - expect(assigns(:feeds).length).to eq(2) - end - - it "removes the feed when deleting the last item from a feed" do - post_via_redirect '', - FactoryGirl.attributes_for(:feed_item, feed_name: "other_test_feed", - description: "") - get '/index' - expect(assigns(:feeds).length).to eq(1) + it "serves feed as html with the accept header" do + get_via_redirect '/other_test_feed', {}, {'Accept' => 'text/html'} + expect(response.header['Content-Type']).to include('text/html') + end + + it "serves feed as rss with the accept header" do + get_via_redirect '/other_test_feed', {}, {'Accept' => 'application/rss+xml'} + expect(response.header['Content-Type']).to include('application/rss+xml') end end -- 2.34.1