using System; using System.Collections.Generic; using NUnit.Framework; using SharedBusinessLogic.Tests.Framework.Model.User.Account; using ShareeBike.Model.Bikes.BikeInfoNS.BikeNS; using ShareeBike.Model.Bikes.BikeInfoNS.DriveNS; using ShareeBike.Model.Device; using ShareeBike.Model.State; using ShareeBike.Model.User; using ShareeBike.Model.User.Account; using ShareeBike.ViewModel; using ShareeBike.ViewModel.Bikes; using Xamarin.Forms; namespace UITest.Fixtures.ViewModel { [TestFixture] public class TestBikeAtStationViewModel { private class BikeInfoMutable : ShareeBike.Model.Bikes.BikeInfoNS.BC.BikeInfoMutable { public BikeInfoMutable( string id, LockModel lockModel, bool isDemo = false, IEnumerable group = null, WheelType? wheelType = null, TypeOfBike? typeOfBike = null, AaRideType? aaRideType = null, string description = null, string stationId = null, string stationName = null, Uri operatorUri = null, Func dateTimeProvider = null, IStateInfo stateInfo = null) : base( new Bike(id, lockModel, wheelType, typeOfBike, aaRideType, description), new DriveMutable(), ShareeBike.Model.Bikes.BikeInfoNS.BC.DataSource.Copri, isDemo, group, stationId, stationName, operatorUri, null, dateTimeProvider, stateInfo) { } } /// /// Tests base class functionality by using child. /// [Test] public void TestStateText_NotLoggedIn() { var l_oBike = new BikeInfoMutable("2", LockModel.ILockIt, false, new List { "ShareeBike" }, WheelType.Two, TypeOfBike.Cargo); var l_oStoreMock = new StoreMock(); // Account without user name, password and cookie var l_oUser = new User( l_oStoreMock, l_oStoreMock.Load().Result, "123456789"); // Device identifier // Verify prerequisites Assert.That(l_oBike.State.Value, Is.EqualTo(InUseStateEnum.Disposable)); Assert.That(l_oUser.IsLoggedIn, Is.False); // Verify view model. var l_oViewModel = new ShareeBike.ViewModel.Bikes.Bike.BC.BikeViewModel( null, null, null, null, NSubstitute.Substitute.For(), null, l_oBike, l_oUser, new MyBikeInUseStateInfoProvider(), NSubstitute.Substitute.For(), url => { }); Assert.That(l_oViewModel.Name, Is.EqualTo("2")); Assert.That(l_oViewModel.DisplayId, Is.EqualTo("")); Assert.That(l_oViewModel.Id, Is.EqualTo("2")); Assert.That(l_oViewModel.StateText, Is.EqualTo("Available.")); Assert.That(l_oViewModel.StateColor, Is.EqualTo(Color.Default)); } /// /// Tests base class functionality by using child. /// [Test] public void TestStateText_LoggedIn_Reserved() { var l_oViewModel = TestBikeViewModel.TestStateText_LoggedIn_Reserved( (bike, user) => new ShareeBike.ViewModel.Bikes.Bike.BC.BikeViewModel( null, null, null, null, NSubstitute.Substitute.For(), null, bike, user, new BikeAtStationInUseStateInfoProvider(), NSubstitute.Substitute.For(), url => { })); Assert.That(l_oViewModel.StateText, Is.EqualTo("Still 15 min. reserved.")); } /// /// Tests base class functionality by using child. /// [Test] public void TestStateText_LoggedIn_ReservedWithCopriConnect() { var l_oViewModel = TestBikeViewModel.TestStateText_LoggedIn_ReservedWithCopriConnect( (bike, user) => new ShareeBike.ViewModel.Bikes.Bike.BC.BikeViewModel( null, null, null, null, NSubstitute.Substitute.For(), null, bike, user, new BikeAtStationInUseStateInfoProvider(), NSubstitute.Substitute.For(), url => { })); Assert.That(l_oViewModel.StateText, Is.EqualTo("Code 4asdfA, still 7 min. reserved.")); } /// /// Tests base class functionality by using child. /// [Test] public void TestStateText_LoggedIn_Booked() { var l_oViewModel = TestBikeViewModel.TestStateText_LoggedIn_Booked( (bike, user) => new ShareeBike.ViewModel.Bikes.Bike.BC.BikeViewModel( null, null, null, null, NSubstitute.Substitute.For(), null, bike, user, new BikeAtStationInUseStateInfoProvider(), NSubstitute.Substitute.For(), url => { })); Assert.That( l_oViewModel.StateText, Is.EqualTo($"Code 4asdfA, rented since {new DateTime(2018, 10, 24, 21, 49, 00).ToString("dd. MMMM HH:mm")}.")); } /// /// Tests base class functionality by using child. /// [Test] public void TestStateText_LoggedIn_ReservedBySomeoneElse() { var l_oBike = new BikeInfoMutable("2", LockModel.ILockIt, false, new List { "ShareeBike" }, WheelType.Two, TypeOfBike.Cargo, AaRideType.NoAaRide, "Test description", "3"); l_oBike.State.Load( InUseStateEnum.Reserved, new DateTime(2017, 10, 24, 21, 49, 3), TimeSpan.FromMinutes(15), "ragu@gnu-systems.de", "4asdfA"); var l_oStoreMock = new StoreMock(new Account("john@long", "123456789" /* password */, false, "987654321" /* session cookie */, new List { "ShareeBike" })); var l_oViewModel = new ShareeBike.ViewModel.Bikes.Bike.BC.BikeViewModel( null, null, null, null, NSubstitute.Substitute.For(), null, l_oBike, new User( l_oStoreMock, l_oStoreMock.Load().Result, "123456789"), // Device id new BikeAtStationInUseStateInfoProvider(), NSubstitute.Substitute.For(), url => { }); Assert.That(l_oViewModel.Name, Is.EqualTo("Test description")); Assert.That(l_oViewModel.DisplayId, Is.EqualTo("2")); Assert.That(l_oViewModel.Id, Is.EqualTo("2")); Assert.That(l_oViewModel.StateText, Is.EqualTo("Fahrrad bereits reserviert durch anderen Nutzer.")); Assert.That(l_oViewModel.StateColor, Is.EqualTo(Color.Red)); } /// /// Tests base class functionality by using child. /// [Test] public void TestStateText_LoggedIn_BookedBySomeoneElse() { var l_oBike = new BikeInfoMutable("2", LockModel.ILockIt, false, new List { "ShareeBike" }, WheelType.Two, TypeOfBike.Cargo, AaRideType.NoAaRide, "Test description", "3"); l_oBike.State.Load( InUseStateEnum.Booked, new DateTime(2017, 10, 24, 21, 49, 3), TimeSpan.FromMinutes(15), "ragu@gnu-systems.de", "4asdfA"); var l_oStoreMock = new StoreMock(new Account("john@long", "123456789" /* password */, false, "987654321" /* session cookie */, new List { "ShareeBike" })); var l_oViewModel = new ShareeBike.ViewModel.Bikes.Bike.BC.BikeViewModel( null, null, null, null, NSubstitute.Substitute.For(), null, l_oBike, new User( l_oStoreMock, l_oStoreMock.Load().Result, "123456789"), new BikeAtStationInUseStateInfoProvider(), NSubstitute.Substitute.For(), url => { }); Assert.That(l_oViewModel.Name, Is.EqualTo("Test description")); Assert.That(l_oViewModel.DisplayId, Is.EqualTo("2")); Assert.That(l_oViewModel.Id, Is.EqualTo("2")); Assert.That(l_oViewModel.StateText, Is.EqualTo("Fahrrad bereits gebucht durch anderen Nutzer.")); Assert.That(l_oViewModel.StateColor, Is.EqualTo(Color.Red)); } } }