2023-01-18 14:22:51 +01:00
|
|
|
using System;
|
2022-08-30 15:42:25 +02:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using NUnit.Framework;
|
|
|
|
using TestFramework.Model.User.Account;
|
|
|
|
using TINK.Model.Bikes.BikeInfoNS.BikeNS;
|
|
|
|
using TINK.Model.Bikes.BikeInfoNS.DriveNS;
|
|
|
|
using TINK.Model.Device;
|
|
|
|
using TINK.Model.State;
|
2021-07-12 21:31:46 +02:00
|
|
|
using TINK.Model.User;
|
|
|
|
using TINK.Model.User.Account;
|
|
|
|
using TINK.ViewModel;
|
|
|
|
using TINK.ViewModel.Bikes;
|
2022-08-30 15:42:25 +02:00
|
|
|
using Xamarin.Forms;
|
2021-07-12 21:31:46 +02:00
|
|
|
|
|
|
|
namespace UITest.Fixtures.ViewModel
|
|
|
|
{
|
|
|
|
|
2022-09-06 16:08:19 +02:00
|
|
|
[TestFixture]
|
|
|
|
public class TestBikeAtStationViewModel
|
|
|
|
{
|
|
|
|
private class BikeInfoMutable : TINK.Model.Bikes.BikeInfoNS.BC.BikeInfoMutable
|
|
|
|
{
|
|
|
|
public BikeInfoMutable(
|
|
|
|
string id,
|
|
|
|
LockModel lockModel,
|
|
|
|
bool isDemo = false,
|
|
|
|
IEnumerable<string> group = null,
|
|
|
|
WheelType? wheelType = null,
|
|
|
|
TypeOfBike? typeOfBike = null,
|
2023-04-19 12:14:14 +02:00
|
|
|
AaRideType? aaRideType = null,
|
2022-09-06 16:08:19 +02:00
|
|
|
string description = null,
|
|
|
|
string stationId = null,
|
|
|
|
string stationName = null,
|
|
|
|
Uri operatorUri = null,
|
|
|
|
Func<DateTime> dateTimeProvider = null,
|
|
|
|
IStateInfo stateInfo = null) : base(
|
2023-04-19 12:14:14 +02:00
|
|
|
new Bike(id, lockModel, wheelType, typeOfBike, aaRideType, description),
|
2022-09-06 16:08:19 +02:00
|
|
|
new Drive(),
|
2023-01-18 14:22:51 +01:00
|
|
|
TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri,
|
2022-09-06 16:08:19 +02:00
|
|
|
isDemo,
|
|
|
|
group,
|
|
|
|
stationId,
|
|
|
|
stationName,
|
|
|
|
operatorUri,
|
|
|
|
null,
|
|
|
|
dateTimeProvider,
|
|
|
|
stateInfo)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// Tests base class functionaltiy by using child.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestStateText_NotLoggedIn()
|
|
|
|
{
|
|
|
|
var l_oBike = new BikeInfoMutable("2", LockModel.ILockIt, false, new List<string> { "TINK" }, 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.AreEqual(InUseStateEnum.Disposable, l_oBike.State.Value);
|
|
|
|
Assert.IsFalse(l_oUser.IsLoggedIn);
|
|
|
|
|
|
|
|
// Verify view model.
|
|
|
|
var l_oViewModel = new TINK.ViewModel.Bikes.Bike.BC.BikeViewModel(
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
|
|
|
null,
|
|
|
|
l_oBike,
|
|
|
|
l_oUser,
|
|
|
|
new MyBikeInUseStateInfoProvider(),
|
2023-03-08 13:18:54 +01:00
|
|
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
2022-09-06 16:08:19 +02:00
|
|
|
url => { });
|
|
|
|
|
|
|
|
Assert.AreEqual("2", l_oViewModel.Name);
|
|
|
|
Assert.AreEqual("", l_oViewModel.DisplayId);
|
|
|
|
Assert.AreEqual("2", l_oViewModel.Id);
|
|
|
|
Assert.AreEqual("Available.", l_oViewModel.StateText);
|
|
|
|
Assert.AreEqual(Color.Default, l_oViewModel.StateColor);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests base class functionaltiy by using child.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestStateText_LoggedIn_Reserved()
|
|
|
|
{
|
|
|
|
var l_oViewModel = TestBikeViewModel.TestStateText_LoggedIn_Reserved(
|
|
|
|
(bike, user) => new TINK.ViewModel.Bikes.Bike.BC.BikeViewModel(
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
|
|
|
null,
|
|
|
|
bike,
|
|
|
|
user,
|
|
|
|
new BikeAtStationInUseStateInfoProvider(),
|
2023-03-08 13:18:54 +01:00
|
|
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
2022-09-06 16:08:19 +02:00
|
|
|
url => { }));
|
|
|
|
|
|
|
|
Assert.AreEqual("Still 15 min. reserved.", l_oViewModel.StateText);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests base class functionaltiy by using child.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestStateText_LoggedIn_ReservedWithCopriConnect()
|
|
|
|
{
|
|
|
|
var l_oViewModel = TestBikeViewModel.TestStateText_LoggedIn_ReservedWithCopriConnect(
|
|
|
|
(bike, user) => new TINK.ViewModel.Bikes.Bike.BC.BikeViewModel(
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
|
|
|
null,
|
|
|
|
bike,
|
|
|
|
user,
|
|
|
|
new BikeAtStationInUseStateInfoProvider(),
|
2023-03-08 13:18:54 +01:00
|
|
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
2022-09-06 16:08:19 +02:00
|
|
|
url => { }));
|
|
|
|
|
|
|
|
Assert.AreEqual("Code 4asdfA, still 7 min. reserved.", l_oViewModel.StateText);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests base class functionaltiy by using child.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestStateText_LoggedIn_Booked()
|
|
|
|
{
|
|
|
|
var l_oViewModel = TestBikeViewModel.TestStateText_LoggedIn_Booked(
|
|
|
|
(bike, user) => new TINK.ViewModel.Bikes.Bike.BC.BikeViewModel(
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
|
|
|
null,
|
|
|
|
bike,
|
|
|
|
user,
|
|
|
|
new BikeAtStationInUseStateInfoProvider(),
|
2023-03-08 13:18:54 +01:00
|
|
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
2022-09-06 16:08:19 +02:00
|
|
|
url => { }));
|
|
|
|
|
|
|
|
Assert.AreEqual(
|
|
|
|
$"Code 4asdfA, rented since {new DateTime(2018, 10, 24, 21, 49, 00).ToString("dd. MMMM HH:mm")}.",
|
|
|
|
l_oViewModel.StateText);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
2023-04-19 12:14:14 +02:00
|
|
|
/// Tests base class functionality by using child.
|
2022-09-06 16:08:19 +02:00
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestStateText_LoggedIn_ReservedBySomeoneElse()
|
|
|
|
{
|
2023-04-19 12:14:14 +02:00
|
|
|
var l_oBike = new BikeInfoMutable("2", LockModel.ILockIt, false, new List<string> { "TINK" }, WheelType.Two, TypeOfBike.Cargo, AaRideType.NoAaRide, "Test description", "3");
|
2022-09-06 16:08:19 +02:00
|
|
|
|
|
|
|
l_oBike.State.Load(
|
|
|
|
InUseStateEnum.Reserved,
|
|
|
|
new DateTime(2017, 10, 24, 21, 49, 3),
|
|
|
|
"ragu@gnu-systems.de",
|
|
|
|
"4asdfA");
|
|
|
|
|
|
|
|
var l_oStoreMock = new StoreMock(new Account("john@long", "123456789" /* password */, false, "987654321" /* session cookie */, new List<string> { "TINK" }));
|
|
|
|
|
|
|
|
var l_oViewModel = new TINK.ViewModel.Bikes.Bike.BC.BikeViewModel(
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
|
|
|
null,
|
|
|
|
l_oBike,
|
|
|
|
new User(
|
|
|
|
l_oStoreMock,
|
|
|
|
l_oStoreMock.Load().Result,
|
|
|
|
"123456789"), // Device id
|
|
|
|
new BikeAtStationInUseStateInfoProvider(),
|
2023-03-08 13:18:54 +01:00
|
|
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
2022-09-06 16:08:19 +02:00
|
|
|
url => { });
|
|
|
|
|
|
|
|
Assert.AreEqual("Test description", l_oViewModel.Name);
|
|
|
|
Assert.AreEqual("2", l_oViewModel.DisplayId);
|
|
|
|
Assert.AreEqual("2", l_oViewModel.Id);
|
|
|
|
Assert.AreEqual("Fahrrad bereits reserviert durch anderen Nutzer.", l_oViewModel.StateText);
|
|
|
|
Assert.AreEqual(Color.Red, l_oViewModel.StateColor);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests base class functionaltiy by using child.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestStateText_LoggedIn_BookedBySomeoneElse()
|
|
|
|
{
|
2023-04-19 12:14:14 +02:00
|
|
|
var l_oBike = new BikeInfoMutable("2", LockModel.ILockIt, false, new List<string> { "TINK" }, WheelType.Two, TypeOfBike.Cargo, AaRideType.NoAaRide, "Test description", "3");
|
2022-09-06 16:08:19 +02:00
|
|
|
|
|
|
|
l_oBike.State.Load(
|
|
|
|
InUseStateEnum.Booked,
|
|
|
|
new DateTime(2017, 10, 24, 21, 49, 3),
|
|
|
|
"ragu@gnu-systems.de",
|
|
|
|
"4asdfA");
|
|
|
|
|
|
|
|
var l_oStoreMock = new StoreMock(new Account("john@long", "123456789" /* password */, false, "987654321" /* session cookie */, new List<string> { "TINK" }));
|
|
|
|
|
|
|
|
var l_oViewModel = new TINK.ViewModel.Bikes.Bike.BC.BikeViewModel(
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
|
|
|
null,
|
|
|
|
l_oBike,
|
|
|
|
new User(
|
|
|
|
l_oStoreMock,
|
|
|
|
l_oStoreMock.Load().Result,
|
|
|
|
"123456789"),
|
|
|
|
new BikeAtStationInUseStateInfoProvider(),
|
2023-03-08 13:18:54 +01:00
|
|
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
2022-09-06 16:08:19 +02:00
|
|
|
url => { });
|
|
|
|
|
|
|
|
Assert.AreEqual("Test description", l_oViewModel.Name);
|
|
|
|
Assert.AreEqual("2", l_oViewModel.DisplayId);
|
|
|
|
Assert.AreEqual("2", l_oViewModel.Id);
|
|
|
|
Assert.AreEqual("Fahrrad bereits gebucht durch anderen Nutzer.", l_oViewModel.StateText);
|
|
|
|
Assert.AreEqual(Color.Red, l_oViewModel.StateColor);
|
|
|
|
}
|
|
|
|
}
|
2021-07-12 21:31:46 +02:00
|
|
|
}
|