|
|
|
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
|