rabl 0.13.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +4 -0
- data/Gemfile +2 -1
- data/Rakefile +2 -2
- data/fixtures/ashared/views_rails_3/users/phone_number.xml.rabl +1 -0
- data/fixtures/padrino_test/app/views +1 -0
- data/fixtures/padrino_test/db/migrate +1 -0
- data/fixtures/padrino_test/models +1 -0
- data/fixtures/padrino_test/test/app/controllers/posts_controller_test.rb +1 -0
- data/fixtures/padrino_test/test/app/controllers/users_controller_test.rb +1 -0
- data/fixtures/rails2/app/models +1 -0
- data/fixtures/rails2/app/views +1 -0
- data/fixtures/rails2/db/migrate +1 -0
- data/fixtures/rails2/test/functionals/posts_controller_test.rb +1 -0
- data/fixtures/rails2/test/functionals/users_controller_test.rb +1 -0
- data/fixtures/rails3/app/models +1 -0
- data/fixtures/rails3/app/views +1 -0
- data/fixtures/rails3/db/migrate +1 -0
- data/fixtures/rails3/test/functional/posts_controller_test.rb +1 -0
- data/fixtures/rails3/test/functional/users_controller_test.rb +1 -0
- data/fixtures/rails3_2/app/models +1 -0
- data/fixtures/rails3_2/app/views +1 -0
- data/fixtures/rails3_2/db/migrate +1 -0
- data/fixtures/rails3_2/test/functional/posts_controller_test.rb +1 -0
- data/fixtures/rails3_2/test/functional/users_controller_test.rb +1 -0
- data/fixtures/rails4/app/models +1 -0
- data/fixtures/rails4/app/views +1 -0
- data/fixtures/rails4/db/migrate +1 -0
- data/fixtures/rails4/test/functional/posts_controller_test.rb +1 -0
- data/fixtures/rails4/test/functional/users_controller_test.rb +1 -0
- data/fixtures/rails5/.gitignore +21 -0
- data/fixtures/rails5/Gemfile +52 -0
- data/fixtures/rails5/README.md +24 -0
- data/fixtures/rails5/Rakefile +13 -0
- data/fixtures/rails5/app/assets/config/manifest.js +3 -0
- data/fixtures/rails5/app/assets/images/.keep +0 -0
- data/fixtures/rails5/app/assets/javascripts/application.js +16 -0
- data/fixtures/rails5/app/assets/javascripts/cable.js +13 -0
- data/fixtures/rails5/app/assets/javascripts/channels/.keep +0 -0
- data/fixtures/rails5/app/assets/stylesheets/application.css +15 -0
- data/fixtures/rails5/app/channels/application_cable/channel.rb +4 -0
- data/fixtures/rails5/app/channels/application_cable/connection.rb +4 -0
- data/fixtures/rails5/app/controllers/application_controller.rb +3 -0
- data/fixtures/rails5/app/controllers/concerns/.keep +0 -0
- data/fixtures/rails5/app/controllers/posts_controller.rb +17 -0
- data/fixtures/rails5/app/controllers/users_controller.rb +11 -0
- data/fixtures/rails5/app/helpers/application_helper.rb +5 -0
- data/fixtures/rails5/app/jobs/application_job.rb +2 -0
- data/fixtures/rails5/app/mailers/application_mailer.rb +4 -0
- data/fixtures/rails5/app/models +1 -0
- data/fixtures/rails5/app/views +1 -0
- data/fixtures/rails5/bin/bundle +3 -0
- data/fixtures/rails5/bin/rails +9 -0
- data/fixtures/rails5/bin/rake +9 -0
- data/fixtures/rails5/bin/setup +34 -0
- data/fixtures/rails5/bin/spring +15 -0
- data/fixtures/rails5/bin/update +29 -0
- data/fixtures/rails5/config.ru +5 -0
- data/fixtures/rails5/config/application.rb +15 -0
- data/fixtures/rails5/config/boot.rb +3 -0
- data/fixtures/rails5/config/cable.yml +9 -0
- data/fixtures/rails5/config/database.yml +25 -0
- data/fixtures/rails5/config/environment.rb +5 -0
- data/fixtures/rails5/config/environments/development.rb +54 -0
- data/fixtures/rails5/config/environments/production.rb +86 -0
- data/fixtures/rails5/config/environments/test.rb +42 -0
- data/fixtures/rails5/config/initializers/application_controller_renderer.rb +6 -0
- data/fixtures/rails5/config/initializers/assets.rb +11 -0
- data/fixtures/rails5/config/initializers/backtrace_silencers.rb +7 -0
- data/fixtures/rails5/config/initializers/cookies_serializer.rb +5 -0
- data/fixtures/rails5/config/initializers/filter_parameter_logging.rb +4 -0
- data/fixtures/rails5/config/initializers/inflections.rb +16 -0
- data/fixtures/rails5/config/initializers/mime_types.rb +4 -0
- data/fixtures/rails5/config/initializers/new_framework_defaults.rb +24 -0
- data/fixtures/rails5/config/initializers/session_store.rb +3 -0
- data/fixtures/rails5/config/initializers/wrap_parameters.rb +14 -0
- data/fixtures/rails5/config/locales/en.yml +23 -0
- data/fixtures/rails5/config/puma.rb +47 -0
- data/fixtures/rails5/config/routes.rb +8 -0
- data/fixtures/rails5/config/secrets.yml +22 -0
- data/fixtures/rails5/config/spring.rb +6 -0
- data/fixtures/rails5/db/migrate +1 -0
- data/fixtures/rails5/db/schema.rb +41 -0
- data/fixtures/rails5/db/seeds.rb +7 -0
- data/fixtures/rails5/lib/assets/.keep +0 -0
- data/fixtures/rails5/lib/tasks/.keep +0 -0
- data/fixtures/rails5/log/.keep +0 -0
- data/fixtures/rails5/public/404.html +67 -0
- data/fixtures/rails5/public/422.html +67 -0
- data/fixtures/rails5/public/500.html +66 -0
- data/fixtures/rails5/public/apple-touch-icon-precomposed.png +0 -0
- data/fixtures/rails5/public/apple-touch-icon.png +0 -0
- data/fixtures/rails5/public/favicon.ico +0 -0
- data/fixtures/rails5/public/robots.txt +5 -0
- data/fixtures/rails5/test/controllers/.keep +0 -0
- data/fixtures/rails5/test/fixtures/.keep +0 -0
- data/fixtures/rails5/test/fixtures/files/.keep +0 -0
- data/fixtures/rails5/test/helpers/.keep +0 -0
- data/fixtures/rails5/test/integration/.keep +0 -0
- data/fixtures/rails5/test/mailers/.keep +0 -0
- data/fixtures/rails5/test/models/.keep +0 -0
- data/fixtures/rails5/test/test_helper.rb +26 -0
- data/fixtures/rails5/tmp/.keep +0 -0
- data/fixtures/rails5/vendor/assets/javascripts/.keep +0 -0
- data/fixtures/rails5/vendor/assets/stylesheets/.keep +0 -0
- data/fixtures/sinatra_test/db/migrate +1 -0
- data/fixtures/sinatra_test/models +1 -0
- data/fixtures/sinatra_test/test/functional/posts_controller_test.rb +1 -0
- data/fixtures/sinatra_test/test/functional/users_controller_test.rb +1 -0
- data/fixtures/sinatra_test/views +1 -0
- data/lib/rabl.rb +1 -1
- data/lib/rabl/configuration.rb +1 -1
- data/lib/rabl/digestor.rb +3 -37
- data/lib/rabl/digestor/rails3.rb +10 -0
- data/lib/rabl/digestor/rails41.rb +10 -0
- data/lib/rabl/digestor/rails5.rb +4 -0
- data/lib/rabl/engine.rb +1 -1
- data/lib/rabl/version.rb +1 -1
- metadata +99 -3
- data/fixtures/ashared/views_rails_3/users/phone_number.xml.rabl +0 -8
- data/fixtures/padrino_test/test/app/controllers/posts_controller_test.rb +0 -108
- data/fixtures/padrino_test/test/app/controllers/users_controller_test.rb +0 -87
- data/fixtures/rails2/test/functionals/posts_controller_test.rb +0 -108
- data/fixtures/rails2/test/functionals/users_controller_test.rb +0 -87
- data/fixtures/rails3/test/functional/posts_controller_test.rb +0 -108
- data/fixtures/rails3/test/functional/users_controller_test.rb +0 -87
- data/fixtures/rails3_2/test/functional/posts_controller_test.rb +0 -263
- data/fixtures/rails3_2/test/functional/users_controller_test.rb +0 -87
- data/fixtures/rails4/test/functional/posts_controller_test.rb +0 -248
- data/fixtures/rails4/test/functional/users_controller_test.rb +0 -87
- data/fixtures/sinatra_test/test/functional/posts_controller_test.rb +0 -108
- data/fixtures/sinatra_test/test/functional/users_controller_test.rb +0 -87
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
# Lives in <rabl>/test/integration/posts_controller_test.rb
|
|
2
|
-
# Symlinked to fixture applications
|
|
3
|
-
|
|
4
|
-
begin # Padrino
|
|
5
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../test_config.rb')
|
|
6
|
-
rescue LoadError # Rails
|
|
7
|
-
require File.expand_path(File.dirname(__FILE__) + '/../test_helper.rb')
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
context "PostsController" do
|
|
11
|
-
helper(:json_output) { JSON.parse(last_response.body) }
|
|
12
|
-
|
|
13
|
-
setup do
|
|
14
|
-
create_users!
|
|
15
|
-
Post.delete_all
|
|
16
|
-
@post1 = Post.create(:title => "Foo", :body => "Bar", :user_id => @user1.id)
|
|
17
|
-
@post2 = Post.create(:title => "Baz", :body => "Bah", :user_id => @user2.id)
|
|
18
|
-
@post3 = Post.create(:title => "Kaz", :body => "Paz", :user_id => @user3.id)
|
|
19
|
-
@posts = [@post1, @post2, @post3]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
context "for index action" do
|
|
23
|
-
setup do
|
|
24
|
-
get "/posts", :format => :json
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Attributes (regular)
|
|
28
|
-
asserts("contains post titles") do
|
|
29
|
-
json_output['articles'].map { |o| o["article"]["title"] }
|
|
30
|
-
end.equals { @posts.map(&:title) }
|
|
31
|
-
|
|
32
|
-
asserts("contains post bodies") do
|
|
33
|
-
json_output['articles'].map { |o| o["article"]["body"] }
|
|
34
|
-
end.equals { @posts.map(&:body) }
|
|
35
|
-
|
|
36
|
-
# Attributes (custom name)
|
|
37
|
-
asserts("contains post posted_at") do
|
|
38
|
-
json_output['articles'].map { |o| o["article"]["posted_at"] }
|
|
39
|
-
end.equals { @posts.map(&:created_at).map(&:iso8601) }
|
|
40
|
-
|
|
41
|
-
# Child
|
|
42
|
-
asserts("contains post user child username") do
|
|
43
|
-
json_output['articles'].map { |o| o["article"]["user"]["username"] }
|
|
44
|
-
end.equals { @posts.map(&:user).map(&:username) }
|
|
45
|
-
|
|
46
|
-
asserts("contains post user child role") do
|
|
47
|
-
json_output['articles'].map { |o| o["article"]["user"]["role"] }
|
|
48
|
-
end.equals { ["normal", "normal", "admin"] }
|
|
49
|
-
|
|
50
|
-
# Child Numbers of the Child User
|
|
51
|
-
asserts("contains post user child numbers") do
|
|
52
|
-
json_output['articles'].map { |o| o["article"]["user"]["pnumbers"][0]["pnumber"]["formatted"] }
|
|
53
|
-
end.equals { @posts.map(&:user).map(&:phone_numbers).map(&:first).map(&:formatted) }
|
|
54
|
-
|
|
55
|
-
# Glue (username to article)
|
|
56
|
-
asserts("contains glued usernames") do
|
|
57
|
-
json_output['articles'].map { |o| o["article"]["author_name"] }
|
|
58
|
-
end.equals { @posts.map(&:user).map(&:username) }
|
|
59
|
-
|
|
60
|
-
# Conditional Child (admin)
|
|
61
|
-
asserts("contains admin child only for admins") do
|
|
62
|
-
json_output['articles'].map { |o| o["article"]["admin"]["username"] if o["article"].has_key?("admin") }.compact
|
|
63
|
-
end.equals { [@user3.username] }
|
|
64
|
-
|
|
65
|
-
# Conditional Node (created_by_admin)
|
|
66
|
-
asserts("contains created_by_admin node for admins") do
|
|
67
|
-
json_output['articles'].last['article']['created_by_admin']
|
|
68
|
-
end.equals { true }
|
|
69
|
-
|
|
70
|
-
denies("contains no created_by_admin node for non-admins") do
|
|
71
|
-
json_output['articles'].first['article']
|
|
72
|
-
end.includes(:created_by_admin)
|
|
73
|
-
end # index action
|
|
74
|
-
|
|
75
|
-
context "for show action" do
|
|
76
|
-
setup do
|
|
77
|
-
get "/posts/#{@post1.id}", :format => :json
|
|
78
|
-
json_output['post']
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Attributes (regular)
|
|
82
|
-
asserts("contains post title") { topic['title'] }.equals { @post1.title }
|
|
83
|
-
asserts("contains post body") { topic['body'] }.equals { @post1.body }
|
|
84
|
-
|
|
85
|
-
# Attributes (custom name)
|
|
86
|
-
asserts("contains post posted_at") { topic['posted_at'] }.equals { @post1.created_at.iso8601 }
|
|
87
|
-
|
|
88
|
-
# Child
|
|
89
|
-
asserts("contains post user child username") { topic["user"]["username"] }.equals { @post1.user.username }
|
|
90
|
-
asserts("contains post user child role") { topic["user"]["role"] }.equals { "normal" }
|
|
91
|
-
|
|
92
|
-
# Child Numbers of the Child User
|
|
93
|
-
asserts("contains post user child numbers") do
|
|
94
|
-
topic["user"]["pnumbers"][0]["pnumber"]["formatted"]
|
|
95
|
-
end.equals { @post1.user.phone_numbers[0].formatted }
|
|
96
|
-
|
|
97
|
-
# Glue (username to article)
|
|
98
|
-
asserts("contains glued username") { topic["author_name"] }.equals { @post1.user.username }
|
|
99
|
-
|
|
100
|
-
# Non-ORM Date Node Partial
|
|
101
|
-
context "for date node" do
|
|
102
|
-
setup { json_output['post']['created_date'] }
|
|
103
|
-
asserts("contains date partial with day") { topic['day'] }.equals { @post1.created_at.day }
|
|
104
|
-
asserts("contains date partial with hour") { topic['hour'] }.equals { @post1.created_at.hour }
|
|
105
|
-
asserts("contains date partial with full") { topic['full'] }.equals { @post1.created_at.iso8601 }
|
|
106
|
-
end # date node
|
|
107
|
-
end # show action
|
|
108
|
-
end
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# Lives in <rabl>/test/integration/users_controller_test.rb
|
|
2
|
-
# Symlinked to fixture applications
|
|
3
|
-
|
|
4
|
-
begin # Sinatra
|
|
5
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../test_config.rb')
|
|
6
|
-
rescue LoadError # Rails
|
|
7
|
-
require File.expand_path(File.dirname(__FILE__) + '/../test_helper.rb')
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
context "UsersController" do
|
|
11
|
-
helper(:json_output) { JSON.parse(last_response.body) }
|
|
12
|
-
|
|
13
|
-
setup do
|
|
14
|
-
create_users!
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
context "for index action" do
|
|
18
|
-
# Tests `collection @users` extending from 'show' template
|
|
19
|
-
|
|
20
|
-
setup do
|
|
21
|
-
get "/users"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Attributes (regular)
|
|
25
|
-
asserts("contains user usernames") do
|
|
26
|
-
json_output.map { |u| u["user"]["username"] }
|
|
27
|
-
end.equals { @users.map(&:username) }
|
|
28
|
-
asserts("contains email") do
|
|
29
|
-
json_output.map { |u| u["user"]["email"] }
|
|
30
|
-
end.equals { @users.map(&:email) }
|
|
31
|
-
asserts("contains location") do
|
|
32
|
-
json_output.map { |u| u["user"]["location"] }
|
|
33
|
-
end.equals { @users.map(&:location) }
|
|
34
|
-
|
|
35
|
-
# Attributes (custom name)
|
|
36
|
-
asserts("contains registered_at") do
|
|
37
|
-
json_output.map { |u| u["user"]["registered_at"] }
|
|
38
|
-
end.equals { @users.map(&:created_at).map(&:iso8601) }
|
|
39
|
-
|
|
40
|
-
# Node (renders based on attribute)
|
|
41
|
-
asserts("contains role") do
|
|
42
|
-
json_output.map { |u| u["user"]["role"] }
|
|
43
|
-
end.equals ['normal', 'normal', 'admin']
|
|
44
|
-
|
|
45
|
-
# Child (custom collection name)
|
|
46
|
-
asserts("contains formatted phone numbers") do
|
|
47
|
-
json_output.map { |u| u["user"]["pnumbers"].map { |n| n["pnumber"]["formatted"] } }
|
|
48
|
-
end.equals { @users.map { |u| u.phone_numbers.map(&:formatted) } }
|
|
49
|
-
|
|
50
|
-
# Node (renders collection partial)
|
|
51
|
-
asserts("contains formatted node numbers") do
|
|
52
|
-
json_output.map { |u| u["user"]["node_numbers"].map { |n| n["formatted"] } }
|
|
53
|
-
end.equals { @users.map { |u| u.phone_numbers.map(&:formatted) } }
|
|
54
|
-
end # index
|
|
55
|
-
|
|
56
|
-
context "for show action" do
|
|
57
|
-
# Tests `object :user => :person` custom parent node name
|
|
58
|
-
setup do
|
|
59
|
-
get "/users/#{@user1.id}"
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Attributes (regular)
|
|
63
|
-
asserts("contains username") { json_output["person"]["username"] }.equals { @user1.username }
|
|
64
|
-
asserts("contains email") { json_output["person"]["email"] }.equals { @user1.email }
|
|
65
|
-
asserts("contains location") { json_output["person"]["location"] }.equals { @user1.location }
|
|
66
|
-
# Attributes (custom name)
|
|
67
|
-
asserts("contains registered_at") { json_output["person"]["registered_at"] }.equals { @user1.created_at.iso8601 }
|
|
68
|
-
# Node (renders based on attribute)
|
|
69
|
-
asserts("contains role node") { json_output["person"]["role"] }.equals "normal"
|
|
70
|
-
|
|
71
|
-
# Child (custom collection name)
|
|
72
|
-
asserts("contains first phone number") {
|
|
73
|
-
json_output["person"]["pnumbers"][0]["pnumber"]["formatted"]
|
|
74
|
-
}.equals { @user1.phone_numbers[0].formatted }
|
|
75
|
-
asserts("contains second phone number") {
|
|
76
|
-
json_output["person"]["pnumbers"][1]["pnumber"]["formatted"]
|
|
77
|
-
}.equals { @user1.phone_numbers[1].formatted }
|
|
78
|
-
|
|
79
|
-
# Node (renders collection partial)
|
|
80
|
-
asserts("contains first node number") {
|
|
81
|
-
json_output["person"]["node_numbers"][0]["formatted"]
|
|
82
|
-
}.equals { @user1.phone_numbers[0].formatted }
|
|
83
|
-
asserts("contains second node number") {
|
|
84
|
-
json_output["person"]["node_numbers"][1]["formatted"]
|
|
85
|
-
}.equals { @user1.phone_numbers[1].formatted }
|
|
86
|
-
end # show
|
|
87
|
-
end
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
# Lives in <rabl>/test/integration/posts_controller_test.rb
|
|
2
|
-
# Symlinked to fixture applications
|
|
3
|
-
|
|
4
|
-
begin # Padrino
|
|
5
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../test_config.rb')
|
|
6
|
-
rescue LoadError # Rails
|
|
7
|
-
require File.expand_path(File.dirname(__FILE__) + '/../test_helper.rb')
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
context "PostsController" do
|
|
11
|
-
helper(:json_output) { JSON.parse(last_response.body) }
|
|
12
|
-
|
|
13
|
-
setup do
|
|
14
|
-
create_users!
|
|
15
|
-
Post.delete_all
|
|
16
|
-
@post1 = Post.create(:title => "Foo", :body => "Bar", :user_id => @user1.id)
|
|
17
|
-
@post2 = Post.create(:title => "Baz", :body => "Bah", :user_id => @user2.id)
|
|
18
|
-
@post3 = Post.create(:title => "Kaz", :body => "Paz", :user_id => @user3.id)
|
|
19
|
-
@posts = [@post1, @post2, @post3]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
context "for index action" do
|
|
23
|
-
setup do
|
|
24
|
-
get "/posts", :format => :json
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Attributes (regular)
|
|
28
|
-
asserts("contains post titles") do
|
|
29
|
-
json_output['articles'].map { |o| o["article"]["title"] }
|
|
30
|
-
end.equals { @posts.map(&:title) }
|
|
31
|
-
|
|
32
|
-
asserts("contains post bodies") do
|
|
33
|
-
json_output['articles'].map { |o| o["article"]["body"] }
|
|
34
|
-
end.equals { @posts.map(&:body) }
|
|
35
|
-
|
|
36
|
-
# Attributes (custom name)
|
|
37
|
-
asserts("contains post posted_at") do
|
|
38
|
-
json_output['articles'].map { |o| o["article"]["posted_at"] }
|
|
39
|
-
end.equals { @posts.map(&:created_at).map(&:iso8601) }
|
|
40
|
-
|
|
41
|
-
# Child
|
|
42
|
-
asserts("contains post user child username") do
|
|
43
|
-
json_output['articles'].map { |o| o["article"]["user"]["username"] }
|
|
44
|
-
end.equals { @posts.map(&:user).map(&:username) }
|
|
45
|
-
|
|
46
|
-
asserts("contains post user child role") do
|
|
47
|
-
json_output['articles'].map { |o| o["article"]["user"]["role"] }
|
|
48
|
-
end.equals { ["normal", "normal", "admin"] }
|
|
49
|
-
|
|
50
|
-
# Child Numbers of the Child User
|
|
51
|
-
asserts("contains post user child numbers") do
|
|
52
|
-
json_output['articles'].map { |o| o["article"]["user"]["pnumbers"][0]["pnumber"]["formatted"] }
|
|
53
|
-
end.equals { @posts.map(&:user).map(&:phone_numbers).map(&:first).map(&:formatted) }
|
|
54
|
-
|
|
55
|
-
# Glue (username to article)
|
|
56
|
-
asserts("contains glued usernames") do
|
|
57
|
-
json_output['articles'].map { |o| o["article"]["author_name"] }
|
|
58
|
-
end.equals { @posts.map(&:user).map(&:username) }
|
|
59
|
-
|
|
60
|
-
# Conditional Child (admin)
|
|
61
|
-
asserts("contains admin child only for admins") do
|
|
62
|
-
json_output['articles'].map { |o| o["article"]["admin"]["username"] if o["article"].has_key?("admin") }.compact
|
|
63
|
-
end.equals { [@user3.username] }
|
|
64
|
-
|
|
65
|
-
# Conditional Node (created_by_admin)
|
|
66
|
-
asserts("contains created_by_admin node for admins") do
|
|
67
|
-
json_output['articles'].last['article']['created_by_admin']
|
|
68
|
-
end.equals { true }
|
|
69
|
-
|
|
70
|
-
denies("contains no created_by_admin node for non-admins") do
|
|
71
|
-
json_output['articles'].first['article']
|
|
72
|
-
end.includes(:created_by_admin)
|
|
73
|
-
end # index action
|
|
74
|
-
|
|
75
|
-
context "for show action" do
|
|
76
|
-
setup do
|
|
77
|
-
get "/posts/#{@post1.id}", :format => :json
|
|
78
|
-
json_output['post']
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Attributes (regular)
|
|
82
|
-
asserts("contains post title") { topic['title'] }.equals { @post1.title }
|
|
83
|
-
asserts("contains post body") { topic['body'] }.equals { @post1.body }
|
|
84
|
-
|
|
85
|
-
# Attributes (custom name)
|
|
86
|
-
asserts("contains post posted_at") { topic['posted_at'] }.equals { @post1.created_at.iso8601 }
|
|
87
|
-
|
|
88
|
-
# Child
|
|
89
|
-
asserts("contains post user child username") { topic["user"]["username"] }.equals { @post1.user.username }
|
|
90
|
-
asserts("contains post user child role") { topic["user"]["role"] }.equals { "normal" }
|
|
91
|
-
|
|
92
|
-
# Child Numbers of the Child User
|
|
93
|
-
asserts("contains post user child numbers") do
|
|
94
|
-
topic["user"]["pnumbers"][0]["pnumber"]["formatted"]
|
|
95
|
-
end.equals { @post1.user.phone_numbers[0].formatted }
|
|
96
|
-
|
|
97
|
-
# Glue (username to article)
|
|
98
|
-
asserts("contains glued username") { topic["author_name"] }.equals { @post1.user.username }
|
|
99
|
-
|
|
100
|
-
# Non-ORM Date Node Partial
|
|
101
|
-
context "for date node" do
|
|
102
|
-
setup { json_output['post']['created_date'] }
|
|
103
|
-
asserts("contains date partial with day") { topic['day'] }.equals { @post1.created_at.day }
|
|
104
|
-
asserts("contains date partial with hour") { topic['hour'] }.equals { @post1.created_at.hour }
|
|
105
|
-
asserts("contains date partial with full") { topic['full'] }.equals { @post1.created_at.iso8601 }
|
|
106
|
-
end # date node
|
|
107
|
-
end # show action
|
|
108
|
-
end
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# Lives in <rabl>/test/integration/users_controller_test.rb
|
|
2
|
-
# Symlinked to fixture applications
|
|
3
|
-
|
|
4
|
-
begin # Sinatra
|
|
5
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../test_config.rb')
|
|
6
|
-
rescue LoadError # Rails
|
|
7
|
-
require File.expand_path(File.dirname(__FILE__) + '/../test_helper.rb')
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
context "UsersController" do
|
|
11
|
-
helper(:json_output) { JSON.parse(last_response.body) }
|
|
12
|
-
|
|
13
|
-
setup do
|
|
14
|
-
create_users!
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
context "for index action" do
|
|
18
|
-
# Tests `collection @users` extending from 'show' template
|
|
19
|
-
|
|
20
|
-
setup do
|
|
21
|
-
get "/users"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Attributes (regular)
|
|
25
|
-
asserts("contains user usernames") do
|
|
26
|
-
json_output.map { |u| u["user"]["username"] }
|
|
27
|
-
end.equals { @users.map(&:username) }
|
|
28
|
-
asserts("contains email") do
|
|
29
|
-
json_output.map { |u| u["user"]["email"] }
|
|
30
|
-
end.equals { @users.map(&:email) }
|
|
31
|
-
asserts("contains location") do
|
|
32
|
-
json_output.map { |u| u["user"]["location"] }
|
|
33
|
-
end.equals { @users.map(&:location) }
|
|
34
|
-
|
|
35
|
-
# Attributes (custom name)
|
|
36
|
-
asserts("contains registered_at") do
|
|
37
|
-
json_output.map { |u| u["user"]["registered_at"] }
|
|
38
|
-
end.equals { @users.map(&:created_at).map(&:iso8601) }
|
|
39
|
-
|
|
40
|
-
# Node (renders based on attribute)
|
|
41
|
-
asserts("contains role") do
|
|
42
|
-
json_output.map { |u| u["user"]["role"] }
|
|
43
|
-
end.equals ['normal', 'normal', 'admin']
|
|
44
|
-
|
|
45
|
-
# Child (custom collection name)
|
|
46
|
-
asserts("contains formatted phone numbers") do
|
|
47
|
-
json_output.map { |u| u["user"]["pnumbers"].map { |n| n["pnumber"]["formatted"] } }
|
|
48
|
-
end.equals { @users.map { |u| u.phone_numbers.map(&:formatted) } }
|
|
49
|
-
|
|
50
|
-
# Node (renders collection partial)
|
|
51
|
-
asserts("contains formatted node numbers") do
|
|
52
|
-
json_output.map { |u| u["user"]["node_numbers"].map { |n| n["formatted"] } }
|
|
53
|
-
end.equals { @users.map { |u| u.phone_numbers.map(&:formatted) } }
|
|
54
|
-
end # index
|
|
55
|
-
|
|
56
|
-
context "for show action" do
|
|
57
|
-
# Tests `object :user => :person` custom parent node name
|
|
58
|
-
setup do
|
|
59
|
-
get "/users/#{@user1.id}"
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Attributes (regular)
|
|
63
|
-
asserts("contains username") { json_output["person"]["username"] }.equals { @user1.username }
|
|
64
|
-
asserts("contains email") { json_output["person"]["email"] }.equals { @user1.email }
|
|
65
|
-
asserts("contains location") { json_output["person"]["location"] }.equals { @user1.location }
|
|
66
|
-
# Attributes (custom name)
|
|
67
|
-
asserts("contains registered_at") { json_output["person"]["registered_at"] }.equals { @user1.created_at.iso8601 }
|
|
68
|
-
# Node (renders based on attribute)
|
|
69
|
-
asserts("contains role node") { json_output["person"]["role"] }.equals "normal"
|
|
70
|
-
|
|
71
|
-
# Child (custom collection name)
|
|
72
|
-
asserts("contains first phone number") {
|
|
73
|
-
json_output["person"]["pnumbers"][0]["pnumber"]["formatted"]
|
|
74
|
-
}.equals { @user1.phone_numbers[0].formatted }
|
|
75
|
-
asserts("contains second phone number") {
|
|
76
|
-
json_output["person"]["pnumbers"][1]["pnumber"]["formatted"]
|
|
77
|
-
}.equals { @user1.phone_numbers[1].formatted }
|
|
78
|
-
|
|
79
|
-
# Node (renders collection partial)
|
|
80
|
-
asserts("contains first node number") {
|
|
81
|
-
json_output["person"]["node_numbers"][0]["formatted"]
|
|
82
|
-
}.equals { @user1.phone_numbers[0].formatted }
|
|
83
|
-
asserts("contains second node number") {
|
|
84
|
-
json_output["person"]["node_numbers"][1]["formatted"]
|
|
85
|
-
}.equals { @user1.phone_numbers[1].formatted }
|
|
86
|
-
end # show
|
|
87
|
-
end
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
# Lives in <rabl>/test/integration/posts_controller_test.rb
|
|
2
|
-
# Symlinked to fixture applications
|
|
3
|
-
|
|
4
|
-
begin # Padrino
|
|
5
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../test_config.rb')
|
|
6
|
-
rescue LoadError # Rails
|
|
7
|
-
require File.expand_path(File.dirname(__FILE__) + '/../test_helper.rb')
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
require 'rexml/document'
|
|
11
|
-
|
|
12
|
-
context "PostsController" do
|
|
13
|
-
helper(:json_output) { JSON.parse(last_response.body) }
|
|
14
|
-
|
|
15
|
-
setup do
|
|
16
|
-
create_users!
|
|
17
|
-
Post.delete_all
|
|
18
|
-
@post1 = Post.create(:title => "Foo", :body => "Bar", :user_id => @user1.id)
|
|
19
|
-
@post2 = Post.create(:title => "Baz", :body => "Bah", :user_id => @user2.id)
|
|
20
|
-
@post3 = Post.create(:title => "Kaz", :body => "<script>alert('xss & test');</script>", :user_id => @user3.id)
|
|
21
|
-
@posts = [@post1, @post2, @post3]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
context "for index action" do
|
|
25
|
-
setup do
|
|
26
|
-
get "/posts", format: :json
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Attributes (regular)
|
|
30
|
-
asserts("contains post titles") do
|
|
31
|
-
json_output['articles'].map { |o| o["article"]["title"] }
|
|
32
|
-
end.equals { @posts.map(&:title) }
|
|
33
|
-
|
|
34
|
-
asserts("contains post bodies") do
|
|
35
|
-
json_output['articles'].map { |o| o["article"]["body"] }
|
|
36
|
-
end.equals { @posts.map(&:body) }
|
|
37
|
-
|
|
38
|
-
# Attributes (custom name)
|
|
39
|
-
asserts("contains post posted_at") do
|
|
40
|
-
json_output['articles'].map { |o| o["article"]["posted_at"] }
|
|
41
|
-
end.equals { @posts.map(&:created_at).map(&:iso8601) }
|
|
42
|
-
|
|
43
|
-
# Child
|
|
44
|
-
asserts("contains post user child username") do
|
|
45
|
-
json_output['articles'].map { |o| o["article"]["user"]["username"] }
|
|
46
|
-
end.equals { @posts.map(&:user).map(&:username) }
|
|
47
|
-
|
|
48
|
-
asserts("contains post user child role") do
|
|
49
|
-
json_output['articles'].map { |o| o["article"]["user"]["role"] }
|
|
50
|
-
end.equals { ["normal", "normal", "admin"] }
|
|
51
|
-
|
|
52
|
-
# Child Numbers of the Child User
|
|
53
|
-
asserts("contains post user child numbers") do
|
|
54
|
-
json_output['articles'].map { |o| o["article"]["user"]["pnumbers"][0]["pnumber"]["formatted"] }
|
|
55
|
-
end.equals { @posts.map(&:user).map(&:phone_numbers).map(&:first).map(&:formatted) }
|
|
56
|
-
|
|
57
|
-
# Glue (username to article)
|
|
58
|
-
asserts("contains glued usernames") do
|
|
59
|
-
json_output['articles'].map { |o| o["article"]["author_name"] }
|
|
60
|
-
end.equals { @posts.map(&:user).map(&:username) }
|
|
61
|
-
|
|
62
|
-
# Conditional Child (admin)
|
|
63
|
-
asserts("contains admin child only for admins") do
|
|
64
|
-
json_output['articles'].map { |o| o["article"]["admin"]["username"] if o["article"].has_key?("admin") }.compact
|
|
65
|
-
end.equals { [@user3.username] }
|
|
66
|
-
|
|
67
|
-
# Conditional Node (created_by_admin)
|
|
68
|
-
asserts("contains created_by_admin node for admins") do
|
|
69
|
-
json_output['articles'].last['article']['created_by_admin']
|
|
70
|
-
end.equals { true }
|
|
71
|
-
|
|
72
|
-
denies("contains no created_by_admin node for non-admins") do
|
|
73
|
-
json_output['articles'].first['article']
|
|
74
|
-
end.includes(:created_by_admin)
|
|
75
|
-
|
|
76
|
-
context "mime types" do
|
|
77
|
-
setup do
|
|
78
|
-
get "/posts", format: :rabl_test_v1
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
asserts("contains post title") do
|
|
82
|
-
json_output['articles'].first['article']
|
|
83
|
-
end.includes("title_v1")
|
|
84
|
-
|
|
85
|
-
asserts("contains post user child username") do
|
|
86
|
-
json_output['articles'].first['article']["user"]
|
|
87
|
-
end.includes("username_v1")
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
context "escaping output in index action" do
|
|
93
|
-
context "for first post" do
|
|
94
|
-
setup do
|
|
95
|
-
Rabl.configuration.escape_all_output = true
|
|
96
|
-
get "/posts/#{@post1.id}", format: :json
|
|
97
|
-
json_output['post']
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# Attributes (regular)
|
|
101
|
-
asserts("contains post title") { topic['title'] }.equals { @post1.title }
|
|
102
|
-
asserts("contains post body") { topic['body'] }.equals { @post1.body }
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
context "for third post with script tags" do
|
|
106
|
-
setup do
|
|
107
|
-
Rabl.configuration.escape_all_output = true
|
|
108
|
-
get "/posts/#{@post3.id}", format: :json
|
|
109
|
-
json_output['post']
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# Attributes (regular)
|
|
113
|
-
asserts("contains post title") { topic['title'] }.equals { @post3.title }
|
|
114
|
-
asserts("contains escaped post body") { topic['body'] }.equals { ERB::Util.h(@post3.body) }
|
|
115
|
-
end
|
|
116
|
-
end # escaping output
|
|
117
|
-
|
|
118
|
-
context "for show action" do
|
|
119
|
-
setup do
|
|
120
|
-
get "/posts/#{@post1.id}", format: :json
|
|
121
|
-
json_output['post']
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
# Attributes (regular)
|
|
125
|
-
asserts("contains post title") { topic['title'] }.equals { @post1.title }
|
|
126
|
-
asserts("contains post body") { topic['body'] }.equals { @post1.body }
|
|
127
|
-
|
|
128
|
-
# Attributes (custom name)
|
|
129
|
-
asserts("contains post posted_at") { topic['posted_at'] }.equals { @post1.created_at.iso8601 }
|
|
130
|
-
|
|
131
|
-
# Child
|
|
132
|
-
asserts("contains post user child username") { topic["user"]["username"] }.equals { @post1.user.username }
|
|
133
|
-
asserts("contains post user child role") { topic["user"]["role"] }.equals { "normal" }
|
|
134
|
-
|
|
135
|
-
# Child Numbers of the Child User
|
|
136
|
-
asserts("contains post user child numbers") do
|
|
137
|
-
topic["user"]["pnumbers"][0]["pnumber"]["formatted"]
|
|
138
|
-
end.equals { @post1.user.phone_numbers[0].formatted }
|
|
139
|
-
|
|
140
|
-
# Glue (username to article)
|
|
141
|
-
asserts("contains glued username") { topic["author_name"] }.equals { @post1.user.username }
|
|
142
|
-
|
|
143
|
-
# Non-ORM Date Node Partial
|
|
144
|
-
context "for date node" do
|
|
145
|
-
setup { json_output['post']['created_date'] }
|
|
146
|
-
asserts("contains date partial with day") { topic['day'] }.equals { @post1.created_at.day }
|
|
147
|
-
asserts("contains date partial with hour") { topic['hour'] }.equals { @post1.created_at.hour }
|
|
148
|
-
asserts("contains date partial with full") { topic['full'] }.equals { @post1.created_at.iso8601 }
|
|
149
|
-
end # date node
|
|
150
|
-
|
|
151
|
-
asserts("contains helper action") { topic["foo"] }.equals { "BAR!" }
|
|
152
|
-
denies("contains helper action") { topic["created_at_in_words"] }.nil
|
|
153
|
-
|
|
154
|
-
asserts("contains post attributes via node") { topic["post"] }.equals { [@post1.title, @post1.body] }
|
|
155
|
-
end # show action, json
|
|
156
|
-
|
|
157
|
-
context "renderer" do
|
|
158
|
-
setup do
|
|
159
|
-
mock(ActionController::Base).perform_caching.any_number_of_times { true }
|
|
160
|
-
get "/posts/#{@post1.id}/renderer"
|
|
161
|
-
json_output['post']
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
# Attributes (regular)
|
|
165
|
-
asserts("contains post title") { topic['title'] }.equals { @post1.title }
|
|
166
|
-
asserts("contains post body") { topic['body'] }.equals { @post1.body }
|
|
167
|
-
|
|
168
|
-
# Attributes (partial)
|
|
169
|
-
asserts("contains post partial title") { topic['partial']['title'] }.equals { @post1.title }
|
|
170
|
-
asserts("contains post partial body") { topic['partial']['body'] }.equals { @post1.body }
|
|
171
|
-
end # renderer action, json
|
|
172
|
-
|
|
173
|
-
context "for index action rendering JSON within HTML" do
|
|
174
|
-
setup do
|
|
175
|
-
get "/posts", format: :html
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
asserts(:body).includes { "<html>" }
|
|
179
|
-
end # index action, html
|
|
180
|
-
|
|
181
|
-
context "for show action rendering JSON within HTML" do
|
|
182
|
-
setup do
|
|
183
|
-
get "/posts/#{@post1.id}", format: :html
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
asserts(:body).includes { "<html>" }
|
|
187
|
-
end # show action, html
|
|
188
|
-
|
|
189
|
-
context "mime_type" do
|
|
190
|
-
setup do
|
|
191
|
-
get "/posts/#{@post1.id}", format: :rabl_test_v1
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
asserts("contains post title") { json_output['post']['title_v1'] }.equals { @post1.title }
|
|
195
|
-
asserts("contains username") { json_output['post']['user']['username_v1'] }.equals { @post1.user.username }
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
context "caching" do
|
|
199
|
-
helper(:cache_hit) do |key|
|
|
200
|
-
Rails.cache.read(ActiveSupport::Cache.expand_cache_key(key, :rabl))
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
setup do
|
|
204
|
-
mock(ActionController::Base).perform_caching.any_number_of_times { true }
|
|
205
|
-
Rails.cache.clear
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
context "for index action with caching in json" do
|
|
209
|
-
setup do
|
|
210
|
-
get "/posts", format: :json
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
asserts("contains post titles") do
|
|
214
|
-
json_output['articles'].map { |o| o['article']['title'] }
|
|
215
|
-
end.equals { @posts.map(&:title) }
|
|
216
|
-
|
|
217
|
-
asserts(:body).equals { cache_hit ['kittens!', @posts, nil, 'json'] }
|
|
218
|
-
|
|
219
|
-
asserts("contains cache hits per object (posts by title)") do
|
|
220
|
-
json_output['articles'].map { |o| o['article']['title'] }
|
|
221
|
-
end.equals { @posts.map{ |p| cache_hit([p, nil, 'hash'])[:title] } }
|
|
222
|
-
end # index action, caching, json
|
|
223
|
-
|
|
224
|
-
context "for index action with caching in xml" do
|
|
225
|
-
setup do
|
|
226
|
-
get "/posts", format: :xml
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
asserts("contains post titles") do
|
|
230
|
-
doc = REXML::Document.new topic.body
|
|
231
|
-
doc.elements.inject('articles/article/title', []) {|arr, ele| arr << ele.text}
|
|
232
|
-
end.equals { @posts.map(&:title) }
|
|
233
|
-
|
|
234
|
-
asserts(:body).equals { cache_hit ['kittens!', @posts, nil, 'xml'] }
|
|
235
|
-
end # index action, caching, xml
|
|
236
|
-
|
|
237
|
-
context "for show action with caching" do
|
|
238
|
-
setup do
|
|
239
|
-
get "/posts/#{@post1.id}", format: :json
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
asserts("contains post title") { json_output['post']['title'] }.equals { @post1.title }
|
|
243
|
-
|
|
244
|
-
asserts(:body).equals { cache_hit [@post1, nil, 'json'] }
|
|
245
|
-
end # show action, caching, json
|
|
246
|
-
|
|
247
|
-
context "cache_all_output" do
|
|
248
|
-
helper(:cache_hit) do |key|
|
|
249
|
-
Rails.cache.read(ActiveSupport::Cache.expand_cache_key([key, 'article', 'json'], :rabl))
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
setup do
|
|
253
|
-
Rabl.configuration.cache_all_output = true
|
|
254
|
-
get "/posts", format: :json
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
asserts("contains cache hits per object (posts by title)") do
|
|
258
|
-
json_output['articles'].map { |o| o['article']['title'] }
|
|
259
|
-
end.equals { @posts.map{ |p| cache_hit(p)['article'][:title] } }
|
|
260
|
-
end # index action, cache_all_output
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
end
|