]> git.openstreetmap.org Git - rails.git/blob - test/models/changeset_test.rb
Validate changeset num_*_changes
[rails.git] / test / models / changeset_test.rb
1 require "test_helper"
2
3 class ChangesetTest < ActiveSupport::TestCase
4   def test_num_changes_valid
5     changeset = create(:changeset)
6     assert_predicate changeset, :valid?
7     changeset.num_changes = nil
8     assert_not_predicate changeset, :valid?
9     changeset.num_changes = -1
10     assert_not_predicate changeset, :valid?
11     changeset.num_changes = 0
12     assert_predicate changeset, :valid?
13     changeset.num_changes = 1
14     assert_predicate changeset, :valid?
15   end
16
17   def test_num_type_changes_valid
18     [:num_created_nodes, :num_modified_nodes, :num_deleted_nodes,
19      :num_created_ways, :num_modified_ways, :num_deleted_ways,
20      :num_created_relations, :num_modified_relations, :num_deleted_relations].each do |counter_attribute|
21        changeset = create(:changeset)
22        assert_predicate changeset, :valid?
23        changeset[counter_attribute] = nil
24        assert_not_predicate changeset, :valid?
25        changeset[counter_attribute] = -1
26        assert_not_predicate changeset, :valid?
27        changeset[counter_attribute] = 0
28        assert_predicate changeset, :valid?
29        changeset[counter_attribute] = 1
30        assert_predicate changeset, :valid?
31      end
32   end
33
34   def test_from_xml_no_text
35     no_text = ""
36     message_create = assert_raise(OSM::APIBadXMLError) do
37       Changeset.from_xml(no_text, :create => true)
38     end
39     assert_match(/Must specify a string with one or more characters/, message_create.message)
40     message_update = assert_raise(OSM::APIBadXMLError) do
41       Changeset.from_xml(no_text, :create => false)
42     end
43     assert_match(/Must specify a string with one or more characters/, message_update.message)
44   end
45
46   def test_from_xml_no_changeset
47     nocs = "<osm></osm>"
48     message_create = assert_raise(OSM::APIBadXMLError) do
49       Changeset.from_xml(nocs, :create => true)
50     end
51     assert_match %r{XML doesn't contain an osm/changeset element}, message_create.message
52     message_update = assert_raise(OSM::APIBadXMLError) do
53       Changeset.from_xml(nocs, :create => false)
54     end
55     assert_match %r{XML doesn't contain an osm/changeset element}, message_update.message
56   end
57
58   def test_from_xml_no_k_v
59     nokv = "<osm><changeset><tag /></changeset></osm>"
60     message_create = assert_raise(OSM::APIBadXMLError) do
61       Changeset.from_xml(nokv, :create => true)
62     end
63     assert_match(/tag is missing key/, message_create.message)
64     message_update = assert_raise(OSM::APIBadXMLError) do
65       Changeset.from_xml(nokv, :create => false)
66     end
67     assert_match(/tag is missing key/, message_update.message)
68   end
69
70   def test_from_xml_no_v
71     no_v = "<osm><changeset><tag k='key' /></changeset></osm>"
72     message_create = assert_raise(OSM::APIBadXMLError) do
73       Changeset.from_xml(no_v, :create => true)
74     end
75     assert_match(/tag is missing value/, message_create.message)
76     message_update = assert_raise(OSM::APIBadXMLError) do
77       Changeset.from_xml(no_v, :create => false)
78     end
79     assert_match(/tag is missing value/, message_update.message)
80   end
81
82   def test_from_xml_duplicate_k
83     dupk = "<osm><changeset><tag k='dup' v='test' /><tag k='dup' v='value' /></changeset></osm>"
84     message_create = assert_raise(OSM::APIDuplicateTagsError) do
85       Changeset.from_xml(dupk, :create => true)
86     end
87     assert_equal "Element changeset/ has duplicate tags with key dup", message_create.message
88     message_update = assert_raise(OSM::APIDuplicateTagsError) do
89       Changeset.from_xml(dupk, :create => false)
90     end
91     assert_equal "Element changeset/ has duplicate tags with key dup", message_update.message
92   end
93
94   def test_from_xml_valid
95     # Example taken from the Update section on the API_v0.6 docs on the wiki
96     xml = "<osm><changeset><tag k=\"comment\" v=\"Just adding some streetnames and a restaurant\"/></changeset></osm>"
97     assert_nothing_raised do
98       Changeset.from_xml(xml, :create => false)
99     end
100     assert_nothing_raised do
101       Changeset.from_xml(xml, :create => true)
102     end
103   end
104 end