using System.Linq; using NUnit.Framework; using TINK.Repository.Response; namespace TestShareeLib.Repository.Response { [TestFixture] public class TestRentalDescription { [Test] public void TestDeserialize() { var tariffDescription = JsonConvertRethrow.DeserializeObject( @"{ ""id"": ""1"", ""tarif_elements"" : { ""6"": [ ""Gratis Mietzeit"", ""30 Min / Tag"" ], ""1"": [ ""Mietgebühr"", ""2,00 € / 1 Std"" ], ""4"": [ ""Max. Gebühr"", ""40.00 € / Tag"" ] }, ""name"": ""REN E-Bike"", ""rental_info"" : { ""9"" : [ ""AGB"", ""Mit der Mietrad Anmietung wird folgender Betreiber AGB zugestimmt"" ], ""8"" : [ ""Tracking"", ""Ich stimme der Speicherung (Tracking) meiner Fahrstrecke zwecks wissenschaftlicher Auswertung und Berechnung der CO2-Einsparung zu!"" ] } }"); Assert.That( tariffDescription.id, Is.EqualTo("1")); Assert.That( tariffDescription.name, Is.EqualTo("REN E-Bike")); var tariffEntires = tariffDescription.tarif_elements.OrderBy(x => x.Key).Select(x => x.Value).ToList(); Assert.That( tariffEntires.Count, Is.EqualTo(3)); Assert.That( tariffEntires[0][0], Is.EqualTo("Mietgebühr")); Assert.That( tariffEntires[0][1], Is.EqualTo("2,00 € / 1 Std")); Assert.That( tariffEntires[1][0], Is.EqualTo("Max. Gebühr")); Assert.That( tariffEntires[1][1], Is.EqualTo("40.00 € / Tag")); Assert.That( tariffEntires[2][0], Is.EqualTo("Gratis Mietzeit")); Assert.That( tariffEntires[2][1], Is.EqualTo("30 Min / Tag")); var rentalInfo = tariffDescription.rental_info.OrderBy(x => x.Key).Select(x => x.Value).ToList(); Assert.That( rentalInfo.Count, Is.EqualTo(2)); Assert.That( rentalInfo[0][0], Is.EqualTo("Tracking")); Assert.That( rentalInfo[0][1], Is.EqualTo("Ich stimme der Speicherung (Tracking) meiner Fahrstrecke zwecks wissenschaftlicher Auswertung und Berechnung der CO2-Einsparung zu!")); Assert.That( rentalInfo[1][0], Is.EqualTo("AGB")); Assert.That( rentalInfo[1][1], Is.EqualTo("Mit der Mietrad Anmietung wird folgender Betreiber AGB zugestimmt")); } /// /// Verifies that missing elements are initialized correctly. /// [Test] public void TestDeserialize_Missing() { var tariffDescription = JsonConvertRethrow.DeserializeObject( @"{ ""id"" : ""5494"", ""name"" : ""Tester Basic"" }"); Assert.That( tariffDescription.id, Is.EqualTo("5494")); Assert.That( tariffDescription.name, Is.EqualTo("Tester Basic")); Assert.That( tariffDescription.tarif_elements, Is.Null); Assert.That( tariffDescription.rental_info, Is.Null); } /// /// Verifies that unknown elements in JSON to not lead to firing of exceptions. /// [Test] public void TestDeserialize_NewElement() { var tariffDescription = JsonConvertRethrow.DeserializeObject( @"{ ""id"" : ""5494"", ""name"" : ""Tester Basic"", ""FancyNewElement"" : ""Yeah"" }"); Assert.That( tariffDescription.id, Is.EqualTo("5494")); Assert.That( tariffDescription.name, Is.EqualTo("Tester Basic")); } [Test] public void TestDeserializeDuplicateKey() { var tariffDescription = JsonConvertRethrow.DeserializeObject( @"{ ""id"": ""1"", ""tarif_elements"" : { ""6"": [ ""Gratis Mietzeit"", ""30 Min / Tag"" ], ""6"": [ ""Mietgebühr"", ""2,00 € / 1 Std"" ], ""4"": [ ""Max. Gebühr"", ""40.00 € / Tag"" ] }, ""name"": ""REN E-Bike"", ""rental_info"" : { ""9"" : [ ""AGB"", ""Mit der Mietrad Anmietung wird folgender Betreiber AGB zugestimmt"" ], ""8"" : [ ""Tracking"", ""Ich stimme der Speicherung (Tracking) meiner Fahrstrecke zwecks wissenschaftlicher Auswertung und Berechnung der CO2-Einsparung zu!"" ] } }"); Assert.That( tariffDescription.tarif_elements.Count, Is.EqualTo(2), "Duplicate elements are supposed to be ignored."); } public static string RENTALDESCRIPTIONRESPONSE_A_V4_1_23_03 = @"{ ""tarif_elements"": { ""1"": [ ""Mietgebühr"", ""1,50 € / 30 Min "" ], ""4"": [ ""Max. Gebühr"", ""25,00 € / Tag"" ], ""6"": [ ""Gratis Mietzeit"", ""30 Min / Tag"" ] }, ""reserve_timerange"": ""30"", ""id"": ""100"", ""name"": ""Basis"", ""rental_info"": { ""1"": [ ""Tracking"", ""Ich stimme der Speicherung (Tracking) meiner Fahrstrecke zwecks wissenschaftlicher Auswertung und Berechnung der CO2-Einsparung zu!"" ], ""2"": [ ""AAFahrten"", ""Dieses E-Lastenrad darf nur an der Station zurück gegeben werden an der es ausgeliehen wurde!"" ] } }"; [Test] public void TestReserveTimeRange() { var response = JsonConvertRethrow.DeserializeObject(RENTALDESCRIPTIONRESPONSE_A_V4_1_23_03); Assert.That( response.reserve_timerange, Is.EqualTo("30")); } } }