File: test_hash_renderer.rb

package info (click to toggle)
ruby-rabl-rails 0.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 268 kB
  • ctags: 179
  • sloc: ruby: 1,480; makefile: 2
file content (90 lines) | stat: -rw-r--r-- 2,566 bytes parent folder | download | duplicates (3)
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
require 'helper'

class TestHashRenderer < MINITEST_TEST_CLASS
  describe 'hash renderer' do
    def render(locals = nil)
      RablRails::Renderers::Hash.render(@template, @context, locals)
    end

    def with_cache
      ActionController::Base.stub :perform_caching, true do
        Rails.stub :cache, @cache do
          yield
        end
      end
    end

    before do
      @cache    = MiniTest::Mock.new
      @resource = User.new(1, 'Marty')
      @context  = Context.new
      @context.assigns['user'] = @resource
      @template = RablRails::CompiledTemplate.new
      @template.data = :@user
      @template.add_node RablRails::Nodes::Attribute.new(name: :name)
    end

    describe 'cache' do
      it 'uses resource cache_key by default' do
        def @resource.cache_key; 'marty_cache' end
        @template.cache_key = nil
        @cache.expect :fetch, { user: 'Marty' }, ['marty_cache']
        with_cache {
          assert_equal({ user: 'Marty' }, render)
        }
        @cache.verify
      end

      it 'uses template cache_key if present' do
        @template.cache_key = ->(u) { u.name }
        @cache.expect :fetch, { user: 'Marty' }, ['Marty']
        with_cache {
          assert_equal({ user: 'Marty' }, render)
        }
        @cache.verify
      end
    end

    it 'uses a to_hash visitor' do
      visitor = MiniTest::Mock.new
      visitor.expect :instance_variable_get, @resource, [:@user]
      visitor.expect :reset_for, nil, [@resource]
      visitor.expect :visit, nil, [Array]
      visitor.expect :result, { some: 'result' }

      Visitors::ToHash.stub :new, visitor do
        assert_equal({ some: 'result' }, render)
      end

      visitor.verify
    end

    it 'retrieves data from context if exist' do
      @template.data = :context_method
      resource = User.new(2, 'Biff')
      @context.stub :context_method, resource do
        assert_equal({ name: 'Biff' }, render)
      end
    end

    it 'uses assigns from context if context has no data method' do
      assert_equal({ name: 'Marty' }, render)
    end

    it "uses resource passed in locals if template don't have data" do
      @template.data = nil
      resource = User.new(2, 'Biff')
      assert_equal({ name: 'Biff' }, render(resource: resource))
    end

    it 'uses template root_name option' do
      @template.root_name = :user
      assert_equal({ user: { name: 'Marty' } }, render)
    end

    it 'renders collection' do
      @context.assigns['user'] = [@resource]
      assert_equal([{ name: 'Marty' }], render)
    end
  end
end