You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
asciinema.org/spec/decorators/asciicast_decorator_spec.rb

262 lines
5.6 KiB
Ruby

require 'spec_helper'
describe AsciicastDecorator do
include Draper::ViewHelpers
let(:asciicast) { Asciicast.new }
let(:decorator) { described_class.new(asciicast) }
subject { decorator.send(method) }
describe '#os' do
let(:method) { :os }
context 'when user_agent is present' do
context 'and the OS is Linux' do
before do
asciicast.user_agent =
"asciinema/0.9.7 CPython/3.3.1 " \
"Linux/3.8.0-30-generic-x86_64-with-Ubuntu-13.04-raring"
end
it { should == 'Linux' }
end
context 'and the OS is OSX' do
before do
asciicast.user_agent =
"asciinema/0.9.7 CPython/2.7.4 " \
"Darwin/10.0.0-i386-64bit"
end
it { should == 'OSX' }
end
context 'and the OS is other' do
before do
asciicast.user_agent = "asciinema/0.9.7 CPython/2.7.4 Jola/Misio-Foo"
end
it 'should return first token' do
should == 'Jola'
end
end
end
context 'when uname is present' do
context "and it's Linux-like" do
before do
asciicast.uname = "Linux t430u 3.5.0-18-generic #29-Ubuntu SMP"
end
it { should == 'Linux' }
end
context "and it's Darwin-like" do
before do
asciicast.uname = "Darwin local 10.3.0 Darwin Kernel Version 10.3.0"
end
it { should == 'OSX' }
end
context "and it's other" do
before do
asciicast.uname = "Jola Misio Foo"
end
it 'should return first token' do
should == 'Jola'
end
end
end
context 'when user_agent and uname are nil' do
before do
asciicast.user_agent = nil
asciicast.uname = nil
end
it { should == 'unknown' }
end
context 'when user_agent and uname are a blank string' do
before do
asciicast.user_agent = ' '
asciicast.uname = ' '
end
it { should == 'unknown' }
end
end
describe '#terminal_type' do
let(:method) { :terminal_type }
it "returns asciicast's terminal_type when non-blank" do
asciicast.terminal_type = 'foo'
should == 'foo'
end
it 'returns "?" for blank terminal_type' do
asciicast.terminal_type = nil
should == '?'
asciicast.terminal_type = ''
should == '?'
end
end
describe '#shell' do
let(:method) { :shell }
it 'returns last segment of shell path' do
asciicast.shell = '/usr/bin/some/bar'
should == 'bar'
end
end
describe '#title' do
let(:method) { :title }
context 'when title is present' do
before do
asciicast.title = 'tit'
end
it { should == 'tit' }
end
context 'when no title but command is present' do
before do
asciicast.title = nil
asciicast.command = 'cmd'
end
it { should == 'cmd' }
end
context 'when no title nor command is present' do
before do
asciicast.title = nil
asciicast.command = nil
asciicast.id = 999
end
it 'should be in the form of "#<id>"' do
should == "asciicast:#{asciicast.id}"
end
end
end
describe '#description' do
let(:method) { :description }
context 'when description present' do
before do
asciicast.description = '**yay**'
end
it 'should be processed with markdown processor' do
should == "<p><strong>yay</strong></p>\n"
end
end
context 'when no description' do
before do
asciicast.description = ''
end
it { should be(nil) }
end
end
describe '#thumbnail' do
let(:json) { [:qux] }
let(:snapshot) { double('snapshot', :thumbnail => thumbnail) }
let(:thumbnail) { double('thumbnail') }
before do
allow(asciicast).to receive(:snapshot) { json }
allow(Snapshot).to receive(:build).with(json) { snapshot }
allow(helpers).to receive(:render).
with('asciicasts/thumbnail', :thumbnail => thumbnail) { '<pre></pre>' }
end
it "returns snapshot's thumbnail rendered by SnapshotPresenter" do
expect(decorator.thumbnail).to eq('<pre></pre>')
end
end
describe '#author_link' do
subject { decorator.author_link }
let(:asciicast) { double('asciicast', user: user) }
let(:user) { double('user', link: 'link') }
before do
allow(user).to receive(:decorate) { user }
end
it { should eq('link') }
end
describe '#author_img_link' do
subject { decorator.author_img_link }
let(:asciicast) { double('asciicast', user: user) }
let(:user) { double('user', img_link: 'img-link') }
before do
allow(user).to receive(:decorate) { user }
end
it { should eq('img-link') }
end
describe '#other_by_user' do
pending
end
describe '#embed_script' do
let(:src_regexp) {
/src="[^"]+\b123\b[^"]*\.js"/
}
let(:id_regexp) {
/id="asciicast-123"/
}
let(:script_regexp) {
/^<script[^>]+#{src_regexp}[^>]+#{id_regexp}[^>]*><\/script>/
}
before do
Use new rspec syntax in all specs diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb index a115b7d..09d150b 100644 --- a/spec/controllers/application_controller_spec.rb +++ b/spec/controllers/application_controller_spec.rb @@ -46,12 +46,12 @@ def retrieve describe "action raise unauthorized" do context "when xhr" do - before { request.stub(:xhr?).and_return(true) } + before { allow(request).to receive(:xhr?).and_return(true) } it "response with 401" do get :foo - response.status.should == 401 + expect(response.status).to eq(401) end end @@ -59,11 +59,11 @@ def retrieve context "when typical request" do it "redirects to login_path" do - @controller.should_receive(:store_location) + expect(@controller).to receive(:store_location) get :foo - flash[:notice].should == "Please sign in to proceed" + expect(flash[:notice]).to eq("Please sign in to proceed") should redirect_to(login_path) end @@ -72,12 +72,12 @@ def retrieve context "when action raise forbidden" do context "when xhr" do - before { request.stub(:xhr?).and_return(true) } + before { allow(request).to receive(:xhr?).and_return(true) } it "response with 401" do get :bar - response.status.should == 403 + expect(response.status).to eq(403) end end @@ -86,7 +86,7 @@ def retrieve it "redirects to root_path" do get :bar - flash[:alert].should == "This action is forbidden" + expect(flash[:alert]).to eq("This action is forbidden") should redirect_to(root_path) end @@ -97,8 +97,8 @@ def retrieve it 'stores current request path to be later retrieved' do get :store get :retrieve - assigns[:location].should == '/fake/store' - assigns[:location_again].should == 'NOWAI!' + expect(assigns[:location]).to eq('/fake/store') + expect(assigns[:location_again]).to eq('NOWAI!') end end @@ -106,7 +106,7 @@ def retrieve context 'when there is no stored location' do it 'redirects to given location' do path = double - @controller.should_receive(:redirect_to).with(path) + expect(@controller).to receive(:redirect_to).with(path) @controller.send(:redirect_back_or_to, path) end end @@ -115,8 +115,8 @@ def retrieve it 'redirects to stored location' do stored_path = double path = double - @controller.stub(:get_stored_location => stored_path) - @controller.should_receive(:redirect_to).with(stored_path) + allow(@controller).to receive(:get_stored_location).and_return(stored_path) + expect(@controller).to receive(:redirect_to).with(stored_path) @controller.send(:redirect_back_or_to, path) end end diff --git a/spec/controllers/asciicasts_controller_spec.rb b/spec/controllers/asciicasts_controller_spec.rb index 5741ec2..c37e69b 100644 --- a/spec/controllers/asciicasts_controller_spec.rb +++ b/spec/controllers/asciicasts_controller_spec.rb @@ -2,12 +2,12 @@ shared_examples_for 'guest user trying to modify' do it { should redirect_to(login_path) } - specify { flash[:notice].should =~ /sign in to proceed/ } + specify { expect(flash[:notice]).to match(/sign in to proceed/) } end shared_examples_for 'non-owner user trying to modify' do it { should redirect_to(asciicast_path(asciicast)) } - specify { flash[:alert].should =~ /can't/ } + specify { expect(flash[:alert]).to match(/can't/) } end describe AsciicastsController do @@ -45,7 +45,7 @@ before do allow(controller).to receive(:view_counter) { view_counter } - Asciicast.should_receive(:find).and_return(asciicast) + expect(Asciicast).to receive(:find).and_return(asciicast) asciicast.title = 'some tit' end @@ -66,7 +66,7 @@ with(asciicast, cookies) end - specify { assigns(:asciicast).should == asciicast_decorator } + specify { expect(assigns(:asciicast)).to eq(asciicast_decorator) } end context 'for json request' do @@ -98,7 +98,7 @@ let(:make_request) { get :edit, :id => asciicast.id } before do - Asciicast.should_receive(:find).and_return(asciicast) + expect(Asciicast).to receive(:find).and_return(asciicast) asciicast.user = user end @@ -133,7 +133,7 @@ let(:make_request) { put :update, :id => asciicast.id, :asciicast => { } } before do - Asciicast.should_receive(:find).and_return(asciicast) + expect(Asciicast).to receive(:find).and_return(asciicast) asciicast.user = user end @@ -144,17 +144,17 @@ context 'when update succeeds' do before do - asciicast.should_receive(:update_attributes).and_return(true) + expect(asciicast).to receive(:update_attributes).and_return(true) make_request end it { should redirect_to(asciicast_path(asciicast)) } - specify { flash[:notice].should =~ /was updated/ } + specify { expect(flash[:notice]).to match(/was updated/) } end context 'when update fails' do before do - asciicast.should_receive(:update_attributes).and_return(false) + expect(asciicast).to receive(:update_attributes).and_return(false) make_request end @@ -184,7 +184,7 @@ let(:make_request) { delete :destroy, :id => asciicast.id } before do - Asciicast.should_receive(:find).and_return(asciicast) + expect(Asciicast).to receive(:find).and_return(asciicast) asciicast.user = user end @@ -195,22 +195,22 @@ context 'when destroy succeeds' do before do - asciicast.should_receive(:destroy).and_return(true) + expect(asciicast).to receive(:destroy).and_return(true) make_request end it { should redirect_to(profile_path(user)) } - specify { flash[:notice].should =~ /was deleted/ } + specify { expect(flash[:notice]).to match(/was deleted/) } end context 'when destroy fails' do before do - asciicast.should_receive(:destroy).and_return(false) + expect(asciicast).to receive(:destroy).and_return(false) make_request end it { should redirect_to(asciicast_path(asciicast)) } - specify { flash[:alert].should =~ /again/ } + specify { expect(flash[:alert]).to match(/again/) } end end diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index 6dcd6e7..e82d5ea 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -10,7 +10,7 @@ it "returns http success" do get 'show' - response.should be_success + expect(response).to be_success end end @@ -21,14 +21,14 @@ it "returns http success" do get 'show' - response.should be_success + expect(response).to be_success end end describe 'when there are no casts at all' do it "returns http success" do get 'show' - response.should be_success + expect(response).to be_success end end end diff --git a/spec/controllers/user_tokens_controller_spec.rb b/spec/controllers/user_tokens_controller_spec.rb index 2a43c4a..6774f87 100644 --- a/spec/controllers/user_tokens_controller_spec.rb +++ b/spec/controllers/user_tokens_controller_spec.rb @@ -24,14 +24,14 @@ let(:user) { nil } it { should redirect_to(login_path) } - specify { flash[:notice].should =~ /sign in to proceed/ } + specify { expect(flash[:notice]).to match(/sign in to proceed/) } end context "when # of claimed asciicasts is nil" do let(:claimed_num) { nil } it 'displays error page' do - response.should render_template(:error) + expect(response).to render_template(:error) end end @@ -39,14 +39,14 @@ let(:claimed_num) { 0 } it { should redirect_to(profile_path(user)) } - specify { flash[:notice].should =~ /Authenticated/ } + specify { expect(flash[:notice]).to match(/Authenticated/) } end context "when # of claimed asciicast is > 0" do let(:claimed_num) { 1 } it { should redirect_to(profile_path(user)) } - specify { flash[:notice].should =~ /Claimed #{claimed_num}/ } + specify { expect(flash[:notice]).to match(/Claimed #{claimed_num}/) } end end diff --git a/spec/decorators/asciicast_decorator_spec.rb b/spec/decorators/asciicast_decorator_spec.rb index 19e6af1..05264d7 100644 --- a/spec/decorators/asciicast_decorator_spec.rb +++ b/spec/decorators/asciicast_decorator_spec.rb @@ -230,7 +230,7 @@ } before do - asciicast.stub(:id => 123) + allow(asciicast).to receive(:id).and_return(123) end it 'should be an async script tag including asciicast id' do diff --git a/spec/features/playback_spec.rb b/spec/features/playback_spec.rb index ce4f912..0bbfd6c 100644 --- a/spec/features/playback_spec.rb +++ b/spec/features/playback_spec.rb @@ -26,7 +26,7 @@ def inject_on_finished_callback visit asciicast_path(asciicast, speed: 5) find(".play-button").find(".arrow").click inject_on_finished_callback - page.should have_selector('body .finished') + expect(page).to have_selector('body .finished') end end diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb index e6e128f..11f56e0 100644 --- a/spec/models/comment_spec.rb +++ b/spec/models/comment_spec.rb @@ -3,7 +3,7 @@ describe Comment do it "factory should be valid" do - FactoryGirl.build(:comment).should be_valid + expect(FactoryGirl.build(:comment)).to be_valid end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index a6c845e..88ee9a8 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -96,8 +96,8 @@ it 'returns created UserToken' do ut = user.add_user_token(token) - ut.should be_kind_of(UserToken) - ut.id.should_not be(nil) + expect(ut).to be_kind_of(UserToken) + expect(ut.id).not_to be(nil) end end @@ -107,7 +107,7 @@ it 'returns existing UserToken' do ut = user.add_user_token(token) - ut.should == existing_token + expect(ut).to eq(existing_token) end end end diff --git a/spec/models/user_token_spec.rb b/spec/models/user_token_spec.rb index f1e76e6..a106311 100644 --- a/spec/models/user_token_spec.rb +++ b/spec/models/user_token_spec.rb @@ -2,6 +2,6 @@ describe UserToken do it "has valid factory" do - FactoryGirl.build(:user_token).should be_valid + expect(FactoryGirl.build(:user_token)).to be_valid end end diff --git a/spec/routing/connect_spec.rb b/spec/routing/connect_spec.rb index 351f928..91f713f 100644 --- a/spec/routing/connect_spec.rb +++ b/spec/routing/connect_spec.rb @@ -2,7 +2,7 @@ describe 'connect routing' do it 'routes /connect/:user_token to user_tokens#create for user_token' do - { :get => '/connect/jolka-misio' }.should route_to( + expect({ :get => '/connect/jolka-misio' }).to route_to( :controller => 'user_tokens', :action => 'create', :user_token => 'jolka-misio' diff --git a/spec/support/controller_macros.rb b/spec/support/controller_macros.rb index 6b26434..fa31720 100644 --- a/spec/support/controller_macros.rb +++ b/spec/support/controller_macros.rb @@ -1,7 +1,7 @@ module Asciinema module ControllerMacros def login_as(user) - controller.stub(:current_user => user) + allow(controller).to receive(:current_user).and_return(user) end end end
11 years ago
allow(asciicast).to receive(:id).and_return(123)
end
it 'should be an async script tag including asciicast id' do
expect(decorator.embed_script).to match(script_regexp)
end
end
describe '#formatted_duration' do
subject { decorator.formatted_duration }
context "when it's below 1 minute" do
before do
asciicast.duration = 7.49
end
it { should eq("00:07") }
end
context "when it's over 1 minute" do
before do
asciicast.duration = 77.49
end
it { should eq("01:17") }
end
end
end