|
1 | 1 | require 'rails_helper'
|
2 | 2 |
|
3 | 3 | RSpec.describe ActiveAdmin::ResourceController::Decorators do
|
4 |
| - let(:controller_class) do |
5 |
| - Class.new do |
6 |
| - include ActiveAdmin::ResourceController::Decorators |
7 |
| - |
8 |
| - public :apply_decorator, :apply_collection_decorator |
9 |
| - end |
10 |
| - end |
11 |
| - |
12 |
| - let(:controller) { controller_class.new } |
13 |
| - let(:active_admin_config) { double(decorator_class: decorator_class) } |
14 |
| - before do |
15 |
| - allow(controller).to receive(:active_admin_config).and_return(active_admin_config) |
16 |
| - allow(controller).to receive(:action_name).and_return(action) |
17 |
| - end |
18 |
| - |
19 | 4 | describe '#apply_decorator' do
|
20 |
| - let(:action) { 'show' } |
21 | 5 | let(:resource) { Post.new }
|
| 6 | + let(:controller) { controller_with_decorator(action, decorator_class) } |
22 | 7 | subject(:applied) { controller.apply_decorator(resource) }
|
23 | 8 |
|
24 |
| - context 'with a decorator configured' do |
| 9 | + context "in show action" do |
| 10 | + let(:action) { 'show' } |
25 | 11 | let(:decorator_class) { PostDecorator }
|
26 |
| - it { is_expected.to be_kind_of(PostDecorator) } |
27 |
| - |
28 |
| - context 'with form' do |
29 |
| - let(:action) { 'update' } |
30 | 12 |
|
31 |
| - it "does not decorate when :decorate is set to false" do |
32 |
| - form = double |
33 |
| - allow(form).to receive(:options).and_return(decorate: false) |
34 |
| - allow(active_admin_config).to receive(:get_page_presenter).and_return(form) |
35 |
| - is_expected.not_to be_kind_of(PostDecorator) |
36 |
| - end |
37 |
| - end |
| 13 | + it { is_expected.to be_kind_of(PostDecorator) } |
38 | 14 | end
|
39 | 15 |
|
40 |
| - context 'with no decorator configured' do |
| 16 | + context "in update action" do |
| 17 | + let(:action) { 'update' } |
41 | 18 | let(:decorator_class) { nil }
|
42 |
| - it { is_expected.to be_kind_of(Post) } |
| 19 | + |
| 20 | + it { is_expected.not_to be_kind_of(PostDecorator) } |
43 | 21 | end
|
44 | 22 | end
|
45 | 23 |
|
46 | 24 | describe '#apply_collection_decorator' do
|
47 | 25 | before { Post.create! }
|
48 |
| - let(:action) { 'index' } |
49 | 26 | let(:collection) { Post.where nil }
|
| 27 | + let(:controller) { controller_with_decorator("index", PostDecorator) } |
50 | 28 | subject(:applied) { controller.apply_collection_decorator(collection) }
|
51 | 29 |
|
52 | 30 | context 'when a decorator is configured' do
|
53 | 31 | context 'and it is using a recent version of draper' do
|
54 |
| - let(:decorator_class) { PostDecorator } |
55 |
| - |
56 | 32 | it 'calling certain scope collections work' do
|
57 | 33 | # This is an example of one of the methods that was consistently
|
58 | 34 | # failing before this feature existed
|
|
67 | 43 | end
|
68 | 44 |
|
69 | 45 | describe 'form actions' do
|
70 |
| - let(:action) { 'edit' } |
71 | 46 | let(:resource) { Post.new }
|
72 |
| - let(:form_presenter) { double options: { decorate: decorate_form } } |
73 |
| - let(:decorator_class) { PostDecorator } |
74 |
| - before { allow(active_admin_config).to receive(:get_page_presenter).with(:form).and_return form_presenter } |
| 47 | + let(:controller) { controller_with_decorator("edit", decorator_class) } |
75 | 48 |
|
76 | 49 | subject(:applied) { controller.apply_decorator(resource) }
|
77 | 50 |
|
78 | 51 | context 'when the form is not configured to decorate' do
|
79 |
| - let(:decorate_form) { false } |
| 52 | + let(:decorator_class) { nil } |
80 | 53 | it { is_expected.to be_kind_of(Post) }
|
81 | 54 | end
|
82 | 55 |
|
83 | 56 | context 'when the form is configured to decorate' do
|
84 |
| - let(:decorate_form) { true } |
| 57 | + let(:decorator_class) { PostDecorator } |
85 | 58 | it { is_expected.to be_kind_of(PostDecorator) }
|
86 | 59 | end
|
87 | 60 | end
|
|
0 commit comments