]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/changesets/downloads_controller_test.rb
Create api changeset download resource
[rails.git] / test / controllers / api / changesets / downloads_controller_test.rb
1 require "test_helper"
2
3 module Api
4   module Changesets
5     class DownloadsControllerTest < ActionDispatch::IntegrationTest
6       ##
7       # test all routes which lead to this controller
8       def test_routes
9         assert_routing(
10           { :path => "/api/0.6/changeset/1/download", :method => :get },
11           { :controller => "api/changesets/downloads", :action => "show", :changeset_id => "1" }
12         )
13       end
14
15       def test_show
16         changeset = create(:changeset)
17         node = create(:node, :with_history, :version => 1, :changeset => changeset)
18         tag = create(:old_node_tag, :old_node => node.old_nodes.find_by(:version => 1))
19         node2 = create(:node, :with_history, :version => 1, :changeset => changeset)
20         _node3 = create(:node, :with_history, :deleted, :version => 1, :changeset => changeset)
21         _relation = create(:relation, :with_history, :version => 1, :changeset => changeset)
22         _relation2 = create(:relation, :with_history, :deleted, :version => 1, :changeset => changeset)
23
24         get api_changeset_download_path(changeset)
25
26         assert_response :success
27         # FIXME: needs more assert_select tests
28         assert_select "osmChange[version='#{Settings.api_version}'][generator='#{Settings.generator}']" do
29           assert_select "create", :count => 5
30           assert_select "create>node[id='#{node.id}'][visible='#{node.visible?}'][version='#{node.version}']" do
31             assert_select "tag[k='#{tag.k}'][v='#{tag.v}']"
32           end
33           assert_select "create>node[id='#{node2.id}']"
34         end
35       end
36
37       def test_show_should_sort_by_timestamp
38         changeset = create(:changeset)
39         node1 = create(:old_node, :version => 2, :timestamp => "2020-02-01", :changeset => changeset)
40         node0 = create(:old_node, :version => 2, :timestamp => "2020-01-01", :changeset => changeset)
41
42         get api_changeset_download_path(changeset)
43
44         assert_response :success
45         assert_dom "modify", :count => 2 do |modify|
46           assert_dom modify[0], ">node", :count => 1 do |node|
47             assert_dom node, ">@id", node0.node_id.to_s
48           end
49           assert_dom modify[1], ">node", :count => 1 do |node|
50             assert_dom node, ">@id", node1.node_id.to_s
51           end
52         end
53       end
54
55       def test_show_should_sort_by_version
56         changeset = create(:changeset)
57         node1 = create(:old_node, :version => 3, :timestamp => "2020-01-01", :changeset => changeset)
58         node0 = create(:old_node, :version => 2, :timestamp => "2020-01-01", :changeset => changeset)
59
60         get api_changeset_download_path(changeset)
61
62         assert_response :success
63         assert_dom "modify", :count => 2 do |modify|
64           assert_dom modify[0], ">node", :count => 1 do |node|
65             assert_dom node, ">@id", node0.node_id.to_s
66           end
67           assert_dom modify[1], ">node", :count => 1 do |node|
68             assert_dom node, ">@id", node1.node_id.to_s
69           end
70         end
71       end
72
73       ##
74       # check that the changeset download for a changeset with a redacted
75       # element in it doesn't contain that element.
76       def test_show_redacted
77         changeset = create(:changeset)
78         node = create(:node, :with_history, :version => 2, :changeset => changeset)
79         node_v1 = node.old_nodes.find_by(:version => 1)
80         node_v1.redact!(create(:redaction))
81
82         get api_changeset_download_path(changeset)
83         assert_response :success
84
85         assert_select "osmChange", 1
86         # this changeset contains the node in versions 1 & 2, but 1 should
87         # be hidden.
88         assert_select "osmChange node[id='#{node.id}']", 1
89         assert_select "osmChange node[id='#{node.id}'][version='1']", 0
90       end
91     end
92   end
93 end