2023-01-18 14:22:51 +01:00
|
|
|
using Newtonsoft.Json;
|
2022-04-25 22:15:15 +02:00
|
|
|
using NUnit.Framework;
|
2022-08-30 15:42:25 +02:00
|
|
|
using TINK.Model.Connector.Updater;
|
2022-04-25 22:15:15 +02:00
|
|
|
using TINK.Repository.Response;
|
|
|
|
|
|
|
|
namespace TestShareeLib.Model.Connector
|
|
|
|
{
|
|
|
|
[TestFixture]
|
|
|
|
public class TestBikeInfoFactory
|
|
|
|
{
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_Available_NoBc()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoAvailable>(
|
|
|
|
@"{
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""state"" : ""available"",
|
|
|
|
""bike"" : ""1"",
|
|
|
|
""gps"" : { ""latitude"": ""47.669888"", ""longitude"": ""9.167749"" },
|
|
|
|
""station"" : ""9"",
|
|
|
|
""system"" : ""LOCK""
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri),
|
2022-04-25 22:15:15 +02:00
|
|
|
Is.Null,
|
|
|
|
"BC- bikes (\"system\" : \"LOCK\") are no more supported.");
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_Available_InvalidState()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoAvailable>(
|
|
|
|
@"{
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""state"" : ""reserved"",
|
|
|
|
""bike"" : ""1"",
|
|
|
|
""gps"" : { ""latitude"": ""47.669888"", ""longitude"": ""9.167749"" },
|
|
|
|
""station"" : ""9"",
|
|
|
|
""system"" : ""Ilockit""
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri),
|
2022-04-25 22:15:15 +02:00
|
|
|
Is.Null,
|
|
|
|
"Invalid (\"state\" : \"reserved\") detected.");
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_Available_NoStation()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoAvailable>(
|
|
|
|
@"{
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""state"" : ""available"",
|
|
|
|
""bike"" : ""1"",
|
|
|
|
""gps"" : { ""latitude"": ""47.669888"", ""longitude"": ""9.167749"" },
|
|
|
|
""station"" : """",
|
|
|
|
""system"" : ""Ilockit""
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri),
|
2022-04-25 22:15:15 +02:00
|
|
|
Is.Null,
|
|
|
|
"Station must not be null.");
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_Available_DefaultLock()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoAvailable>(
|
|
|
|
@"{
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""state"" : ""available"",
|
|
|
|
""bike"" : ""1"",
|
|
|
|
""gps"" : { ""latitude"": ""47.669888"", ""longitude"": ""9.167749"" },
|
|
|
|
""station"" : ""9"",
|
|
|
|
""system"" : """"
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri).GetType(),
|
2022-08-30 15:42:25 +02:00
|
|
|
Is.EqualTo(typeof(TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfo)),
|
2022-04-25 22:15:15 +02:00
|
|
|
"Default lock by is BackendLock.");
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_Available_BluetoothLock()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoAvailable>(
|
|
|
|
@"{
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""state"" : ""available"",
|
|
|
|
""bike"" : ""1"",
|
|
|
|
""gps"" : { ""latitude"": ""47.669888"", ""longitude"": ""9.167749"" },
|
|
|
|
""station"" : ""9"",
|
|
|
|
""system"" : ""Ilockit""
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri).GetType(),
|
2022-08-30 15:42:25 +02:00
|
|
|
Is.EqualTo(typeof(TINK.Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfo)));
|
2022-04-25 22:15:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_Available_SigoLock()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoAvailable>(
|
|
|
|
@"{
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""state"" : ""available"",
|
|
|
|
""bike"" : ""1"",
|
|
|
|
""gps"" : { ""latitude"": ""47.669888"", ""longitude"": ""9.167749"" },
|
|
|
|
""station"" : ""9"",
|
|
|
|
""system"" : ""SIGO""
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri).GetType(),
|
2022-08-30 15:42:25 +02:00
|
|
|
Is.EqualTo(typeof(TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfo)));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
2023-05-09 08:47:52 +02:00
|
|
|
public void TestCreate_Available_CopriLock_FeedbackPending()
|
2022-08-30 15:42:25 +02:00
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoAvailable>(
|
|
|
|
@"{
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""state"" : ""available"",
|
|
|
|
""bike"" : ""1"",
|
|
|
|
""gps"" : { ""latitude"": ""47.669888"", ""longitude"": ""9.167749"" },
|
|
|
|
""station"" : ""9"",
|
|
|
|
""system"" : ""SIGO"",
|
|
|
|
""co2saving"" : ""You saved tonns of co2!"",
|
|
|
|
""user_miniquery"" : {
|
|
|
|
""footer"" : ""Herzlichen Dank und viel Spaß bei der nächsten Fahrt!"",
|
|
|
|
""subtitle"" : ""Ihre drei Antworten werden anonym gespeichert."",
|
|
|
|
""title"" : ""Bitte unterstützen Sie unsere Begleitforschung"",
|
|
|
|
""questions"" : {
|
|
|
|
""q1"" : {
|
|
|
|
""quest_text"" : ""1. Was war der Hauptzweck dieser Ausleihe?"",
|
|
|
|
""type"" : ""check_one"",
|
|
|
|
""query"" : {
|
|
|
|
""opt5"" : ""e. Ausprobieren"",
|
|
|
|
""opt3"" : ""c. Lastentransport"",
|
|
|
|
""opt6"" : ""f. Sonstiges"",
|
|
|
|
""opt1"" : ""a. Einkauf"",
|
|
|
|
""opt4"" : ""d. Freizeit"",
|
|
|
|
""opt2"" : ""b. Kinderbeförderung""
|
|
|
|
}
|
|
|
|
},
|
|
|
|
""q2"" : {
|
|
|
|
""type"" : ""check_one"",
|
|
|
|
""quest_text"" : ""2. Welches Verkehrsmittel hätten Sie ansonsten benutzt?"",
|
|
|
|
""query"" : {
|
|
|
|
""opt1"" : ""a. Auto"",
|
|
|
|
""opt7"" : ""g. Sonstige"",
|
|
|
|
""opt2"" : ""b. Motorrad oder Motorroller"",
|
|
|
|
""opt4"" : ""d. Eigenes Fahrrad"",
|
|
|
|
""opt6"" : ""f. Keines (ich hätte die Fahrt sonst nicht gemacht)"",
|
|
|
|
""opt5"" : ""e. Zu Fuß"",
|
|
|
|
""opt3"" : ""c. Bus oder Bahn""
|
|
|
|
},
|
|
|
|
},
|
|
|
|
""q3"" : {
|
|
|
|
""type"" : ""text"",
|
|
|
|
""quest_text"" : ""3. Haben Sie Anmerkungen oder Anregungen?"",
|
|
|
|
""query"" : {
|
|
|
|
""opt1"" : """"
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}");
|
|
|
|
|
2023-01-18 14:22:51 +01:00
|
|
|
var bike = BikeInfoFactory.Create(bikeInfoResponse, TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri) as TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfo;
|
2022-08-30 15:42:25 +02:00
|
|
|
|
|
|
|
Assert.That(
|
|
|
|
bike,
|
|
|
|
Is.Not.Null);
|
2022-04-25 22:15:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_ReservedOrBooked_NoBc()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoReservedOrBooked>(
|
|
|
|
@"{
|
|
|
|
""station"" : ""2"",
|
|
|
|
""state"" : ""occupied"",
|
|
|
|
""bike"" : ""20"",
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""start_time"" : ""2017-12-01 22:21:57.740069+01"",
|
|
|
|
""timeCode"" : ""6603"",
|
|
|
|
""system"" : ""LOCK""
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, "a@b", () => new System.DateTime(), TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri),
|
2022-04-25 22:15:15 +02:00
|
|
|
Is.Null,
|
|
|
|
"BC- bikes (\"system\" : \"LOCK\") are no more supported.");
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_ReservedOrBooked_DefaultLock()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoReservedOrBooked>(
|
|
|
|
@"{
|
|
|
|
""station"" : ""2"",
|
|
|
|
""state"" : ""occupied"",
|
|
|
|
""bike"" : ""20"",
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""start_time"" : ""2017-12-01 22:21:57.740069+01"",
|
|
|
|
""timeCode"" : ""6603"",
|
|
|
|
""system"" : """"
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, "a@b", () => new System.DateTime(), TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri).GetType(),
|
2022-08-30 15:42:25 +02:00
|
|
|
Is.EqualTo(typeof(TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfo)));
|
2022-04-25 22:15:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_ReservedOrBooked_BluetoothLock()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoReservedOrBooked>(
|
|
|
|
@"{
|
|
|
|
""station"" : ""2"",
|
|
|
|
""state"" : ""occupied"",
|
|
|
|
""bike"" : ""20"",
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""start_time"" : ""2017-12-01 22:21:57.740069+01"",
|
|
|
|
""timeCode"" : ""6603"",
|
|
|
|
""system"" : ""Ilockit""
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, "a@b", () => new System.DateTime(), TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri).GetType(),
|
2022-08-30 15:42:25 +02:00
|
|
|
Is.EqualTo(typeof(TINK.Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfo)));
|
2022-04-25 22:15:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_ReservedOrBooked_SigoLock()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoReservedOrBooked>(
|
|
|
|
@"{
|
|
|
|
""station"" : ""2"",
|
|
|
|
""state"" : ""occupied"",
|
|
|
|
""bike"" : ""20"",
|
|
|
|
""description"" : ""Cargo Long"",
|
|
|
|
""start_time"" : ""2017-12-01 22:21:57.740069+01"",
|
|
|
|
""timeCode"" : ""6603"",
|
|
|
|
""system"" : ""SIGO""
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, "a@b", () => new System.DateTime(), TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri).GetType(),
|
2022-08-30 15:42:25 +02:00
|
|
|
Is.EqualTo(typeof(TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfo)));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestCreate_Available_CopriLock_FeedBackRequied()
|
|
|
|
{
|
|
|
|
var bikeInfoResponse = JsonConvert.DeserializeObject<BikeInfoAvailable>(
|
|
|
|
@"{
|
|
|
|
""rental_description"": {
|
|
|
|
""reserve_timerange"": ""30 Min"",
|
|
|
|
""name"": ""Lastenrad"",
|
|
|
|
""rental_info"": {
|
|
|
|
""2"": [
|
|
|
|
""AGB"",
|
|
|
|
""Mit der Mietrad Anmietung wird folgender Betreiber <a href='https://shareeapp-wue.copri.eu/site/agb.html' target='_blank'>AGB</a> zugestimmt (als Demo sharee AGB).""
|
|
|
|
],
|
|
|
|
""1"": [
|
|
|
|
""Tracking"",
|
|
|
|
""Ich stimme der Speicherung (Tracking) meiner Fahrstrecke zwecks wissenschaftlicher Auswertung und Berechnung der CO2-Einsparung zu!""
|
|
|
|
]
|
|
|
|
},
|
|
|
|
""id"": ""5523"",
|
|
|
|
""tarif_elements"": {
|
|
|
|
""1"": [
|
|
|
|
""Mietgebühr"",
|
|
|
|
""3,00 € / 1 Std ""
|
|
|
|
],
|
|
|
|
""6"": [
|
|
|
|
""Gratis Mietzeit"",
|
|
|
|
""30 Min / Tag""
|
|
|
|
],
|
|
|
|
""4"": [
|
|
|
|
""Max. Gebühr"",
|
|
|
|
""15.00 € / Tag""
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
""uri_operator"": ""https://shareeapp-wue.copri.eu"",
|
|
|
|
""state"": ""available"",
|
|
|
|
""bike"": ""WUE5529"",
|
|
|
|
""authed"": ""1"",
|
|
|
|
""bike_group"": [
|
|
|
|
""WUE300101""
|
|
|
|
],
|
|
|
|
""gps"": {
|
|
|
|
""longitude"": null,
|
|
|
|
""latitude"": null
|
|
|
|
},
|
|
|
|
""system"": ""sigo"",
|
|
|
|
""tariff_description"": {
|
|
|
|
""free_hours"": ""0.50"",
|
|
|
|
""number"": ""5523"",
|
|
|
|
""max_eur_per_day"": ""15.00"",
|
|
|
|
""name"": ""Lastenrad"",
|
|
|
|
""eur_per_hour"": ""3.00""
|
|
|
|
},
|
|
|
|
""station"": ""WUE9301"",
|
|
|
|
""description"": ""sigolaster Bay"",
|
|
|
|
""lock_state"": ""locked"",
|
|
|
|
""co2saving"" : """"
|
|
|
|
}");
|
|
|
|
|
|
|
|
Assert.That(
|
2023-01-18 14:22:51 +01:00
|
|
|
BikeInfoFactory.Create(bikeInfoResponse, TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri)?.State?.Value,
|
2022-08-30 15:42:25 +02:00
|
|
|
Is.EqualTo(TINK.Model.State.InUseStateEnum.FeedbackPending),
|
|
|
|
"Bikes with state booking state available in ");
|
2022-04-25 22:15:15 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|