File: users_controller_test.rb

package info (click to toggle)
ruby-rabl 0.16.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 2,276 kB
  • sloc: ruby: 6,732; javascript: 102; makefile: 6
file content (87 lines) | stat: -rw-r--r-- 3,299 bytes parent folder | download | duplicates (13)
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