]> git.openstreetmap.org Git - rails.git/blob - test/integration/changeset_upload_download_test.rb
Add frozen_string_literal comments to ruby files
[rails.git] / test / integration / changeset_upload_download_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
5 class ChangesetUploadDownloadTest < ActionDispatch::IntegrationTest
6   ##
7   # when we make some simple changes we get the same changes back from the
8   # diff download.
9   def test_diff_download_simple
10     node = create(:node)
11
12     ## First try with a non-public user, which should get a forbidden
13     auth_header = bearer_authorization_header create(:user, :data_public => false)
14
15     # create a temporary changeset
16     xml = "<osm><changeset>" \
17           "<tag k='created_by' v='osm test suite checking changesets'/>" \
18           "</changeset></osm>"
19     post api_changesets_path, :params => xml, :headers => auth_header
20     assert_response :forbidden
21
22     ## Now try with a normal user
23     auth_header = bearer_authorization_header
24
25     # create a temporary changeset
26     xml = "<osm><changeset>" \
27           "<tag k='created_by' v='osm test suite checking changesets'/>" \
28           "</changeset></osm>"
29     post api_changesets_path, :params => xml, :headers => auth_header
30     assert_response :success
31     changeset_id = @response.body.to_i
32
33     # add a diff to it
34     diff = <<~CHANGESET
35       <osmChange>
36         <modify>
37           <node id='#{node.id}' lon='0.0' lat='0.0' changeset='#{changeset_id}' version='1'/>
38           <node id='#{node.id}' lon='0.1' lat='0.0' changeset='#{changeset_id}' version='2'/>
39           <node id='#{node.id}' lon='0.1' lat='0.1' changeset='#{changeset_id}' version='3'/>
40           <node id='#{node.id}' lon='0.1' lat='0.2' changeset='#{changeset_id}' version='4'/>
41           <node id='#{node.id}' lon='0.2' lat='0.2' changeset='#{changeset_id}' version='5'/>
42           <node id='#{node.id}' lon='0.3' lat='0.2' changeset='#{changeset_id}' version='6'/>
43           <node id='#{node.id}' lon='0.3' lat='0.3' changeset='#{changeset_id}' version='7'/>
44           <node id='#{node.id}' lon='0.9' lat='0.9' changeset='#{changeset_id}' version='8'/>
45         </modify>
46       </osmChange>
47     CHANGESET
48
49     # upload it
50     post api_changeset_upload_path(changeset_id), :params => diff, :headers => auth_header
51     assert_response :success,
52                     "can't upload multiple versions of an element in a diff: #{@response.body}"
53
54     get api_changeset_download_path(changeset_id)
55     assert_response :success
56
57     assert_dom "osmChange", 1
58     assert_dom "osmChange>modify", 8
59     assert_dom "osmChange>modify>node", 8
60   end
61
62   ##
63   # culled this from josm to ensure that nothing in the way that josm
64   # is formatting the request is causing it to fail.
65   #
66   # NOTE: the error turned out to be something else completely!
67   def test_josm_upload
68     auth_header = bearer_authorization_header
69
70     # create a temporary changeset
71     xml = "<osm><changeset>" \
72           "<tag k='created_by' v='osm test suite checking changesets'/>" \
73           "</changeset></osm>"
74     post api_changesets_path, :params => xml, :headers => auth_header
75     assert_response :success
76     changeset_id = @response.body.to_i
77
78     diff = <<~OSMFILE
79       <osmChange version="0.6" generator="JOSM">
80         <create version="0.6" generator="JOSM">
81           <node id='-1' visible='true' changeset='#{changeset_id}' lat='51.49619982187321' lon='-0.18722061869438314' />
82           <node id='-2' visible='true' changeset='#{changeset_id}' lat='51.496359883909605' lon='-0.18653093576241928' />
83           <node id='-3' visible='true' changeset='#{changeset_id}' lat='51.49598132358285' lon='-0.18719613290981638' />
84           <node id='-4' visible='true' changeset='#{changeset_id}' lat='51.4961591711078' lon='-0.18629015888084607' />
85           <node id='-5' visible='true' changeset='#{changeset_id}' lat='51.49582126021711' lon='-0.18708186591517145' />
86           <node id='-6' visible='true' changeset='#{changeset_id}' lat='51.49591018437858' lon='-0.1861432441734455' />
87           <node id='-7' visible='true' changeset='#{changeset_id}' lat='51.49560784152179' lon='-0.18694719410005425' />
88           <node id='-8' visible='true' changeset='#{changeset_id}' lat='51.49567389979617' lon='-0.1860289771788006' />
89           <node id='-9' visible='true' changeset='#{changeset_id}' lat='51.49543761398892' lon='-0.186820684213126' />
90           <way id='-10' action='modify' visible='true' changeset='#{changeset_id}'>
91             <nd ref='-1' />
92             <nd ref='-2' />
93             <nd ref='-3' />
94             <nd ref='-4' />
95             <nd ref='-5' />
96             <nd ref='-6' />
97             <nd ref='-7' />
98             <nd ref='-8' />
99             <nd ref='-9' />
100             <tag k='highway' v='residential' />
101             <tag k='name' v='Foobar Street' />
102           </way>
103         </create>
104       </osmChange>
105     OSMFILE
106
107     # upload it
108     post api_changeset_upload_path(changeset_id), :params => diff, :headers => auth_header
109     assert_response :success,
110                     "can't upload a diff from JOSM: #{@response.body}"
111
112     get api_changeset_download_path(changeset_id)
113     assert_response :success
114
115     assert_dom "osmChange", 1
116     assert_dom "osmChange>create>node", 9
117     assert_dom "osmChange>create>way", 1
118     assert_dom "osmChange>create>way>nd", 9
119     assert_dom "osmChange>create>way>tag", 2
120   end
121
122   ##
123   # when we make some complex changes we get the same changes back from the
124   # diff download.
125   def test_diff_download_complex
126     node = create(:node)
127     node2 = create(:node)
128     way = create(:way)
129     auth_header = bearer_authorization_header
130
131     # create a temporary changeset
132     xml = "<osm><changeset>" \
133           "<tag k='created_by' v='osm test suite checking changesets'/>" \
134           "</changeset></osm>"
135     post api_changesets_path, :params => xml, :headers => auth_header
136     assert_response :success
137     changeset_id = @response.body.to_i
138
139     # add a diff to it
140     diff = <<~CHANGESET
141       <osmChange>
142         <delete>
143           <node id='#{node.id}' lon='0.0' lat='0.0' changeset='#{changeset_id}' version='1'/>
144         </delete>
145         <create>
146           <node id='-1' lon='0.9' lat='0.9' changeset='#{changeset_id}' version='0'/>
147           <node id='-2' lon='0.8' lat='0.9' changeset='#{changeset_id}' version='0'/>
148           <node id='-3' lon='0.7' lat='0.9' changeset='#{changeset_id}' version='0'/>
149         </create>
150         <modify>
151           <node id='#{node2.id}' lon='2.0' lat='1.5' changeset='#{changeset_id}' version='1'/>
152           <way id='#{way.id}' changeset='#{changeset_id}' version='1'>
153             <nd ref='#{node2.id}'/>
154             <nd ref='-1'/>
155             <nd ref='-2'/>
156             <nd ref='-3'/>
157           </way>
158         </modify>
159       </osmChange>
160     CHANGESET
161
162     # upload it
163     post api_changeset_upload_path(changeset_id), :params => diff, :headers => auth_header
164     assert_response :success,
165                     "can't upload multiple versions of an element in a diff: #{@response.body}"
166
167     get api_changeset_download_path(changeset_id)
168     assert_response :success
169
170     assert_dom "osmChange", 1
171     assert_dom "osmChange>create", 3
172     assert_dom "osmChange>delete", 1
173     assert_dom "osmChange>modify", 2
174     assert_dom "osmChange>create>node", 3
175     assert_dom "osmChange>delete>node", 1
176     assert_dom "osmChange>modify>node", 1
177     assert_dom "osmChange>modify>way", 1
178   end
179 end