sharee.bike-App/TestTINKLib/Fixtures/ObjectTests/Connector/TestTextToTypeHelper.cs
2022-01-04 18:59:16 +01:00

670 lines
24 KiB
C#

using Newtonsoft.Json;
using NUnit.Framework;
using System;
using System.Linq;
using TINK.Model.Bike;
using TINK.Model.Connector;
using TINK.Repository.Exception;
using TINK.Repository.Response;
using JsonConvertRethrow = TINK.Repository.Response.JsonConvertRethrow;
namespace TestTINKLib.Fixtures.Connector
{
[TestFixture]
public class TestTextToTypeHelper
{
[Test]
public void TestGetWheelType_InvalidDescription()
{
var l_oInfo = new BikeInfoBase();
// Verify prerequisites
Assert.IsNull(l_oInfo.description);
// Verify behaviour of member.
Assert.IsNull(TextToTypeHelper.GetWheelType(l_oInfo));
}
[Test]
public void TestGetWheelType()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""2"",
""bike_group"" : [ ""TINK"" ],
""description"" : ""Cargo Long"",
""gps"" : { ""latitude"": ""47.6612083333"", ""longitude"": ""9.16637533333"" },
""station"" : ""9"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.AreEqual(WheelType.Two, TextToTypeHelper.GetWheelType(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""11"",
""bike_group"" : [ ""TINK"" ],
""description"" : ""Cargo Trike"",
""gps"" : { ""latitude"": ""47.665051"", ""longitude"": ""9.174096"" },
""station"" : ""1"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.AreEqual(WheelType.Trike, TextToTypeHelper.GetWheelType(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""51"",
""bike_group"" : [ ""Konrad"" ],
""description"" : ""Demo Stadtrad"",
""gps"" : { ""latitude"": ""47.657766"", ""longitude"": ""9.176094"" },
""station"" : ""8"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.AreEqual(WheelType.Two, TextToTypeHelper.GetWheelType(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""51"",
""bike_group"" : [ ""Konrad"" ],
""description"" : ""Stadtrad"",
""gps"" : { ""latitude"": ""47.657766"", ""longitude"": ""9.176094"" },
""station"" : ""8"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.AreEqual(WheelType.Two, TextToTypeHelper.GetWheelType(l_oInfo));
}
[Test]
public void TestGetTypeOfBike_InvalidDescription()
{
var l_oInfo = new BikeInfoBase();
// Verify prerequisites
Assert.IsNull(l_oInfo.description);
// Verify behaviour of member.
Assert.IsNull(TextToTypeHelper.GetTypeOfBike(l_oInfo));
}
[Test]
public void TestGetTypeOfBike()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""2"",
""bike_group"" : [ ""TINK"" ],
""description"" : ""Cargo Long"",
""gps"" : { ""latitude"": ""47.6612083333"", ""longitude"": ""9.16637533333"" },
""station"" : ""9"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.AreEqual(TypeOfBike.Cargo, TextToTypeHelper.GetTypeOfBike(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""11"",
""bike_group"" : [ ""TINK"" ],
""description"" : ""Cargo Trike"",
""gps"" : { ""latitude"": ""47.665051"", ""longitude"": ""9.174096"" },
""station"" : ""1"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.AreEqual(TypeOfBike.Cargo, TextToTypeHelper.GetTypeOfBike(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""51"",
""bike_group"" : [ ""Konrad"" ],
""description"" : ""Demo Stadtrad"",
""gps"" : { ""latitude"": ""47.657766"", ""longitude"": ""9.176094"" },
""station"" : ""8"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.AreEqual(TypeOfBike.Citybike, TextToTypeHelper.GetTypeOfBike(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""51"",
""bike_group"" : [ ""Konrad"" ],
""description"" : ""Stadtrad"",
""gps"" : { ""latitude"": ""47.657766"", ""longitude"": ""9.176094"" },
""station"" : ""8"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.AreEqual(TypeOfBike.Citybike, TextToTypeHelper.GetTypeOfBike(l_oInfo));
}
[Test]
public void TestGetState_InvalidDescription()
{
var l_oInfo = new BikeInfoBase();
// Verify prerequisites
Assert.IsNull(l_oInfo.state);
// Verify behaviour of member.
Assert.Throws<InvalidResponseException<BikeInfoBase>>(() => TextToTypeHelper.GetState(l_oInfo));
}
[Test]
public void TestGetIsDemo()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""2"",
""bike_group"" : [ ""TINK"" ],
""description"" : ""Cargo Long"",
""gps"" : { ""latitude"": ""47.6612083333"", ""longitude"": ""9.16637533333"" },
""station"" : ""9"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.IsFalse(TextToTypeHelper.GetIsDemo(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""11"",
""bike_group"" : [ ""TINK"" ],
""description"" : ""Cargo Trike"",
""gps"" : { ""latitude"": ""47.665051"", ""longitude"": ""9.174096"" },
""station"" : ""1"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.IsFalse(TextToTypeHelper.GetIsDemo(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""51"",
""bike_group"" : [ ""Konrad"" ],
""description"" : ""Demo Stadtrad"",
""gps"" : { ""latitude"": ""47.657766"", ""longitude"": ""9.176094"" },
""station"" : ""8"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.IsTrue(TextToTypeHelper.GetIsDemo(l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(@"
{
""bike"" : ""51"",
""bike_group"" : [ ""Konrad"" ],
""description"" : ""Stadtrad"",
""gps"" : { ""latitude"": ""47.657766"", ""longitude"": ""9.176094"" },
""station"" : ""8"",
""state"" : ""available""
}");
// Verify behaviour of member.
Assert.IsFalse(TextToTypeHelper.GetIsDemo(l_oInfo));
}
[Test]
public void TestGetPosition()
{
Assert.AreEqual(1.234d, TextToTypeHelper.GetPosition(JsonConvert.DeserializeObject<GpsInfo>("{ \"latitude\" : \"1.234\", \"longitude\" : \"5.678\"}")).Latitude);
Assert.AreEqual(5.678d, TextToTypeHelper.GetPosition(JsonConvert.DeserializeObject<GpsInfo>("{ \"latitude\" : \"1.234\", \"longitude\" : \"5.678\"}")).Longitude);
}
[Test]
public void TestGetStationGroup_Invalid()
{
var l_oStation = JsonConvertRethrow.DeserializeObject<StationsAvailableResponse.StationInfo>(
@"{
""station"" : ""4"",
""gps"" : { ""latitude"": ""47.6586936667"", ""longitude"": ""9.16863116667"" }
}");
// From COPRI version v4.1 no more exception thrown.
Assert.That(l_oStation.GetGroup().Count(), Is.EqualTo(0));
}
[Test]
public void TestGetStationGroup_TINK()
{
var l_oStation = JsonConvertRethrow.DeserializeObject<StationsAvailableResponse.StationInfo>(
@"{
""station"" : ""4"",
""station_group"" : [ ""TINK"" ],
""gps"" : { ""latitude"": ""47.6586936667"", ""longitude"": ""9.16863116667"" }
}");
Assert.AreEqual("TINK", string.Join(",", l_oStation.GetGroup().ToArray()));
}
[Test]
public void TestGetStationGroup_TINKAndKonrad()
{
var l_oStation = JsonConvertRethrow.DeserializeObject<StationsAvailableResponse.StationInfo>(
@"{
""station"" : ""4"",
""station_group"": [ ""TINK"", ""Konrad"" ],
""gps"" : { ""latitude"": ""47.6586936667"", ""longitude"": ""9.16863116667"" }
}");
Assert.AreEqual("TINK,Konrad", string.Join(",", l_oStation.GetGroup().ToArray()));
}
[Test]
public void TestGetBikeGroup_TINK()
{
var l_oBike = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(
@"{
""state"" : ""available"",
""bike"" : ""18"",
""description"" : ""Cargo Long"",
""bike_group"" : [ ""TINK"" ],
""station"" : ""13"",
}");
Assert.AreEqual("TINK", string.Join(",", l_oBike.GetGroup().ToArray()));
}
[Test]
public void TestGetBikeGroup_TINKCopri()
{
var l_oBike = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(
@"{
""state"" : ""available"",
""bike"" : ""18"",
""description"" : ""Cargo Long"",
""bike_group"" : [ ""TINK"" ],
""system"" : ""BC"",
""station"" : ""13"",
}");
Assert.AreEqual("TINK", string.Join(",", l_oBike.GetGroup().ToArray()));
}
[Test]
public void TestGetBikeGroup_TINKSMS()
{
var l_oBike = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(
@"{
""state"" : ""available"",
""bike"" : ""18"",
""description"" : ""Cargo Long"",
""bike_group"" : [ ""TINK"" ],
""system"" : ""Lock"",
""station"" : ""13"",
}");
Assert.AreEqual("TINK", string.Join(",", l_oBike.GetGroup().ToArray()));
}
[Test]
public void TestGetBikeGroup_Konrad()
{
var l_oBike = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(
@"{
""state"" : ""available"",
""bike"" : ""18"",
""description"" : ""Cargo Long"",
""bike_group"" : [ ""Konrad"" ],
""station"" : ""13"",
}");
Assert.AreEqual("Konrad", string.Join(",", l_oBike.GetGroup().ToArray()));
}
[Test]
public void TestGetBikeGroup_Null()
{
var l_oBike = JsonConvertRethrow.DeserializeObject<BikeInfoBase>(
@"{
""state"" : ""available"",
""bike"" : ""18"",
""description"" : ""Cargo Long"",
""station"" : ""13"",
}");
Assert.AreEqual(0, l_oBike.GetGroup().ToArray().Length);
}
[Test]
public void TestGetAuthGroup()
{
// User group was of format [ ""TINK"", ""Konrad"" ] in early day...
// Since COPRI 4.1 use group is no more used.
// Groups are of format <OperatorId>_<BikeType> for this user group would be like below if it would be used.
var response = JsonConvertRethrow.DeserializeObject<AuthorizationResponse>(@"
{
""response"" : ""authorization"",
""authcookie"" : ""4da3044c8657a04ba60e2eaa753bc51a"",
""user_group"" : [ ""KN_300102"", ""KN_300101"" ],
""response_state"" : ""OK"",
""apiserver"" : ""https://tinkwwp.copri-bike.de""
}");
Assert.AreEqual(2, response.GetGroup().ToList().Count);
Assert.AreEqual($"KN_300102", response.GetGroup().ToList()[0]);
Assert.AreEqual($"KN_300101", response.GetGroup().ToList()[1]);
}
[Test]
public void TestGetGroupString()
{
// From COPRI version v4.1 no more exception thrown.
Assert.That(TextToTypeHelper.GetGroup(new string[0]).Count(), Is.EqualTo(0));
}
[Test]
public void TestGetGroupString_Null()
{
// From COPRI version v4.1 no more exception thrown.
Assert.That(TextToTypeHelper.GetGroup((string[])null).Count(), Is.EqualTo(0));
}
[Test]
public void TestGetGroupString_Roundtrip()
{
Assert.AreEqual("Tunk,Unk", TextToTypeHelper.GetGroup(TextToTypeHelper.GetGroup(new [] { "Tunk", "Unk" })));
}
[Test]
public void TestGetUserKey()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoReservedOrBooked>(@"
{
""total_price"": ""0.00"",
""gps"" : { ""latitude"": ""47.6586133"", ""longitude"": ""9.16864"" },
""unit_price"": ""3.00"",
""K_u"": ""[99, 104, 120, 121, 63, 99, -10, -110, 94, 70, 15, -112, -6, 101, 117, -90, -113, -54, -90, -95, 0, 0, 0, 0]"",
""tariff_description"": {""name"" : ""TINK Basic""},
""end_time"": ""2020-04-07 16:55:18"",
""K_seed"": ""[-18, -80, 20, -90, 3, 69, 96, 4, -35, 75, -95, 102, 7, 121, -122, 15]"",
""system"": ""Ilockit"",
""bike"": ""16"",
""computed_hours"": ""0"",
""request_time"": ""2020-04-07 16:55:06.823436+02"",
""bike_group"" : [ ""TINK"" ],
""K_a"": ""[-19, 29, -60, 29, 35, -121, -69, 93, 27, -122, 107, -127, -30, 74, 82, 12, 4, -20, 40, 16, 0, 0, 0, 0]"",
""state"": ""occupied"",
""real_hours"": ""0"",
""station"" : ""7"",
""start_time"": ""2020-04-07 16:55:17.786551+02"",
""description"": ""Cargo Long""
}");
Assert.AreEqual(
99,
TextToTypeHelper.GetUserKey(l_oInfo)[0]);
Assert.AreEqual(
104,
TextToTypeHelper.GetUserKey(l_oInfo)[1]);
}
[Test]
public void TestGetAdminKey()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoReservedOrBooked>(@"
{
""total_price"": ""0.00"",
""gps"" : { ""latitude"": ""47.6586133"", ""longitude"": ""9.16864"" },
""unit_price"": ""3.00"",
""K_u"": ""[99, 104, 120, 121, 63, 99, -10, -110, 94, 70, 15, -112, -6, 101, 117, -90, -113, -54, -90, -95, 0, 0, 0, 0]"",
""tariff_description"": {""name"" : ""TINK Basic""},
""end_time"": ""2020-04-07 16:55:18"",
""K_seed"": ""[-18, -80, 20, -90, 3, 69, 96, 4, -35, 75, -95, 102, 7, 121, -122, 15]"",
""system"": ""Ilockit"",
""bike"": ""16"",
""computed_hours"": ""0"",
""request_time"": ""2020-04-07 16:55:06.823436+02"",
""bike_group"" : [ ""TINK"" ],
""K_a"": ""[-19, 29, -60, 29, 35, -121, -69, 93, 27, -122, 107, -127, -30, 74, 82, 12, 4, -20, 40, 16, 0, 0, 0, 0]"",
""state"": ""occupied"",
""real_hours"": ""0"",
""station"" : ""7"",
""start_time"": ""2020-04-07 16:55:17.786551+02"",
""description"": ""Cargo Long""
}");
Assert.AreEqual(
237,
TextToTypeHelper.GetAdminKey(l_oInfo)[0]);
Assert.AreEqual(
29,
TextToTypeHelper.GetAdminKey(l_oInfo)[1]);
}
[Test]
public void TestGetSeed()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoReservedOrBooked>(@"
{
""total_price"": ""0.00"",
""gps"" : { ""latitude"": ""47.6586133"", ""longitude"": ""9.16864"" },
""unit_price"": ""3.00"",
""K_u"": ""[99, 104, 120, 121, 63, 99, -10, -110, 94, 70, 15, -112, -6, 101, 117, -90, -113, -54, -90, -95, 0, 0, 0, 0]"",
""tariff_description"": {""name"" : ""TINK Basic""},
""end_time"": ""2020-04-07 16:55:18"",
""K_seed"": ""[-18, -80, 20, -90, 3, 69, 96, 4, -35, 75, -95, 102, 7, 121, -122, 15]"",
""system"": ""Ilockit"",
""bike"": ""16"",
""computed_hours"": ""0"",
""request_time"": ""2020-04-07 16:55:06.823436+02"",
""bike_group"" : [ ""TINK"" ],
""K_a"": ""[-19, 29, -60, 29, 35, -121, -69, 93, 27, -122, 107, -127, -30, 74, 82, 12, 4, -20, 40, 16, 0, 0, 0, 0]"",
""state"": ""occupied"",
""real_hours"": ""0"",
""station"" : ""7"",
""start_time"": ""2020-04-07 16:55:17.786551+02"",
""description"": ""Cargo Long""
}");
Assert.AreEqual(
238,
TextToTypeHelper.GetSeed(l_oInfo)[0]);
Assert.AreEqual(
176,
TextToTypeHelper.GetSeed(l_oInfo)[1]);
}
[Test]
public void TestGetSeedUserKeyAdminKey_Invalid()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoReservedOrBooked>(@"
{
""total_price"": ""0.00"",
""gps"" : { ""latitude"": ""47.6586133"", ""longitude"": ""9.16864"" },
""unit_price"": ""3.00"",
""K_u"": ""[]"",
""tariff_description"": {""name"" : ""TINK Basic""},
""end_time"": ""2020-04-07 16:55:18"",
""K_seed"": ""[-18a, -80, 20, -90, 3, 69, 96, 4, -35, 75, -95, 102, 7, 121, -122, 15]"",
""system"": ""Ilockit"",
""bike"": ""16"",
""computed_hours"": ""0"",
""request_time"": ""2020-04-07 16:55:06.823436+02"",
""bike_group"" : [ ""TINK"" ],
""K_a"": ""{-19, 29, -60, 29, 35, -121, -69, 93, 27, -122, 107, -127, -30, 74, 82, 12, 4, -20, 40, 16, 0, 0, 0, 0}"",
""state"": ""occupied"",
""real_hours"": ""0"",
""station"" : ""7"",
""start_time"": ""2020-04-07 16:55:17.786551+02"",
""description"": ""Cargo Long""
}");
Assert.AreEqual(
0,
TextToTypeHelper.GetSeed(l_oInfo).Length);
Assert.AreEqual(
0,
TextToTypeHelper.GetUserKey(l_oInfo).Length);
Assert.AreEqual(
0,
TextToTypeHelper.GetAdminKey(l_oInfo).Length);
}
[Test]
public void TestGetBluetoothLockId_FromBikeInfo_Invalid()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoReservedOrBooked>(@"
{
}");
Assert.AreEqual(0, TextToTypeHelper.GetBluetoothLockId (l_oInfo));
l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoReservedOrBooked>(@"
{
""Ilockit_ID"": """"
}");
Assert.AreEqual(0, TextToTypeHelper.GetBluetoothLockId(l_oInfo));
}
[Test]
public void TestGetBluetoothLockId_FromBikeInfo()
{
var l_oInfo = JsonConvertRethrow.DeserializeObject<BikeInfoReservedOrBooked>(@"
{
""Ilockit_ID"": ""ISHAREIT-132""
}");
Assert.AreEqual(
132,
TextToTypeHelper.GetBluetoothLockId(l_oInfo));
}
[Test]
public void TestGetBluetoothLockId_FromString_Invalid()
{
Assert.AreEqual(0, TextToLockItTypeHelper.GetBluetoothLockId((string)null));
Assert.AreEqual(0, TextToLockItTypeHelper.GetBluetoothLockId(""));
Assert.AreEqual(0, TextToLockItTypeHelper.GetBluetoothLockId("HubbaBubba"));
}
[Test]
public void TestGetBluetoothLockId_FromString()
{
Assert.AreEqual(
132,
TextToLockItTypeHelper.GetBluetoothLockId("ISHAREIT-132"));
Assert.AreEqual(
132,
TextToLockItTypeHelper.GetBluetoothLockId("ISHAREIT+132"));
}
[Test]
public void TestGetCopriVersion()
{
var version = JsonConvertRethrow.DeserializeObject<CopriVersion>(@"
{
""copri_version"": ""4.3.2.1""
}");
Assert.That(
version.GetCopriVersion(),
Is.EqualTo(new Version(4,3,2,1)));
}
[Test]
public void TestGetCopriVersion_Invald()
{
var version = JsonConvertRethrow.DeserializeObject<CopriVersion>(@"
{
""copri_version"": ""hellO""
}");
Assert.That(
() => version.GetCopriVersion(),
Throws.InstanceOf<InvalidResponseException>());
}
[Test]
public void TestGetCopriVersion_Null()
{
Assert.That(
() => TextToTypeHelper.GetCopriVersion(null),
Throws.InstanceOf<InvalidResponseException>());
}
[Test]
public void TestGetCopriVersion_NotContained()
{
var version = JsonConvertRethrow.DeserializeObject<CopriVersion>(@"
{
}");
Assert.That(
() => version.GetCopriVersion(),
Throws.InstanceOf<InvalidResponseException>());
}
[Test]
public void TestGetIsAgbAcknowledged()
{
var response = JsonConvertRethrow.DeserializeObject<AuthorizationResponse>(@"
{
""agb_checked"" : ""1""
}");
Assert.That(
() => response.GetIsAgbAcknowledged(),
Is.True);
}
[Test]
public void TestGetIsAgbAcknowledged_No()
{
var response = JsonConvertRethrow.DeserializeObject<AuthorizationResponse>(@"
{
""agb_checked"" : ""0""
}");
Assert.That(
() => response.GetIsAgbAcknowledged(),
Is.False);
}
[Test]
public void TestGetIsAgbAcknowledged_Invalid()
{
var response = JsonConvertRethrow.DeserializeObject<AuthorizationResponse>(@"
{
""agb_checked"" : ""ä""
}");
Assert.That(
() => response.GetIsAgbAcknowledged(),
Is.False);
}
[Test]
public void TestGetIsAgbAcknowledged_Empty()
{
var response = JsonConvertRethrow.DeserializeObject<AuthorizationResponse>(@"
{
}");
Assert.That(
() => response.GetIsAgbAcknowledged(),
Is.False);
}
}
}