summaryrefslogtreecommitdiffstats
path: root/test/unit/lib/redmine/views/builders/json_test.rb
blob: 76dbbf0e27cf00be8d419eefc2377483071bb235 (plain)
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
123
124
125
126
127
128
129
130
131
132
# frozen_string_literal: true

# Redmine - project management software
# Copyright (C) 2006-  Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

require File.expand_path('../../../../../../test_helper', __FILE__)

class Redmine::Views::Builders::JsonTest < ActiveSupport::TestCase
  def test_nil_and_false
    assert_json_output({'value' => nil}) do |b|
      b.value nil
    end

    assert_json_output({'value' => false}) do |b|
      b.value false
    end
  end

  def test_hash
    assert_json_output({'person' => {'name' => 'Ryan', 'age' => 32}}) do |b|
      b.person do
        b.name 'Ryan'
        b.age  32
      end
    end
  end

  def test_hash_hash
    assert_json_output({'person' => {'name' => 'Ryan', 'birth' => {'city' => 'London', 'country' => 'UK'}}}) do |b|
      b.person do
        b.name 'Ryan'
        b.birth :city => 'London', :country => 'UK'
      end
    end

    assert_json_output({'person' => {'id' => 1, 'name' => 'Ryan', 'birth' => {'city' => 'London', 'country' => 'UK'}}}) do |b|
      b.person :id => 1 do
        b.name 'Ryan'
        b.birth :city => 'London', :country => 'UK'
      end
    end
  end

  def test_array
    assert_json_output({'books' => [{'title' => 'Book 1', 'author' => 'B. Smith'}, {'title' => 'Book 2', 'author' => 'G. Cooper'}]}) do |b|
      b.array :books do |b|
        b.book :title => 'Book 1', :author => 'B. Smith'
        b.book :title => 'Book 2', :author => 'G. Cooper'
      end
    end

    assert_json_output({'books' => [{'title' => 'Book 1', 'author' => 'B. Smith'}, {'title' => 'Book 2', 'author' => 'G. Cooper'}]}) do |b|
      b.array :books do |b|
        b.book :title => 'Book 1' do
          b.author 'B. Smith'
        end
        b.book :title => 'Book 2' do
          b.author 'G. Cooper'
        end
      end
    end
  end

  def test_array_with_content_tags
    assert_json_output(
      {
        'books' => [
          {'value' => 'Book 1', 'author' => 'B. Smith'},
          {'value' => 'Book 2', 'author' => 'G. Cooper'}
        ]
      }
    ) do |b|
      b.array :books do |b|
        b.book 'Book 1', :author => 'B. Smith'
        b.book 'Book 2', :author => 'G. Cooper'
      end
    end
  end

  def test_nested_arrays
    assert_json_output({'books' => [{'authors' => ['B. Smith', 'G. Cooper']}]}) do |b|
      b.array :books do |books|
        books.book do |book|
          book.array :authors do |authors|
            authors.author 'B. Smith'
            authors.author 'G. Cooper'
          end
        end
      end
    end
  end

  def test_request_response
    assert_json_output(
      {
        'request' => {
          'get' => 'book'
        },
        'response' => {
          'book' => {'title' => 'Book 1'}
        }
      }
    ) do |b|
      b.request do
        b.get 'book'
      end
      b.response do
        b.book title: 'Book 1'
      end
    end
  end

  def assert_json_output(expected, &block)
    builder = Redmine::Views::Builders::Json.new(ActionDispatch::TestRequest.create, ActionDispatch::TestResponse.create)
    yield(builder)
    assert_equal(expected, ActiveSupport::JSON.decode(builder.output))
  end
end