Skip to content

Commit 43c5126

Browse files
authored
Merge pull request #159 from gtt-project/fix/editing-polygon-causes-500-error
Fix/editing polygon causes 500 error
2 parents 895951e + a1bd41b commit 43c5126

File tree

4 files changed

+69
-9
lines changed

4 files changed

+69
-9
lines changed

init.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
author_url 'https://github.com/georepublic'
99
url 'https://github.com/gtt-project/redmine_gtt'
1010
description 'Adds location-based task management and maps'
11-
version '4.1.0'
11+
version '4.1.1'
1212

1313
requires_redmine :version_or_higher => '4.2.0'
1414

lib/redmine_gtt/patches/issue_patch.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ def ignore_small_geom_change
3838
if old_value.length != new_value.length
3939
return true
4040
end
41+
old_value = old_value.flatten
42+
new_value = new_value.flatten
4143
end
4244
self.geom = geom_change[0] if new_value.zip(old_value).map { |a, b| (a-b).abs }.map {|x| x < 0.00000001}.all?
4345
end

test/test_helper.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ def point_geojson(coordinates)
1414
{'type'=>'Feature','geometry'=>{ 'type'=>'Point','coordinates'=> coordinates}}.to_json
1515
end
1616

17+
def linestring_geojson(coordinates)
18+
{'type'=>'Feature','geometry'=>{ 'type'=>'LineString','coordinates'=> coordinates}}.to_json
19+
end
20+
21+
def polygon_geojson(coordinates)
22+
{'type'=>'Feature','geometry'=>{ 'type'=>'Polygon','coordinates'=> coordinates}}.to_json
23+
end
24+
1725
def multipolygon_geojson(coordinates)
1826
{'type'=>'Feature','geometry'=>{ 'type'=>'MultiPolygon','coordinates'=> coordinates}}.to_json
1927
end

test/unit/issue_test.rb

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,69 @@ class IssueTest < GttTest
6363
assert_geojson_collection Issue.geojson
6464
end
6565

66-
test 'should ignore small geom changes' do
66+
test 'should ignore small point geom changes' do
6767
coordinates = [135.220734222412, 34.7056906000311]
6868

69-
@issue.geojson = point_geojson(coordinates)
70-
old_coordinates = JSON.parse(@issue.geojson).fetch("geometry").fetch("coordinates")
71-
new_coordinates = old_coordinates.each{|c| c + 0.00000001}
69+
@issue.update_attribute :geojson, point_geojson(coordinates)
70+
@issue.instance_variable_set "@geojson", nil
71+
old_coordinates = @issue.geojson["geometry"]["coordinates"]
72+
73+
new_coordinates = old_coordinates.map{|c| c + 0.000000001}
7274
@issue.update_attribute :geojson, point_geojson(new_coordinates)
73-
@issue.reload
74-
assert_equal old_coordinates, JSON.parse(@issue.geojson).fetch("geometry").fetch("coordinates")
75+
@issue.instance_variable_set "@geojson", nil
76+
assert_equal old_coordinates, @issue.geojson["geometry"]["coordinates"]
7577

7678
new_coordinates = [old_coordinates[0] + 0.2, old_coordinates[1]]
7779
@issue.update_attribute :geojson, point_geojson(new_coordinates)
78-
@issue.reload
79-
assert_equal new_coordinates, JSON.parse(@issue.geojson).fetch("geometry").fetch("coordinates")
80+
@issue.instance_variable_set "@geojson", nil
81+
assert_equal new_coordinates, @issue.geojson["geometry"]["coordinates"]
82+
end
83+
84+
test 'should ignore small linestring geom changes' do
85+
coordinates = test_coordinates[0]
86+
87+
@issue.update_attribute :geojson, linestring_geojson(coordinates)
88+
@issue.instance_variable_set "@geojson", nil
89+
old_coordinates = @issue.geojson["geometry"]["coordinates"]
90+
91+
new_coordinates = old_coordinates.map{|c| [c[0] + 0.000000001, c[1] + 0.000000001]}
92+
@issue.update_attribute :geojson, linestring_geojson(new_coordinates)
93+
@issue.instance_variable_set "@geojson", nil
94+
assert_equal old_coordinates, @issue.geojson["geometry"]["coordinates"]
95+
96+
new_coordinates = old_coordinates.map{|c| [c[0] + 0.2, c[1]]}
97+
@issue.update_attribute :geojson, linestring_geojson(new_coordinates)
98+
@issue.instance_variable_set "@geojson", nil
99+
assert_equal new_coordinates, @issue.geojson["geometry"]["coordinates"]
100+
101+
new_coordinates = old_coordinates.map{|c| [c[0], c[1]]}
102+
new_coordinates.delete_at(1)
103+
@issue.update_attribute :geojson, linestring_geojson(new_coordinates)
104+
@issue.instance_variable_set "@geojson", nil
105+
assert_equal new_coordinates, @issue.geojson["geometry"]["coordinates"]
106+
end
107+
108+
test 'should ignore small polygon geom changes' do
109+
coordinates = test_coordinates
110+
111+
@issue.update_attribute :geojson, polygon_geojson(coordinates)
112+
@issue.instance_variable_set "@geojson", nil
113+
old_coordinates = @issue.geojson["geometry"]["coordinates"]
114+
115+
new_coordinates = [old_coordinates[0].map{|c| [c[0] + 0.000000001, c[1] + 0.000000001]}]
116+
@issue.update_attribute :geojson, polygon_geojson(new_coordinates)
117+
@issue.instance_variable_set "@geojson", nil
118+
assert_equal old_coordinates, @issue.geojson["geometry"]["coordinates"]
119+
120+
new_coordinates = [old_coordinates[0].map{|c| [c[0] + 0.2, c[1]]}]
121+
@issue.update_attribute :geojson, polygon_geojson(new_coordinates)
122+
@issue.instance_variable_set "@geojson", nil
123+
assert_equal new_coordinates, @issue.geojson["geometry"]["coordinates"]
124+
125+
new_coordinates = [old_coordinates[0].map{|c| [c[0], c[1]]}]
126+
new_coordinates[0].delete_at(1)
127+
@issue.update_attribute :geojson, polygon_geojson(new_coordinates)
128+
@issue.instance_variable_set "@geojson", nil
129+
assert_equal new_coordinates, @issue.geojson["geometry"]["coordinates"]
80130
end
81131
end

0 commit comments

Comments
 (0)