Project

General

Profile

Defect #18875 ยป project_api_include_issue_custom_fields.patch

ume san, 2018-11-14 16:50

View differences:

app/helpers/custom_fields_helper.rb (working copy)
180 180
    end
181 181
    form.select :edit_tag_style, select_options, :label => :label_display
182 182
  end
183

  
184
  def render_api_issue_custom_field(field, api)
185
    api.custom_field do
186
      api.id                field.id
187
      api.name              field.name
188
      api.customized_type   field.class.customized_class.name.underscore if field.class.customized_class
189
      api.field_format      field.field_format
190
      api.regexp            field.regexp
191
      api.min_length        field.min_length
192
      api.max_length        field.max_length
193
      api.is_required       field.is_required?
194
      api.is_filter         field.is_filter?
195
      api.searchable        field.searchable
196
      api.multiple          field.multiple?
197
      api.default_value     field.default_value
198
      api.visible           field.visible?
199

  
200
      values = field.possible_values_options
201
      if values.present?
202
        api.array :possible_values do
203
          values.each do |label, value|
204
            api.possible_value do
205
              api.value value || label
206
              api.label label
207
            end
208
          end
209
        end
210
      end
211

  
212
      if field.is_a?(IssueCustomField)
213
        api.array :trackers do
214
          field.trackers.each do |tracker|
215
            api.tracker :id => tracker.id, :name => tracker.name
216
          end
217
        end
218
        api.array :roles do
219
          field.roles.each do |role|
220
            api.role :id => role.id, :name => role.name
221
          end
222
        end
223
      end
224
    end
225
  end
226

  
183 227
end
app/views/custom_fields/index.api.rsb (working copy)
1 1
api.array :custom_fields do
2 2
  @custom_fields.each do |field|
3
    api.custom_field do
4
      api.id                field.id
5
      api.name              field.name
6
      api.customized_type   field.class.customized_class.name.underscore if field.class.customized_class
7
      api.field_format      field.field_format
8
      api.regexp            field.regexp
9
      api.min_length        field.min_length
10
      api.max_length        field.max_length
11
      api.is_required       field.is_required?
12
      api.is_filter         field.is_filter?
13
      api.searchable        field.searchable
14
      api.multiple          field.multiple?
15
      api.default_value     field.default_value
16
      api.visible           field.visible?
17

  
18
      values = field.possible_values_options
19
      if values.present?
20
        api.array :possible_values do
21
          values.each do |label, value|
22
            api.possible_value do
23
              api.value value || label
24
              api.label label
25
            end
26
          end
27
        end
28
      end
29

  
30
      if field.is_a?(IssueCustomField)
31
        api.array :trackers do
32
          field.trackers.each do |tracker|
33
            api.tracker :id => tracker.id, :name => tracker.name
34
          end
35
        end
36
        api.array :roles do
37
          field.roles.each do |role|
38
            api.role :id => role.id, :name => role.name
39
          end
40
        end
41
      end
42
    end
3
    render_api_issue_custom_field field, api
43 4
  end
44 5
end
app/views/projects/show.api.rsb (working copy)
11 11
  render_api_custom_values @project.visible_custom_field_values, api
12 12
  render_api_includes(@project, api)
13 13

  
14
  api.array :issue_custom_fields do
15
    @project.all_issue_custom_fields.each do |field|
16
      if field.visible_by? @project
17
        render_api_issue_custom_field field, api
18
      end
19
    end
20
  end if include_in_api_response?('issue_custom_fields')
21

  
14 22
  api.created_on @project.created_on
15 23
  api.updated_on @project.updated_on
16 24
end
test/integration/api_test/projects_test.rb (working copy)
138 138
    assert_select 'enabled_modules[type=array] enabled_module[name=issue_tracking]'
139 139
  end
140 140

  
141
  test "GET /projects/:id.xml with include=issue_custom_fields should return issue custom fields" do
142
    get '/projects/1.xml?include=issue_custom_fields'
143
    assert_response :success
144
    assert_equal 'application/xml', @response.content_type
145

  
146
    assert_select 'issue_custom_fields' do
147
      assert_select 'custom_field' do
148
        assert_select 'name', :text => 'Database'
149
        assert_select 'id', :text => '2'
150
        assert_select 'customized_type', :text => 'issue'
151
        assert_select 'possible_values[type=array]' do
152
          assert_select 'possible_value>value', :text => 'PostgreSQL'
153
          assert_select 'possible_value>label', :text => 'PostgreSQL'
154
        end
155
        assert_select 'trackers[type=array]'
156
        assert_select 'roles[type=array]'
157
      end
158
    end
159
  end
160

  
141 161
  test "POST /projects.xml with valid parameters should create the project" do
142 162
    with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
143 163
      assert_difference('Project.count') do
    (1-1/1)