require File.join(File.dirname(__FILE__), "spec_helper") require 'rubygems' gem 'rspec' require 'spec' Platform = Module.new unless Object.const_defined?('Platform') Net = Module.new unless Object.const_defined?('Net') require File.expand_path(File.join(File.dirname(__FILE__),'..','lib/flyrb')) Flyrb.equip(:pastie) include Flyrb::Pastie Clipboard = Flyrb::Clipboard unless Object.const_defined?('Clipboard') describe "pastie being called" do before(:all) do Net::HTTP = mock('HTTP') unless Net.const_defined?('HTTP') URI = mock('URI') unless Object.const_defined?('URI') Clipboard = mock('clipboard') unless Object.const_defined?('Clipboard') end before(:each) do @page = mock('page') @page.stub!(:body).and_return('href="foo"') Net::HTTP.stub!(:post_form).and_return(@page) URI.stub!(:parse) Clipboard.stub!(:read) Clipboard.stub!(:write) Kernel.stub!(:system) end it "should be available in global namespace and not blow-up with default stub/mocking" do pastie end it "should uri-parse the pastie uri" do URI.should_receive(:parse).with("http://pastie.caboo.se/pastes/create") pastie end it "should pass the uri-parsed result into the post" do URI.should_receive(:parse).and_return('a_uri_object') Net::HTTP.should_receive(:post_form).with('a_uri_object', anything()).and_return(@page) pastie end it "should call system open on the pastie return" do @page.should_receive(:body).and_return('href="returned_url"') case Platform::IMPL when :macosx Kernel.should_receive(:system).with("open returned_url") when :mswin Kernel.should_receive(:system).with("start returned_url") end pastie end it "should write resulting url into the clipboard" do @page.should_receive(:body).and_return('href="returned_url"') Clipboard.should_receive(:write).with('returned_url') pastie end describe "with no parameter it uses the clipboard" do it "should read the clipboard" do Clipboard.should_receive(:read) pastie end it "should put the clipboard results in the post to pastie" do Clipboard.should_receive(:read).and_return('bar') Net::HTTP.should_receive(:post_form).with(anything(),{"paste_parser" => "ruby", "paste[authorization]" => "burger", "paste[body]" => 'bar'}).and_return(@page) pastie end end describe "with a parameter instead" do #TODO: windows/linux safer now, since no clipboard functionality? it "should not even read the clipboard" do Clipboard.should_not_receive(:read) pastie "baz" end it "should pass in the parameter instead" do Net::HTTP.should_receive(:post_form).with(anything(),{"paste_parser" => "ruby", "paste[authorization]" => "burger", "paste[body]" => 'baz'}).and_return(@page) pastie "baz" end end end