File: jbuilder_spec.rb

package info (click to toggle)
ruby-gon 6.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 504 kB
  • sloc: ruby: 1,383; makefile: 9
file content (75 lines) | stat: -rw-r--r-- 2,571 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
describe Gon do

  describe '.jbuilder' do
    context 'render jbuilder templates' do

      before do
        Gon.clear
        controller.instance_variable_set('@objects', objects)
      end

      let(:controller) { ActionController::Base.new }
      let(:objects) { [1, 2] }

      it 'render json from jbuilder template' do
        Gon.jbuilder :template => 'spec/test_data/sample.json.jbuilder', :controller => controller
        expect(Gon.objects.length).to eq(2)
      end

      it 'render json from jbuilder template with locals' do
        Gon.jbuilder :template => 'spec/test_data/sample_with_locals.json.jbuilder',
                     :controller => controller,
                     :locals => { :some_local => 1234, :some_complex_local => OpenStruct.new(:id => 1234) }
        expect(Gon.some_local).to eq(1234)
        expect(Gon.some_complex_local_id).to eq(1234)
      end

      it 'render json from jbuilder template with locals' do
        Gon.jbuilder :template => 'spec/test_data/sample_with_helpers.json.jbuilder', :controller => controller
        expect(Gon.date).to eq('about 6 hours')
      end

      it 'render json from jbuilder template with controller methods' do
        class << controller
          def private_controller_method
            'gon test helper works'
          end
          helper_method :private_controller_method
          private :private_controller_method
        end

        Gon.jbuilder :template => 'spec/test_data/sample_with_controller_method.json.jbuilder', :controller => controller
        expect(Gon.data_from_method).to eq('gon test helper works')
      end

      it 'render json from jbuilder template with a partial' do
        controller.view_paths << 'spec/test_data'
        Gon.jbuilder :template => 'spec/test_data/sample_with_partial.json.jbuilder', :controller => controller
        expect(Gon.objects.length).to eq(2)
      end

      context 'within Rails' do
        before do
          module ::Rails
          end

          allow(Rails).to receive_message_chain("application.routes.url_helpers.instance_methods") { [:user_path] }
          controller.instance_variable_set('@user_id', 1)
        end

        after do
          Object.send(:remove_const, :Rails)
        end

        it 'includes url_helpers' do
          expect(controller).to receive(:user_path) { |id| "/users/#{id}" }
          Gon.jbuilder :template => 'spec/test_data/sample_url_helpers.json.jbuilder', :controller => controller
          expect(Gon.url).to eq '/users/1'
        end
      end

    end

  end

end