forked from rails/jbuilder
/
jbuilder_template_test.rb
122 lines (98 loc) · 2.68 KB
/
jbuilder_template_test.rb
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
require 'test/unit'
require 'action_view'
require 'action_view/testing/resolvers'
require 'active_support/cache'
require 'jbuilder'
module Rails
class Cache
def initialize
clear
end
def clear; @cache = {}; end
def write(k, v, opt={})
@cache[k] = v
end
def read(k, opt={})
@cache[k]
end
def fetch(k, opt={}, &block)
@cache[k] || @cache[k] = block.call
end
end
def self.cache; @cache ||= Cache.new; end
end
class JbuilderTemplateTest < ActionView::TestCase
def partials
{ "_partial.json.jbuilder" => 'json.content "hello"' }
end
def render_jbuilder(source)
@rendered = []
lookup_context.view_paths = [ActionView::FixtureResolver.new(partials.merge("test.json.jbuilder" => source))]
ActionView::Template.new(source, "test", JbuilderHandler, :virtual_path => "test").render(self, {}).strip
end
test "rendering" do
json = render_jbuilder <<-JBUILDER
json.content "hello"
JBUILDER
assert_equal "hello", MultiJson.load(json)["content"]
end
test "key_format! with parameter" do
json = render_jbuilder <<-JBUILDER
json.key_format! :camelize => [:lower]
json.camel_style "for JS"
JBUILDER
assert_equal ['camelStyle'], MultiJson.load(json).keys
end
test "key_format! propagates to child elements" do
json = render_jbuilder <<-JBUILDER
json.key_format! :upcase
json.level1 "one"
json.level2 do
json.value "two"
end
JBUILDER
result = MultiJson.load(json)
assert_equal "one", result["LEVEL1"]
assert_equal "two", result["LEVEL2"]["VALUE"]
end
test "partial! renders partial" do
json = render_jbuilder <<-JBUILDER
json.partial! 'partial'
JBUILDER
assert_equal "hello", MultiJson.load(json)["content"]
end
test "fragment caching a JSON object" do
self.controller.perform_caching = true
Rails.cache.clear
render_jbuilder <<-JBUILDER
json.cache!("cachekey") do
json.name "Cache"
end
JBUILDER
json = render_jbuilder <<-JBUILDER
json.cache!("cachekey") do
json.name "Miss"
end
JBUILDER
MultiJson.load(json).tap do |parsed|
assert_equal "Cache", parsed['name']
end
end
test "fragment caching deserializes an array" do
Rails.cache.clear
self.controller.perform_caching = true
render_jbuilder <<-JBUILDER
json.cache!("cachekey") do
json.array! ['a', 'b', 'c']
end
JBUILDER
json = render_jbuilder <<-JBUILDER
json.cache!("cachekey") do
json.array! ['1', '2', '3']
end
JBUILDER
MultiJson.load(json).tap do |parsed|
assert_equal ["a", "b", "c"], parsed
end
end
end