xml_controller_spec.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:5k
源码类别:

Ajax

开发平台:

Others

  1. require File.dirname(__FILE__) + '/../spec_helper'
  2. require 'dns_mock'
  3. describe XmlController do
  4.   integrate_views
  5.   def assert_select(*args, &block)
  6.     @html_document ||= HTML::Document.new(@response.body, false, true)
  7.     super(*args,&block)
  8.   end
  9.   before do
  10.     @article = Factory.create(:article)
  11.   end
  12.   def assert_moved_permanently_to(location)
  13.     assert_response :moved_permanently
  14.     assert_equal location, @response.headers["Location"]
  15.   end
  16.   describe "without format parameter" do
  17.     it "redirects main feed to articles RSS feed" do
  18.       get :feed, :type => 'feed'
  19.       assert_moved_permanently_to 'http://test.host/articles.rss'
  20.     end
  21.     it "redirects comments feed to Comments RSS feed" do
  22.       get :feed, :type => 'comments'
  23.       assert_moved_permanently_to admin_comments_url(:format=>:rss)
  24.     end
  25.     it "returns valid RSS feed for trackbacks feed type" do
  26.       get :feed, :type => 'trackbacks'
  27.       assert_response :success
  28.       assert_xml @response.body
  29.       assert_feedvalidator @response.body
  30.       assert_rss20
  31.     end
  32.     it "redirects article feed to Article RSS feed" do
  33.       get :feed, :type => 'article', :id => @article.id
  34.       assert_moved_permanently_to @article.permalink_by_format(:rss)
  35.     end
  36.     it "redirects category feed to Category RSS feed" do
  37.       get :feed, :type => 'category', :id => 'personal'
  38.       assert_moved_permanently_to(category_url('personal', :format => 'rss'))
  39.     end
  40.     it "redirects tag feed to Tag RSS feed" do
  41.       get :feed, :type => 'tag', :id => 'foo'
  42.       assert_moved_permanently_to(tag_url('foo', :format=>'rss'))
  43.     end
  44.   end
  45.   it "test_feed_rss20" do
  46.     get :feed, :format => 'rss20', :type => 'feed'
  47.     assert_moved_permanently_to 'http://test.host/articles.rss'
  48.   end
  49.   it "test_feed_rss20_comments" do
  50.     get :feed, :format => 'rss20', :type => 'comments'
  51.     assert_moved_permanently_to admin_comments_url(:format=>:rss)
  52.   end
  53.   it "test_feed_rss20_trackbacks" do
  54.     get :feed, :format => 'rss20', :type => 'trackbacks'
  55.     assert_response :success
  56.     assert_xml @response.body
  57.     assert_feedvalidator @response.body
  58.     assert_rss20
  59.   end
  60.   it "test_feed_rss20_article" do
  61.     get :feed, :format => 'rss20', :type => 'article', :id => @article.id
  62.     assert_moved_permanently_to @article.permalink_by_format(:rss)
  63.   end
  64.   it "test_feed_rss20_category" do
  65.     get :feed, :format => 'rss20', :type => 'category', :id => 'personal'
  66.     assert_moved_permanently_to(category_url('personal', :format => 'rss'))
  67.   end
  68.   it "test_feed_rss20_tag" do
  69.     get :feed, :format => 'rss20', :type => 'tag', :id => 'foo'
  70.     assert_moved_permanently_to(tag_url('foo', :format=>'rss'))
  71.   end
  72.   it "test_feed_atom10_feed" do
  73.     get :feed, :format => 'atom10', :type => 'feed'
  74.     assert_response :moved_permanently
  75.     assert_moved_permanently_to "http://test.host/articles.atom"
  76.   end
  77.   it "test_feed_atom10_comments" do
  78.     get :feed, :format => 'atom10', :type => 'comments'
  79.     assert_response :moved_permanently
  80.     assert_moved_permanently_to admin_comments_url(:format=>'atom')
  81.   end
  82.   it "test_feed_atom10_trackbacks" do
  83.     get :feed, :format => 'atom10', :type => 'trackbacks'
  84.     assert_response :success
  85.     assert_xml @response.body
  86.     assert_feedvalidator @response.body
  87.     assert_equal(assigns(:items).sort { |a, b| b.created_at <=> a.created_at },
  88.                  assigns(:items))
  89.     assert_atom10
  90.     assert_select 'title[type=html]'
  91.     assert_select 'summary'
  92.   end
  93.   it "test_feed_atom10_article" do
  94.     get :feed, :format => 'atom10', :type => 'article', :id => @article.id
  95.     assert_moved_permanently_to @article.permalink_by_format('atom')
  96.   end
  97.   it "test_feed_atom10_category" do
  98.     get :feed, :format => 'atom10', :type => 'category', :id => 'personal'
  99.     assert_moved_permanently_to(category_url('personal', :format => 'atom'))
  100.   end
  101.   it "test_feed_atom10_tag" do
  102.     get :feed, :format => 'atom10', :type => 'tag', :id => 'foo'
  103.     assert_moved_permanently_to(tag_url('foo',:format => 'atom'))
  104.   end
  105.   it "test_articlerss" do
  106.     get :articlerss, :id => @article.id
  107.     assert_response :redirect
  108.   end
  109.   it "test_commentrss" do
  110.     get :commentrss, :id => 1
  111.     assert_response :redirect
  112.   end
  113.   it "test_trackbackrss" do
  114.     get :trackbackrss, :id => 1
  115.     assert_response :redirect
  116.   end
  117.   it "test_bad_format" do
  118.     get :feed, :format => 'atom04', :type => 'feed'
  119.     assert_response :missing
  120.   end
  121.   it "test_bad_type" do
  122.     get :feed, :format => 'rss20', :type => 'foobar'
  123.     assert_response :missing
  124.   end
  125.   it "test_rsd" do
  126.     get :rsd, :id => 1
  127.     assert_response :success
  128.     assert_nothing_raised do
  129.       assert REXML::Document.new(@response.body)
  130.     end
  131.   end
  132.   it "test_atom03" do
  133.     get :feed, :format => 'atom03', :type => 'feed'
  134.     assert_response :moved_permanently
  135.     assert_moved_permanently_to 'http://test.host/articles.atom'
  136.   end
  137.   # TODO(laird): make this more robust
  138.   it "test_sitemap" do
  139.     get :feed, :format => 'googlesitemap', :type => 'sitemap'
  140.     assert_response :success
  141.     assert_xml @response.body
  142.   end
  143.   def assert_rss20
  144.     assert_select 'rss:root[version=2.0] > channel item', :count => assigns(:items).size
  145.   end
  146.   def assert_atom10
  147.     assert_select 'feed:root[xmlns="http://www.w3.org/2005/Atom"] > entry', :count => assigns(:items).size
  148.   end
  149. end