]> git.openstreetmap.org Git - rails.git/blob - test/models/changeset_test.rb
Merge remote-tracking branch 'upstream/pull/4866'
[rails.git] / test / models / changeset_test.rb
1 require "test_helper"
2
3 class ChangesetTest < ActiveSupport::TestCase
4   def test_from_xml_no_text
5     no_text = ""
6     message_create = assert_raise(OSM::APIBadXMLError) do
7       Changeset.from_xml(no_text, :create => true)
8     end
9     assert_match(/Must specify a string with one or more characters/, message_create.message)
10     message_update = assert_raise(OSM::APIBadXMLError) do
11       Changeset.from_xml(no_text, :create => false)
12     end
13     assert_match(/Must specify a string with one or more characters/, message_update.message)
14   end
15
16   def test_from_xml_no_changeset
17     nocs = "<osm></osm>"
18     message_create = assert_raise(OSM::APIBadXMLError) do
19       Changeset.from_xml(nocs, :create => true)
20     end
21     assert_match %r{XML doesn't contain an osm/changeset element}, message_create.message
22     message_update = assert_raise(OSM::APIBadXMLError) do
23       Changeset.from_xml(nocs, :create => false)
24     end
25     assert_match %r{XML doesn't contain an osm/changeset element}, message_update.message
26   end
27
28   def test_from_xml_no_k_v
29     nokv = "<osm><changeset><tag /></changeset></osm>"
30     message_create = assert_raise(OSM::APIBadXMLError) do
31       Changeset.from_xml(nokv, :create => true)
32     end
33     assert_match(/tag is missing key/, message_create.message)
34     message_update = assert_raise(OSM::APIBadXMLError) do
35       Changeset.from_xml(nokv, :create => false)
36     end
37     assert_match(/tag is missing key/, message_update.message)
38   end
39
40   def test_from_xml_no_v
41     no_v = "<osm><changeset><tag k='key' /></changeset></osm>"
42     message_create = assert_raise(OSM::APIBadXMLError) do
43       Changeset.from_xml(no_v, :create => true)
44     end
45     assert_match(/tag is missing value/, message_create.message)
46     message_update = assert_raise(OSM::APIBadXMLError) do
47       Changeset.from_xml(no_v, :create => false)
48     end
49     assert_match(/tag is missing value/, message_update.message)
50   end
51
52   def test_from_xml_duplicate_k
53     dupk = "<osm><changeset><tag k='dup' v='test' /><tag k='dup' v='value' /></changeset></osm>"
54     message_create = assert_raise(OSM::APIDuplicateTagsError) do
55       Changeset.from_xml(dupk, :create => true)
56     end
57     assert_equal "Element changeset/ has duplicate tags with key dup", message_create.message
58     message_update = assert_raise(OSM::APIDuplicateTagsError) do
59       Changeset.from_xml(dupk, :create => false)
60     end
61     assert_equal "Element changeset/ has duplicate tags with key dup", message_update.message
62   end
63
64   def test_from_xml_valid
65     # Example taken from the Update section on the API_v0.6 docs on the wiki
66     xml = "<osm><changeset><tag k=\"comment\" v=\"Just adding some streetnames and a restaurant\"/></changeset></osm>"
67     assert_nothing_raised do
68       Changeset.from_xml(xml, :create => false)
69     end
70     assert_nothing_raised do
71       Changeset.from_xml(xml, :create => true)
72     end
73   end
74
75   def test_subscription
76     changeset = create(:changeset)
77     user = create(:user)
78
79     assert_not changeset.subscribed?(user)
80
81     changeset.subscribe(user)
82     assert changeset.subscribed?(user)
83
84     changeset.unsubscribe(changeset.subscribers.first)
85     assert_not changeset.subscribed?(user)
86   end
87 end