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
|
# Lives in <rabl>/test/integration/users_controller_test.rb
# Symlinked to fixture applications
begin # Sinatra
require File.expand_path(File.dirname(__FILE__) + '/../../test_config.rb')
rescue LoadError # Rails
require File.expand_path(File.dirname(__FILE__) + '/../test_helper.rb')
end
context "UsersController" do
helper(:json_output) { JSON.parse(last_response.body) }
setup do
create_users!
end
context "for index action" do
# Tests `collection @users` extending from 'show' template
setup do
get "/users"
end
# Attributes (regular)
asserts("contains user usernames") do
json_output.map { |u| u["user"]["username"] }
end.equals { @users.map(&:username) }
asserts("contains email") do
json_output.map { |u| u["user"]["email"] }
end.equals { @users.map(&:email) }
asserts("contains location") do
json_output.map { |u| u["user"]["location"] }
end.equals { @users.map(&:location) }
# Attributes (custom name)
asserts("contains registered_at") do
json_output.map { |u| u["user"]["registered_at"] }
end.equals { @users.map(&:created_at).map(&:iso8601) }
# Node (renders based on attribute)
asserts("contains role") do
json_output.map { |u| u["user"]["role"] }
end.equals ['normal', 'normal', 'admin']
# Child (custom collection name)
asserts("contains formatted phone numbers") do
json_output.map { |u| u["user"]["pnumbers"].map { |n| n["pnumber"]["formatted"] } }
end.equals { @users.map { |u| u.phone_numbers.map(&:formatted) } }
# Node (renders collection partial)
asserts("contains formatted node numbers") do
json_output.map { |u| u["user"]["node_numbers"].map { |n| n["formatted"] } }
end.equals { @users.map { |u| u.phone_numbers.map(&:formatted) } }
end # index
context "for show action" do
# Tests `object :user => :person` custom parent node name
setup do
get "/users/#{@user1.id}"
end
# Attributes (regular)
asserts("contains username") { json_output["person"]["username"] }.equals { @user1.username }
asserts("contains email") { json_output["person"]["email"] }.equals { @user1.email }
asserts("contains location") { json_output["person"]["location"] }.equals { @user1.location }
# Attributes (custom name)
asserts("contains registered_at") { json_output["person"]["registered_at"] }.equals { @user1.created_at.iso8601 }
# Node (renders based on attribute)
asserts("contains role node") { json_output["person"]["role"] }.equals "normal"
# Child (custom collection name)
asserts("contains first phone number") {
json_output["person"]["pnumbers"][0]["pnumber"]["formatted"]
}.equals { @user1.phone_numbers[0].formatted }
asserts("contains second phone number") {
json_output["person"]["pnumbers"][1]["pnumber"]["formatted"]
}.equals { @user1.phone_numbers[1].formatted }
# Node (renders collection partial)
asserts("contains first node number") {
json_output["person"]["node_numbers"][0]["formatted"]
}.equals { @user1.phone_numbers[0].formatted }
asserts("contains second node number") {
json_output["person"]["node_numbers"][1]["formatted"]
}.equals { @user1.phone_numbers[1].formatted }
end # show
end
|