sharee.bike-App/SharedBusinessLogic.Tests/Model/Connector/TestQuery.cs

150 lines
5.6 KiB
C#
Raw Normal View History

2023-11-21 15:26:57 +01:00
using System;
2023-04-05 15:02:10 +02:00
using System.Threading.Tasks;
2022-08-30 15:42:25 +02:00
using Newtonsoft.Json;
2023-04-05 15:02:10 +02:00
using NSubstitute;
2021-07-12 21:31:46 +02:00
using NUnit.Framework;
2024-04-09 12:53:23 +02:00
using ShareeBike.Repository;
using ShareeBike.Repository.Response;
using ShareeBike.Repository.Response.Stations;
2021-07-12 21:31:46 +02:00
2024-04-09 12:53:23 +02:00
namespace SharedBusinessLogic.Tests.Fixtures.ObjectTests.Query
2021-07-12 21:31:46 +02:00
{
2023-04-19 12:14:14 +02:00
[TestFixture]
2021-07-12 21:31:46 +02:00
public class TestQuery
{
private const string BIKESAVAILABLE = @"{
""copri_version"" : ""4.1.0.0"",
""bikes"" : {},
""response_state"" : ""OK"",
""apiserver"" : ""https://app.tink-konstanz.de"",
""authcookie"" : """",
""response"" : ""bikes_available"",
""bikes"" : {
""2352"" : {
""description"" : ""Cargo Long"",
""state"" : ""available"",
""bike"" : ""1"",
""gps"" : { ""latitude"": ""47.669888"", ""longitude"": ""9.167749"" },
""station"" : ""9""
}
}
}";
2023-05-09 08:47:52 +02:00
/// <summary>
/// Holds the response on stations_available request.
/// </summary>
/// <remarks> V1: Did not hold station_type entry.</remarks>
private const string STATIONSALLV2 = @"{
2021-07-12 21:31:46 +02:00
""copri_version"" : ""4.1.0.0"",
""stations"" : {
2023-05-09 08:47:52 +02:00
""9"" : {
""station"" : ""9"",
2021-07-12 21:31:46 +02:00
""bike_soll"" : ""0"",
""bike_ist"" : ""7"",
2024-04-09 12:53:23 +02:00
""station_group"" : [ ""ShareeBike"" ],
2021-07-12 21:31:46 +02:00
""gps"" : { ""latitude"": ""47.66756"", ""longitude"": ""9.16477"" },
""state"" : ""available"",
2023-05-09 08:47:52 +02:00
""description"" : """",
""station_type"": {
""Cargobike"": {
""bike_count"": ""1"",
2024-04-09 12:53:23 +02:00
""bike_group"": ""ShareeBike""
2023-05-09 08:47:52 +02:00
},
""Citybike"": {
""bike_count"": ""0"",
""bike_group"": ""FR300103""
}
}
2021-07-12 21:31:46 +02:00
},
""13"" : {
""station"" : ""13"",
""bike_soll"" : ""4"",
""bike_ist"" : ""1"",
2024-04-09 12:53:23 +02:00
""station_group"" : [ ""ShareeBike"" ],
2021-07-12 21:31:46 +02:00
""gps"" : { ""latitude"": ""47.657756"", ""longitude"": ""9.176084"" },
""state"" : ""available"",
""description"" : """"
},
""30"" : {
""station"" : ""30"",
""bike_soll"" : ""5"",
""bike_ist"" : ""0"",
2024-04-09 12:53:23 +02:00
""station_group"" : [ ""ShareeBike"", ""Citybike"" ],
2021-07-12 21:31:46 +02:00
""gps"" : { ""latitude"": ""47.657766"", ""longitude"": ""9.176094"" },
""state"" : ""available"",
""description"" : ""Test für Stadtradstation""
}
},
2024-04-09 12:53:23 +02:00
""user_group"" : [ ""Citybike"", ""ShareeBike"" ],
2021-07-12 21:31:46 +02:00
""response_state"" : ""OK"",
""authcookie"" : ""6103_f782a208d9399291ba8d086b5dcc2509_12345678"",
""debuglevel"" : ""2"",
""response"" : ""stations_all"",
""user_id"" : ""javaminister@gmail.com"",
""apiserver"" : ""https://tinkwwp.copri-bike.de""
}";
[Test]
public async Task TestGetStations()
{
2023-04-05 15:02:10 +02:00
var server = Substitute.For<ICopriServer>();
2021-07-12 21:31:46 +02:00
2023-05-09 08:47:52 +02:00
server.GetStationsAsync().Returns(Task.Run(() => JsonConvert.DeserializeObject<StationsAvailableResponse>(STATIONSALLV2)));
2021-07-12 21:31:46 +02:00
2024-04-09 12:53:23 +02:00
var result = await new ShareeBike.Model.Connector.Query(server).GetBikesAndStationsAsync();
2021-07-12 21:31:46 +02:00
2024-04-09 12:53:23 +02:00
Assert.That(result.Response.StationsAll.Count, Is.EqualTo(3));
Assert.That(result.Response.StationsAll["9"].BikeGroups.AvailableCount, Is.EqualTo(1));
Assert.That(result.Response.BikesOccupied.Count, Is.EqualTo(0));
Assert.That(result.Source, Is.EqualTo(typeof(CopriCallsMonkeyStore)));
Assert.That(result.Exception, Is.Null);
2021-07-12 21:31:46 +02:00
}
[Test]
2023-11-21 15:26:57 +01:00
public async Task TestGetBikesAsync()
2021-07-12 21:31:46 +02:00
{
2023-04-05 15:02:10 +02:00
var server = Substitute.For<ICopriServer>();
2021-07-12 21:31:46 +02:00
2023-11-21 15:26:57 +01:00
var uri = new Uri("https://Myserver.com");
var station = "MyStation";
var bike = "MyBike";
2021-07-12 21:31:46 +02:00
2023-11-21 15:26:57 +01:00
server.GetBikesAvailableAsync(uri, station, bike).Returns(Task.Run(() => JsonConvert.DeserializeObject<BikesAvailableResponse>(BIKESAVAILABLE)));
2024-04-09 12:53:23 +02:00
var result = await new ShareeBike.Model.Connector.Query(server).GetBikesAsync(uri, station, bike);
2021-07-12 21:31:46 +02:00
2024-04-09 12:53:23 +02:00
Assert.That(result.Response.Count, Is.EqualTo(1));
Assert.That(result.Source, Is.EqualTo(typeof(CopriCallsMonkeyStore)));
Assert.That(result.Exception, Is.Null);
2023-11-21 15:26:57 +01:00
await server.Received().GetBikesAvailableAsync(uri, station, bike);
2021-07-12 21:31:46 +02:00
}
[Test]
public async Task TestGetBikesOccupied()
{
2023-04-05 15:02:10 +02:00
var server = Substitute.For<ICopriServer>();
2021-07-12 21:31:46 +02:00
2024-04-09 12:53:23 +02:00
var result = await new ShareeBike.Model.Connector.Query(server).GetBikesOccupiedAsync();
2021-07-12 21:31:46 +02:00
2024-04-09 12:53:23 +02:00
Assert.That(result.Response.Count, Is.EqualTo(0));
Assert.That(result.Source, Is.EqualTo(typeof(CopriCallsMonkeyStore)));
Assert.That("Abfrage der reservierten/ gebuchten Räder fehlgeschlagen. Kein Benutzer angemeldet.", Is.EqualTo(result.Exception.Message));
2021-07-12 21:31:46 +02:00
}
2023-11-21 15:26:57 +01:00
[Test]
public async Task TestGetBikesAvailble()
{
var server = Substitute.For<ICopriServer>();
server.GetBikesAvailableAsync(Arg.Any<Uri>(), Arg.Any<string>()).Returns(new BikesAvailableResponse());
var uri = new Uri("https://shareeapp-fr01.copri.eu//");
var station = "FR101";
2024-04-09 12:53:23 +02:00
await new ShareeBike.Model.Connector.Query(server).GetBikesAsync(uri, station);
2023-11-21 15:26:57 +01:00
await server.Received().GetBikesAvailableAsync(uri, station);
}
}
2021-07-12 21:31:46 +02:00
}