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

Ajax

开发平台:

Others

  1. require File.dirname(__FILE__) + '/../spec_helper'
  2. # These are integration tests. They are not comprehensive. If you're
  3. # hacking on the converter, please add tests first.
  4. describe "WordPress 2.5 converter" do
  5.   before :each do
  6.     # Fixtures aren't being rolled back in the WP DB, so we delete them all before
  7.     # each test. This is a simple hack, but slows things down.
  8.     [
  9.       WP25::Option, WP25::User, WP25::Post, WP25::Comment,
  10.       WP25::Term, WP25::TermTaxonomy, WP25::TermRelationship
  11.     ].each do |model_class|
  12.       model_class.delete_all
  13.     end
  14.     
  15.     Factory('WP25/option',
  16.       :option_name => 'blogname', :option_value => 'My WordPress Blog')
  17.     Factory('WP25/option',
  18.       :option_name => 'blogdescription', :option_value => 'WordPress blog description')
  19.   end
  20.   
  21.   it "runs without crashing" do
  22.     run_converter
  23.   end
  24.   
  25.   describe "given a user" do
  26.     before :each do
  27.       @poster = Factory('WP25/user',
  28.         :display_name => 'A. User',
  29.         :user_email => 'auser@notfound.com',
  30.         :user_login => 'auser',
  31.         :user_pass => 'not a valid password'
  32.       )
  33.     end
  34.     
  35.     it "creates a user" do
  36.       lambda { run_converter }.should change(User, :count).by(1)
  37.     end
  38.     describe "and a post" do
  39.       before :each do
  40.         # TODO: figure out if we're handling GMT conversion correctly
  41.         @post = Factory('WP25/post',
  42.           :post_author => @poster.ID
  43.         )
  44.       end
  45.       
  46.       it "creates an article" do
  47.         lambda { run_converter }.should change(Article, :count).by(1)
  48.       end
  49.       
  50.       it "assigns the article's author" do
  51.         run_converter
  52.         @article = Article.find(:first, :order => 'created_at DESC')
  53.         # NOTE: Article.author is from User.login; Comment.author is from User.name
  54.         @article.author.should == @poster.user_login
  55.         @article.user.login.should == @poster.user_login
  56.       end
  57.       
  58.       describe "with an owned comment" do
  59.         before :each do
  60.           @commenter = Factory('WP25/user',
  61.             :display_name => 'A. Commenter',
  62.             :user_email => 'acommenter@notfound.com',
  63.             :user_login => 'acommenter',
  64.             :user_pass => 'not a valid password'
  65.           )
  66.           @comment = Factory('WP25/comment',
  67.             :comment_post_ID => @post.ID,
  68.             :user => @commenter
  69.           )
  70.         end
  71.         
  72.         it "creates a comment" do
  73.           lambda { run_converter }.should change(Comment, :count).by(1)
  74.         end
  75.         
  76.         it "assigns the comment's author" do
  77.           run_converter
  78.           @typo_comment = Comment.find(:first, :order => 'created_at DESC')
  79.           # NOTE: Article.author is from User.login; Comment.author is from User.name
  80.           @typo_comment.author.should == @commenter.display_name
  81.           @typo_comment.user.login.should == @commenter.user_login
  82.         end
  83.       end
  84.       
  85.       describe "with an anonymous comment" do
  86.         before :each do
  87.           @comment = Factory('WP25/comment',
  88.             :comment_post_ID => @post.ID,
  89.             :comment_author => 'Anonymous Commenter'
  90.           )
  91.         end
  92.         
  93.         it "does not assign the comment's author" do
  94.           run_converter
  95.           @typo_comment = Comment.find(:first, :order => 'created_at DESC')
  96.           @typo_comment.author.should == @comment.comment_author
  97.           @typo_comment.user.should == nil
  98.         end
  99.             
  100.         describe "that is spam" do
  101.           before :each do
  102.             @comment.update_attribute(:comment_approved, 'spam')
  103.           end
  104.           
  105.           it "marks the created comment as spam" do
  106.             run_converter
  107.             @typo_comment = Comment.find(:first, :order => 'created_at DESC')
  108.             @typo_comment.should be_spam
  109.           end
  110.         end
  111.       end
  112.       
  113.       describe "with tags" do
  114.         before :each do
  115.           @tag = Factory('WP25/tag')
  116.           @taxonomy = Factory('WP25/term_taxonomy',
  117.             :term_id => @tag.term_id,
  118.             :taxonomy => 'post_tag',
  119.             :count => 1)
  120.           @relationship = Factory('WP25/term_relationship',
  121.             # TODO: use post association
  122.             :object_id => @post.id,
  123.             :term_taxonomy => @taxonomy)
  124.         end
  125.         
  126.         it "applies the tags to the created post" do
  127.           run_converter
  128.           @article = Article.find(:first, :order => 'created_at DESC')
  129.           @article.tags.count.should == 1
  130.           @article.tags.first.name == @tag.name
  131.         end
  132.       end
  133.       
  134.       describe "with a category" do
  135.         before :each do
  136.           @category = Factory('WP25/category')
  137.           @taxonomy = Factory('WP25/term_taxonomy',
  138.             :term_id => @category.term_id,
  139.             :taxonomy => 'category',
  140.             :count => 1)
  141.           @relationship = Factory('WP25/term_relationship',
  142.             # TODO: use post association
  143.             :object_id => @post.id,
  144.             :term_taxonomy => @taxonomy)
  145.         end
  146.         
  147.         it "places the created post in the category" do
  148.           run_converter
  149.           @article = Article.find(:first, :order => 'created_at DESC')
  150.           @article.categories.count.should == 1
  151.           @article.categories.first.name == @category.name
  152.         end
  153.       end
  154.     end
  155.     
  156.     describe "and a page" do
  157.       before :each do
  158.         # TODO: figure out if we're handling GMT conversion correctly
  159.         @page = Factory('WP25/page',
  160.           :post_author => @poster.ID
  161.         )
  162.       end
  163.       
  164.       it "creates a page" do
  165.         lambda { run_converter }.should change(Page, :count).by(1)
  166.       end
  167.       
  168.       it "assigns the page's author" do
  169.         run_converter
  170.         @typo_page = Page.find(:first, :order => 'created_at DESC')
  171.         # NOTE: Page.author is from User.login; Comment.author is from User.name
  172.         @typo_page.author.should == @poster.user_login
  173.         @typo_page.user.login.should == @poster.user_login
  174.       end
  175.     end
  176.   end
  177.   
  178.   protected
  179.   
  180.   def run_converter(options = {})
  181.     real_stdout = $stdout
  182.     begin
  183.       $stdout = StringIO.new unless options[:verbose]
  184.       TypoPlugins.convert_from :wp25
  185.     ensure
  186.       $stdout = real_stdout
  187.     end
  188.   end
  189. end