Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2017-01-11 01:41:04 +0300
committerRémy Coutable <remy@rymai.me>2017-01-18 18:38:35 +0300
commit061bb6eb6ed0ca6be3c571b3fcfd14a6f9729205 (patch)
tree2b87e3ea5d1e67b19c515891d19b466c80040a04 /spec/lib/gitlab/view
parente950830ba6a0efa3b0992e6e55cb5b5842f8573a (diff)
More improvements to presenters
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'spec/lib/gitlab/view')
-rw-r--r--spec/lib/gitlab/view/presenter/base_spec.rb29
-rw-r--r--spec/lib/gitlab/view/presenter/delegated_spec.rb22
-rw-r--r--spec/lib/gitlab/view/presenter/factory_spec.rb32
-rw-r--r--spec/lib/gitlab/view/presenter/simple_spec.rb18
4 files changed, 51 insertions, 50 deletions
diff --git a/spec/lib/gitlab/view/presenter/base_spec.rb b/spec/lib/gitlab/view/presenter/base_spec.rb
index 57b98276622..f2c152cdcd4 100644
--- a/spec/lib/gitlab/view/presenter/base_spec.rb
+++ b/spec/lib/gitlab/view/presenter/base_spec.rb
@@ -6,32 +6,45 @@ describe Gitlab::View::Presenter::Base do
Struct.new(:subject).include(described_class)
end
- subject do
- presenter_class.new(project)
+ describe '.presenter?' do
+ it 'returns true' do
+ presenter = presenter_class.new(project)
+
+ expect(presenter.class).to be_presenter
+ end
end
describe '.presents' do
it 'exposes #subject with the given keyword' do
presenter_class.presents(:foo)
+ presenter = presenter_class.new(project)
- expect(subject.foo).to eq(project)
+ expect(presenter.foo).to eq(project)
end
end
describe '#can?' do
- let(:project) { create(:empty_project) }
-
context 'user is not allowed' do
it 'returns false' do
- expect(subject.can?(nil, :read_project)).to be_falsy
+ presenter = presenter_class.new(build_stubbed(:empty_project))
+
+ expect(presenter.can?(nil, :read_project)).to be_falsy
end
end
context 'user is allowed' do
- let(:project) { create(:empty_project, :public) }
+ it 'returns true' do
+ presenter = presenter_class.new(build_stubbed(:empty_project, :public))
+ expect(presenter.can?(nil, :read_project)).to be_truthy
+ end
+ end
+
+ context 'subject is overriden' do
it 'returns true' do
- expect(subject.can?(nil, :read_project)).to be_truthy
+ presenter = presenter_class.new(build_stubbed(:empty_project, :public))
+
+ expect(presenter.can?(nil, :read_project, build_stubbed(:empty_project))).to be_falsy
end
end
end
diff --git a/spec/lib/gitlab/view/presenter/delegated_spec.rb b/spec/lib/gitlab/view/presenter/delegated_spec.rb
index 816d6b7c6d4..888ab80cad5 100644
--- a/spec/lib/gitlab/view/presenter/delegated_spec.rb
+++ b/spec/lib/gitlab/view/presenter/delegated_spec.rb
@@ -1,33 +1,29 @@
require 'spec_helper'
describe Gitlab::View::Presenter::Delegated do
- let(:project) { double(:project, foo: 'bar') }
+ let(:project) { double(:project, bar: 'baz') }
let(:presenter_class) do
Class.new(described_class)
end
- subject do
- presenter_class.new(project)
- end
-
it 'includes Gitlab::View::Presenter::Base' do
expect(described_class).to include(Gitlab::View::Presenter::Base)
end
describe '#initialize' do
- subject do
- presenter_class.new(project, user: 'user', foo: 'bar')
- end
-
it 'takes arbitrary key/values and exposes them' do
- expect(subject.user).to eq('user')
- expect(subject.foo).to eq('bar')
+ presenter = presenter_class.new(project, user: 'user', foo: 'bar')
+
+ expect(presenter.user).to eq('user')
+ expect(presenter.foo).to eq('bar')
end
end
describe 'delegation' do
- it 'does not forward missing methods to subject' do
- expect(subject.foo).to eq('bar')
+ it 'forwards missing methods to subject' do
+ presenter = presenter_class.new(project)
+
+ expect(presenter.bar).to eq('baz')
end
end
end
diff --git a/spec/lib/gitlab/view/presenter/factory_spec.rb b/spec/lib/gitlab/view/presenter/factory_spec.rb
index 7a65429b500..55c5ecbf92f 100644
--- a/spec/lib/gitlab/view/presenter/factory_spec.rb
+++ b/spec/lib/gitlab/view/presenter/factory_spec.rb
@@ -1,42 +1,38 @@
require 'spec_helper'
describe Gitlab::View::Presenter::Factory do
- let(:variable) { create(:ci_variable) }
+ let(:build) { Ci::Build.new }
describe '#initialize' do
context 'without optional parameters' do
- subject do
- described_class.new(variable)
- end
-
it 'takes a subject and optional params' do
- expect { subject }.not_to raise_error
+ presenter = described_class.new(build)
+
+ expect { presenter }.not_to raise_error
end
end
context 'with optional parameters' do
- subject do
- described_class.new(variable, user: 'user')
- end
-
it 'takes a subject and optional params' do
- expect { subject }.not_to raise_error
+ presenter = described_class.new(build, user: 'user')
+
+ expect { presenter }.not_to raise_error
end
end
end
describe '#fabricate!' do
- subject do
- described_class.new(variable, user: 'user', foo: 'bar').fabricate!
- end
-
it 'exposes given params' do
- expect(subject.user).to eq('user')
- expect(subject.foo).to eq('bar')
+ presenter = described_class.new(build, user: 'user', foo: 'bar').fabricate!
+
+ expect(presenter.user).to eq('user')
+ expect(presenter.foo).to eq('bar')
end
it 'detects the presenter based on the given subject' do
- expect(subject).to be_a(Ci::Variable::Presenter)
+ presenter = described_class.new(build).fabricate!
+
+ expect(presenter).to be_a(Ci::BuildPresenter)
end
end
end
diff --git a/spec/lib/gitlab/view/presenter/simple_spec.rb b/spec/lib/gitlab/view/presenter/simple_spec.rb
index baf074019ec..b489bdf1981 100644
--- a/spec/lib/gitlab/view/presenter/simple_spec.rb
+++ b/spec/lib/gitlab/view/presenter/simple_spec.rb
@@ -6,28 +6,24 @@ describe Gitlab::View::Presenter::Simple do
Class.new(described_class)
end
- subject do
- presenter_class.new(project)
- end
-
it 'includes Gitlab::View::Presenter::Base' do
expect(described_class).to include(Gitlab::View::Presenter::Base)
end
describe '#initialize' do
- subject do
- presenter_class.new(project, user: 'user', foo: 'bar')
- end
-
it 'takes arbitrary key/values and exposes them' do
- expect(subject.user).to eq('user')
- expect(subject.foo).to eq('bar')
+ presenter = presenter_class.new(project, user: 'user', foo: 'bar')
+
+ expect(presenter.user).to eq('user')
+ expect(presenter.foo).to eq('bar')
end
end
describe 'delegation' do
it 'does not forward missing methods to subject' do
- expect { subject.foo }.to raise_error(NoMethodError)
+ presenter = presenter_class.new(project)
+
+ expect { presenter.foo }.to raise_error(NoMethodError)
end
end
end