Skip to content

Commit b23b3c4

Browse files
Merge pull request #20 from blackboxlogic/develop
Develop
2 parents eb9b38b + 1e7ce6c commit b23b3c4

File tree

10 files changed

+304
-81
lines changed

10 files changed

+304
-81
lines changed

.github/workflows/dotnetcore.yml

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,17 @@ on:
99
jobs:
1010
build:
1111
runs-on: ubuntu-latest
12-
##if: github.event == 'watch' && github.actor == github.event.repository.owner.login #only me
12+
# if: github.event == 'watch' && github.actor == github.event.repository.owner.login #only me
1313
steps:
1414
- uses: actions/checkout@v2
1515
- name: Setup .NET Core
1616
uses: actions/setup-dotnet@v1
1717
# with:
1818
# dotnet-version: 3.1.101
19-
- name: Build
19+
- name: Run Unit Test
20+
run: dotnet test /home/runner/work/OsmApiClient/OsmSharp.IO.API.Tests/OsmSharp.IO.API.Tests.csproj
21+
- name: Build Solution
2022
run: dotnet build --configuration Release
21-
# - name: Pack
22-
# run: dotnet pack /home/runner/work/OsmApiClient/OsmApiClient/src/OsmApiClient.csproj -o Artifacts
23-
# - uses: actions/upload-artifact@v1
24-
# with:
25-
# name: OsmApiClient.0.0.1-beta.4.nupkg
26-
# path: /home/runner/work/OsmApiClient/OsmApiClient/src/bin/Release/*.nupkg
27-
- name: Nuget publish
23+
- name: Nuget Publish
2824
run: dotnet nuget push --source https://api.nuget.org/v3/index.json --api-key ${{secrets.NugetApiKey}} /home/runner/work/OsmApiClient/OsmApiClient/src/bin/Release/*.nupkg
2925

FunctionalTests/FunctionalTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19-
<ProjectReference Include="..\src\OsmApiClient.csproj" />
19+
<ProjectReference Include="..\src\OsmSharp.IO.API.csproj" />
2020
</ItemGroup>
2121

2222
<ItemGroup>

FunctionalTests/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static void Main()
3131
// Test BasicAuth
3232
if (!string.IsNullOrEmpty(Config["basicAuth:Password"]))
3333
{
34-
if (!Config["osmApiUrl"].Contains("dev")) throw new Exception("These tests modify data, and it looks like your running them in PROD, please don't");
34+
if (!Config["osmApiUrl"].Contains("dev")) throw new Exception("These tests modify data, and it looks like you're running them in PROD, please don't");
3535

3636
testsLogger.LogInformation("Testing BasicAuth client");
3737
var basicAuth = clientFactory.CreateBasicAuthClient(Config["basicAuth:User"], Config["basicAuth:Password"]);

OsmApiClient.sln

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ VisualStudioVersion = 16.0.29009.5
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunctionalTests", "FunctionalTests\FunctionalTests.csproj", "{5CF184D1-FD7F-4E23-968C-5E62D47C8763}"
77
EndProject
8-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OsmApiClient", "src\OsmApiClient.csproj", "{2D5EBE3D-2EC0-41AE-8326-E866BC2DB23C}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OsmSharp.IO.API", "src\OsmSharp.IO.API.csproj", "{2D5EBE3D-2EC0-41AE-8326-E866BC2DB23C}"
99
EndProject
1010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{02AFE1C4-242D-4443-9CBE-6F69B8D32E6B}"
1111
ProjectSection(SolutionItems) = preProject
@@ -14,6 +14,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
1414
README.md = README.md
1515
EndProjectSection
1616
EndProject
17+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OsmSharp.IO.API.Tests", "OsmSharp.IO.API.Tests\OsmSharp.IO.API.Tests.csproj", "{DEB65369-465C-46BA-B545-868E0CE8ED8B}"
18+
EndProject
1719
Global
1820
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1921
Debug|Any CPU = Debug|Any CPU
@@ -28,6 +30,10 @@ Global
2830
{2D5EBE3D-2EC0-41AE-8326-E866BC2DB23C}.Debug|Any CPU.Build.0 = Debug|Any CPU
2931
{2D5EBE3D-2EC0-41AE-8326-E866BC2DB23C}.Release|Any CPU.ActiveCfg = Release|Any CPU
3032
{2D5EBE3D-2EC0-41AE-8326-E866BC2DB23C}.Release|Any CPU.Build.0 = Release|Any CPU
33+
{DEB65369-465C-46BA-B545-868E0CE8ED8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
34+
{DEB65369-465C-46BA-B545-868E0CE8ED8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
35+
{DEB65369-465C-46BA-B545-868E0CE8ED8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
36+
{DEB65369-465C-46BA-B545-868E0CE8ED8B}.Release|Any CPU.Build.0 = Release|Any CPU
3137
EndGlobalSection
3238
GlobalSection(SolutionProperties) = preSolution
3339
HideSolutionNode = FALSE
Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
using Microsoft.Extensions.Logging;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using OsmSharp;
4+
using OsmSharp.API;
5+
using OsmSharp.Db;
6+
using OsmSharp.IO.API;
7+
using System;
8+
using System.Collections.Generic;
9+
using System.Linq;
10+
using System.Net.Http;
11+
using System.Threading.Tasks;
12+
13+
namespace OsmApiClientTests
14+
{
15+
[TestClass]
16+
public class NonAuthTests
17+
{
18+
private INonAuthClient client;
19+
20+
private readonly Bounds WashingtonDC = new Bounds()
21+
{
22+
MinLongitude = -77.0671918f,
23+
MinLatitude = 38.9007186f,
24+
MaxLongitude = -77.00099990f,
25+
MaxLatitude = 38.98734f
26+
};
27+
28+
private readonly Bounds TraceArea = new Bounds()
29+
{
30+
MinLongitude = 0,
31+
MinLatitude = 51.5f,
32+
MaxLongitude = 0.25f,
33+
MaxLatitude = 51.75f,
34+
};
35+
36+
private readonly Bounds NoteBounds = new Bounds()
37+
{
38+
MinLongitude = 0,
39+
MinLatitude = 50f,
40+
MaxLongitude = 5f,
41+
MaxLatitude = 55f,
42+
};
43+
44+
private Task<Osm> GetWashingtonObject()
45+
{
46+
return client.GetMap(WashingtonDC);
47+
}
48+
49+
private async Task<Node> GetFirstNodeInWashington()
50+
{
51+
var map = await client.GetMap(WashingtonDC);
52+
return await client.GetNode(map.Nodes.First().Id.Value);
53+
}
54+
55+
[TestInitialize]
56+
public void TestInitialize()
57+
{
58+
using var loggerFactory = LoggerFactory.Create(b => b.AddConsole());
59+
var logger = loggerFactory.CreateLogger("Tests");
60+
var clientFactory = new ClientsFactory(logger, new HttpClient(), "https://master.apis.dev.openstreetmap.org/api/");
61+
client = clientFactory.CreateNonAuthClient();
62+
}
63+
64+
[TestMethod]
65+
public async Task TestCapabilities()
66+
{
67+
var capabilities = await client.GetCapabilities();
68+
Assert.IsNotNull(capabilities?.Api?.Status?.Api);
69+
Assert.IsNotNull(capabilities?.Policy);
70+
}
71+
72+
[TestMethod]
73+
public async Task TestApiVersion()
74+
{
75+
var apiVersion = await client.GetVersions();
76+
Assert.IsNotNull(apiVersion);
77+
}
78+
79+
[TestMethod]
80+
public async Task TestMap()
81+
{
82+
var map = await GetWashingtonObject();
83+
Assert.IsNotNull(map?.Nodes?.FirstOrDefault());
84+
Assert.IsNotNull(map?.Ways?.FirstOrDefault());
85+
Assert.IsNotNull(map?.Relations?.FirstOrDefault());
86+
}
87+
88+
[TestMethod]
89+
public async Task TestNode()
90+
{
91+
var map = await GetWashingtonObject();
92+
var nodeId = map.Nodes.First().Id.Value;
93+
var node = await client.GetNode(nodeId);
94+
Assert.IsNotNull(node);
95+
var nodeVersion = client.GetNodeVersion(nodeId, 1);
96+
Assert.IsNotNull(nodeVersion);
97+
var nodeHistory = await client.GetNodeHistory(nodeId);
98+
Assert.IsTrue(nodeHistory.Any());
99+
var multifetchNodes = await client.GetNodes(new Dictionary<long, long?>() { { nodeId, null }, { nodeId + 1, 1 } });
100+
Assert.IsTrue(multifetchNodes.Any());
101+
var nodeRelations = await client.GetNodeRelations(nodeId);
102+
Assert.IsNotNull(nodeRelations);
103+
var nodeWays = await client.GetNodeWays(nodeId);
104+
Assert.IsNotNull(nodeWays);
105+
}
106+
107+
[TestMethod]
108+
public async Task TestWay()
109+
{
110+
var map = await GetWashingtonObject();
111+
var wayId = map.Ways.First().Id.Value;
112+
var way = await client.GetWay(wayId);
113+
Assert.IsNotNull(way);
114+
var wayComplete = await client.GetCompleteWay(wayId);
115+
Assert.IsNotNull(wayComplete);
116+
}
117+
118+
[TestMethod]
119+
public async Task TestRelation()
120+
{
121+
var map = await GetWashingtonObject();
122+
var relationId = map.Relations.First().Id.Value;
123+
var relation = client.GetRelation(relationId).Result;
124+
Assert.IsNotNull(relation);
125+
var relationComplete = client.GetCompleteRelation(relationId).Result;
126+
Assert.IsNotNull(relationComplete);
127+
}
128+
129+
[TestMethod]
130+
public async Task TestGetElements()
131+
{
132+
var map = await GetWashingtonObject();
133+
var multifetchElements = await client.GetElements(
134+
map.Nodes.Select(n => new OsmGeoKey(n)).Concat(map.Ways.Select(n => new OsmGeoKey(n))).ToArray());
135+
Assert.IsNotNull(multifetchElements);
136+
}
137+
138+
[TestMethod]
139+
public async Task TestGetChangeset()
140+
{
141+
var node = await GetFirstNodeInWashington();
142+
var changeset = await client.GetChangeset(node.ChangeSetId.Value);
143+
Assert.IsNotNull(changeset);
144+
var changesetWithDiscussion = await client.GetChangeset(node.ChangeSetId.Value, true);
145+
Assert.IsNotNull(changesetWithDiscussion?.Discussion);
146+
}
147+
148+
[TestMethod]
149+
public async Task TestQueryChangesets()
150+
{
151+
var node = await GetFirstNodeInWashington();
152+
var changesets = await client.QueryChangesets(WashingtonDC, null, null, null, null, false, false, null);
153+
Assert.IsTrue(changesets.Any());
154+
changesets = await client.QueryChangesets(null, node.UserId, null, null, null, false, false, null);
155+
Assert.IsTrue(changesets.Any());
156+
changesets = await client.QueryChangesets(null, node.UserId, null, DateTime.MinValue, null, false, false, null);
157+
Assert.IsTrue(changesets.Any());
158+
changesets = await client.QueryChangesets(null, null, node.UserName, null, null, false, false, null);
159+
Assert.IsTrue(changesets.Any());
160+
changesets = await client.QueryChangesets(null, null, null, null, null, false, false, new long[] { 151176, 151177 });
161+
Assert.AreEqual(2, changesets.Length);
162+
}
163+
164+
[TestMethod]
165+
public async Task TestUser()
166+
{
167+
var node = await GetFirstNodeInWashington();
168+
var user = await client.GetUser(node.UserId.Value);
169+
Assert.IsNotNull(user);
170+
var users = await client.GetUsers(node.UserId.Value, node.UserId.Value + 1);
171+
Assert.IsTrue(users.Any());
172+
}
173+
174+
[TestMethod]
175+
public async Task TestTrack()
176+
{
177+
var gpx = await client.GetTrackPoints(TraceArea);
178+
Assert.IsNotNull(gpx);
179+
}
180+
181+
[TestMethod]
182+
public async Task TestNotes()
183+
{
184+
var notes = await client.GetNotes(NoteBounds);
185+
Assert.IsTrue(notes?.Length > 0);
186+
Assert.IsTrue(notes[0].Id.HasValue);
187+
var noteId = notes[0].Id.Value;
188+
var note = await client.GetNote(noteId);
189+
Assert.IsTrue(note?.Id == noteId);
190+
var feed = await client.GetNotesRssFeed(NoteBounds);
191+
Assert.IsNotNull(feed);
192+
var node = await GetFirstNodeInWashington();
193+
await client.QueryNotes("ThisIsANote", null, null, null, null, null, null);
194+
await client.QueryNotes("ThisIsANote", node.UserId, null, null, null, null, null);
195+
await client.QueryNotes("ThisIsANote", null, node.UserName, null, null, null, null);
196+
await client.QueryNotes("ThisIsANote", null, null, 100, null, null, null);
197+
await client.QueryNotes("ThisIsANote", null, null, null, 1, null, null);
198+
await client.QueryNotes("ThisIsANote", null, null, null, null, DateTime.Now.Subtract(TimeSpan.FromDays(100)), null);
199+
await client.QueryNotes("ThisIsANote", null, null, null, null, null, DateTime.Now.Subtract(TimeSpan.FromDays(2)));
200+
var newNote = await client.CreateNote(10.1f, 10.2f, "HelloWorld");
201+
Assert.IsTrue(newNote?.Comments?.Comments?.FirstOrDefault()?.Text == "HelloWorld");
202+
Assert.IsTrue(newNote?.Comments?.Comments?.FirstOrDefault()?.Action == Note.Comment.CommentAction.Opened);
203+
Assert.IsTrue(newNote?.Comments?.Comments?.FirstOrDefault()?.UserId == null);
204+
Assert.AreEqual(Note.NoteStatus.Open, newNote?.Status);
205+
}
206+
}
207+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp31</TargetFramework>
5+
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.4" />
11+
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.4" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
13+
<PackageReference Include="MSTest.TestAdapter" Version="2.1.0" />
14+
<PackageReference Include="MSTest.TestFramework" Version="2.1.0" />
15+
<PackageReference Include="coverlet.collector" Version="1.2.0" />
16+
</ItemGroup>
17+
18+
<ItemGroup>
19+
<ProjectReference Include="..\src\OsmSharp.IO.API.csproj" />
20+
</ItemGroup>
21+
22+
</Project>

src/BasicAuthClient.cs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,29 @@
55

66
namespace OsmSharp.IO.API
77
{
8-
/// <summary>
9-
/// Use of basic auth is discouraged. Use OAuth when practical.
10-
/// </summary>
11-
public class BasicAuthClient : AuthClient
12-
{
13-
private readonly string Username;
14-
private readonly string Password;
8+
/// <summary>
9+
/// Use of basic auth is discouraged. Use OAuth when practical.
10+
/// </summary>
11+
public class BasicAuthClient : AuthClient
12+
{
13+
private readonly string Username;
14+
private readonly string Password;
1515

16-
public BasicAuthClient(HttpClient httpClient,
16+
public BasicAuthClient(HttpClient httpClient,
1717
ILogger logger,
1818
string baseAddress,
1919
string username,
2020
string password)
21-
: base (baseAddress, httpClient, logger)
22-
{
23-
Username = username;
24-
Password = password;
25-
}
21+
: base (baseAddress, httpClient, logger)
22+
{
23+
Username = username;
24+
Password = password;
25+
}
2626

27-
protected override void AddAuthentication(HttpRequestMessage request, string url, string method = "GET")
28-
{
29-
_logger?.LogInformation($"Adding BasicAuth for user {Username}.");
30-
var auth = Convert.ToBase64String(Encoding.ASCII.GetBytes(Username + ":" + Password));
27+
protected override void AddAuthentication(HttpRequestMessage request, string url, string method = "GET")
28+
{
29+
var auth = Convert.ToBase64String(Encoding.ASCII.GetBytes(Username + ":" + Password));
3130
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", auth);
32-
}
33-
}
31+
}
32+
}
3433
}

0 commit comments

Comments
 (0)