@@ -2,48 +2,157 @@ package geonames_test
2
2
3
3
import (
4
4
"bytes"
5
+ "context"
6
+ "fmt"
5
7
"io"
6
8
"net/http"
7
9
"net/http/httptest"
8
10
"testing"
9
11
12
+ "github.com/google/go-cmp/cmp"
10
13
"github.com/qba73/geonames"
11
14
)
12
15
13
- // ts is a helper func that creates a test server with embedded URI validation.
14
- var testServer = func ( reader io. Reader , wantURI string , t * testing.T ) * httptest.Server {
16
+ // newElevationtestServer creates a test server with embedded URI validation.
17
+ func newElevationTestServer ( data [] byte , wantURI string , t * testing.T ) * httptest.Server {
15
18
ts := httptest .NewServer (http .HandlerFunc (func (rw http.ResponseWriter , r * http.Request ) {
16
19
gotReqURI := r .RequestURI
17
20
verifyURIs (wantURI , gotReqURI , t )
18
- _ , err := io .Copy (rw , reader )
21
+ _ , err := io .Copy (rw , bytes . NewBuffer ( data ) )
19
22
if err != nil {
20
23
t .Fatal (err )
21
24
}
22
25
}))
23
26
return ts
24
27
}
25
28
26
- func TestGetElevationReturnsDataOnValidInput (t * testing.T ) {
29
+ func TestGetElevationSRTM1ReturnsDataOnValidInput (t * testing.T ) {
27
30
t .Parallel ()
28
31
29
- resp := new (bytes. Buffer )
30
- resp . Read ([] byte ( `23` ) )
32
+ lat , lng := 50.0 , 50.0
33
+ wantReqURI := fmt . Sprintf ( "/srtm1JSON?lat=%.3f&lng=%.3f&username=DummyUser" , lat , lng )
31
34
32
- ts := testServer (& resp )
35
+ ts := newElevationTestServer (srtm1 , wantReqURI , t )
36
+ defer ts .Close ()
37
+
38
+ client , err := geonames .NewClient ("DummyUser" , geonames .WithBaseURL (ts .URL ))
39
+ if err != nil {
40
+ t .Fatal (err )
41
+ }
42
+
43
+ want := geonames.Elevation {
44
+ Type : "srtm1" ,
45
+ Lat : 54.166 ,
46
+ Lng : - 6.083 ,
47
+ Value : 375 ,
48
+ }
33
49
50
+ got , err := client .GetElevationSRTM1 (context .Background (), lat , lng )
51
+ if err != nil {
52
+ t .Fatal (err )
53
+ }
54
+
55
+ if ! cmp .Equal (want , got ) {
56
+ t .Error (cmp .Diff (want , got ))
57
+ }
34
58
}
35
59
36
- func TestGetElevationValidInput (t * testing.T ) {
60
+ func TestGetElevationSRTM3ReturnsDataOnValidInput (t * testing.T ) {
37
61
t .Parallel ()
38
62
39
- wantReqURI := "/srtm1JSON?lat=50&lng=50&username=DummyUser"
40
- ts := newTestServer (testFile , wantReqURI , t )
63
+ lat , lng := 55.166 , - 6.088
64
+ wantReqURI := fmt .Sprintf ("/srtm3JSON?lat=%.3f&lng=%.3f&username=DummyUser" , lat , lng )
65
+
66
+ ts := newElevationTestServer (srtm3 , wantReqURI , t )
41
67
defer ts .Close ()
42
68
43
69
client , err := geonames .NewClient ("DummyUser" , geonames .WithBaseURL (ts .URL ))
44
70
if err != nil {
45
71
t .Fatal (err )
46
72
}
47
73
48
- client .GetElevation ()
74
+ want := geonames.Elevation {
75
+ Type : "srtm3" ,
76
+ Lat : 55.166 ,
77
+ Lng : - 6.088 ,
78
+ Value : 263 ,
79
+ }
80
+
81
+ got , err := client .GetElevationSRTM3 (context .Background (), lat , lng )
82
+ if err != nil {
83
+ t .Fatal (err )
84
+ }
85
+
86
+ if ! cmp .Equal (want , got ) {
87
+ t .Error (cmp .Diff (want , got ))
88
+ }
49
89
}
90
+
91
+ func TestGetElevationAstergdemReturnsDataOnValidInput (t * testing.T ) {
92
+ t .Parallel ()
93
+
94
+ lat , lng := 50.01 , 10.20
95
+ wantReqURI := fmt .Sprintf ("/astergdemJSON?lat=%.3f&lng=%.3f&username=DummyUser" , lat , lng )
96
+
97
+ ts := newElevationTestServer (astergdem , wantReqURI , t )
98
+ defer ts .Close ()
99
+
100
+ client , err := geonames .NewClient ("DummyUser" , geonames .WithBaseURL (ts .URL ))
101
+ if err != nil {
102
+ t .Fatal (err )
103
+ }
104
+
105
+ want := geonames.Elevation {
106
+ Type : "astergdem" ,
107
+ Lat : 50.010 ,
108
+ Lng : 10.200 ,
109
+ Value : 206 ,
110
+ }
111
+
112
+ got , err := client .GetElevationAstergdem (context .Background (), lat , lng )
113
+ if err != nil {
114
+ t .Fatal (err )
115
+ }
116
+
117
+ if ! cmp .Equal (want , got ) {
118
+ t .Error (cmp .Diff (want , got ))
119
+ }
120
+ }
121
+
122
+ func TestGetElevationGTOPO30ReturnsDataOnValidInput (t * testing.T ) {
123
+ t .Parallel ()
124
+
125
+ lat , lng := 47.01 , 10.2
126
+ wantReqURI := fmt .Sprintf ("/gtopo30JSON?lat=%.3f&lng=%.3f&username=DummyUser" , lat , lng )
127
+
128
+ ts := newElevationTestServer (gtopo30 , wantReqURI , t )
129
+ defer ts .Close ()
130
+
131
+ client , err := geonames .NewClient ("DummyUser" , geonames .WithBaseURL (ts .URL ))
132
+ if err != nil {
133
+ t .Fatal (err )
134
+ }
135
+
136
+ want := geonames.Elevation {
137
+ Type : "gtopo30" ,
138
+ Lat : 47.01 ,
139
+ Lng : 10.20 ,
140
+ Value : 2632 ,
141
+ }
142
+
143
+ got , err := client .GetElevationGTOPO30 (context .Background (), lat , lng )
144
+ if err != nil {
145
+ t .Fatal (err )
146
+ }
147
+
148
+ if ! cmp .Equal (want , got ) {
149
+ t .Error (cmp .Diff (want , got ))
150
+ }
151
+ }
152
+
153
+ var (
154
+ srtm1 = []byte (`{"srtm1":375,"lng":-6.083,"lat":54.166}` )
155
+ srtm3 = []byte (`{"srtm3":263,"lng":-6.088,"lat":55.166}` )
156
+ astergdem = []byte (`{"lng":10.2,"astergdem":206,"lat":50.01}` )
157
+ gtopo30 = []byte (`{"lng":10.2,"gtopo30":2632,"lat":47.01}` )
158
+ )
0 commit comments