Version 3.0.338

This commit is contained in:
Anja Müller-Meißner 2022-09-06 16:08:19 +02:00 committed by Anja
parent 573fe77e12
commit 0468955d49
751 changed files with 62747 additions and 60672 deletions

View file

@ -13,208 +13,208 @@ using TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler;
namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
{
[TestFixture]
public class TestBookedClosed
{
/// <summary>
/// Use case: Try to open lock.
/// Final state: Bike remains locked and stays booked.
/// </summary>
[Test]
public void TestOpenLockOpenLockAsyncFailsWebConnectFailureException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
[TestFixture]
public class TestBookedClosed
{
/// <summary>
/// Use case: Try to open lock.
/// Final state: Bike remains locked and stays booked.
/// </summary>
[Test]
public void TestOpenLockOpenLockAsyncFailsWebConnectFailureException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new BookedClosed(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new BookedClosed(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
bike.Id.Returns("0");
bike.Id.Returns("0");
bike.LockInfo.State.Returns(LockingState.Closed); // Locking state does not change.
bike.LockInfo.State.Returns(LockingState.Closed); // Locking state does not change.
connector.Command.OpenLockAsync(bike).Returns(x => throw new WebConnectFailureException("Context info", new Exception("Tst")));
connector.Command.OpenLockAsync(bike).Returns(x => throw new WebConnectFailureException("Context info", new Exception("Tst")));
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // State remains booked because opening failed.
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // State remains booked because opening failed.
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAdvancedAlert(
"Connection error when opening the lock!",
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
"Context info",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAdvancedAlert(
"Connection error when opening the lock!",
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
"Context info",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedClosed"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedClosed"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
/// <summary>
/// Use case: Try to open lock.
/// Final state: Bike remains locked and stays booked.
/// </summary>
[Test]
public void TestOpenLockOpenLockAsyncFailsException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
/// <summary>
/// Use case: Try to open lock.
/// Final state: Bike remains locked and stays booked.
/// </summary>
[Test]
public void TestOpenLockOpenLockAsyncFailsException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new BookedClosed(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new BookedClosed(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
bike.Id.Returns("0");
bike.Id.Returns("0");
bike.LockInfo.State.Returns(LockingState.Closed); // Locking state does not change.
bike.LockInfo.State.Returns(LockingState.Closed); // Locking state does not change.
connector.Command.OpenLockAsync(bike).Returns(x => throw new Exception("Some error", new Exception("Inner exception")));
connector.Command.OpenLockAsync(bike).Returns(x => throw new Exception("Some error", new Exception("Inner exception")));
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // State remains booked because opening failed.
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // State remains booked because opening failed.
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAlert(
"Error while opening lock!",
"Some error",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAlert(
"Error while opening lock!",
"Some error",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedClosed"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedClosed"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
/// <summary>
/// Use case: Open lock.
/// Final state: Lock is opened and bike remains booked.
/// </summary>
[Test]
public void TestOpenLock()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
/// <summary>
/// Use case: Open lock.
/// Final state: Lock is opened and bike remains booked.
/// </summary>
[Test]
public void TestOpenLock()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new BookedClosed(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new BookedClosed(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
bike.Id.Returns("0");
bike.Id.Returns("0");
bike.LockInfo.State.Returns(LockingState.Open); // After opening, lock state is open.
bike.LockInfo.State.Returns(LockingState.Open); // After opening, lock state is open.
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // After Booking and opening, state is booked.
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // After Booking and opening, state is booked.
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedOpen"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
}
// Verify state
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedOpen"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
}
}

View file

@ -13,209 +13,209 @@ using TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler;
namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
{
[TestFixture]
public class TestBookedOpen
{
/// <summary>
/// Use case: Try to open lock.
/// Final state: Bike remains locked and stays booked.
/// </summary>
[Test]
public void TestOpenLockOpenLockAsyncFailsWebConnectFailureException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
[TestFixture]
public class TestBookedOpen
{
/// <summary>
/// Use case: Try to open lock.
/// Final state: Bike remains locked and stays booked.
/// </summary>
[Test]
public void TestOpenLockOpenLockAsyncFailsWebConnectFailureException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new BookedOpen(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new BookedOpen(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
bike.Id.Returns("0");
bike.Id.Returns("0");
bike.LockInfo.State.Returns(LockingState.Closed); // Locking state does not change.
bike.LockInfo.State.Returns(LockingState.Closed); // Locking state does not change.
connector.Command.OpenLockAsync(bike).Returns(x => throw new WebConnectFailureException("Context info", new Exception("Tst")));
connector.Command.OpenLockAsync(bike).Returns(x => throw new WebConnectFailureException("Context info", new Exception("Tst")));
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // State remains booked because opening failed.
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // State remains booked because opening failed.
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAdvancedAlert(
"Connection error when opening the lock!",
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
"Context info",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAdvancedAlert(
"Connection error when opening the lock!",
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
"Context info",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedClosed"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedClosed"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
/// <summary>
/// Use case: Try to open lock.
/// Final state: Bike remains locked and stays booked.
/// </summary>
[Test]
public void TestOpenLockOpenLockAsyncFailsException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
/// <summary>
/// Use case: Try to open lock.
/// Final state: Bike remains locked and stays booked.
/// </summary>
[Test]
public void TestOpenLockOpenLockAsyncFailsException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new BookedOpen(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new BookedOpen(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
bike.Id.Returns("0");
bike.Id.Returns("0");
bike.LockInfo.State.Returns(LockingState.Closed); // Locking state does not change.
bike.LockInfo.State.Returns(LockingState.Closed); // Locking state does not change.
connector.Command.OpenLockAsync(bike).Returns(x => throw new Exception("Some error", new Exception("Inner exception")));
connector.Command.OpenLockAsync(bike).Returns(x => throw new Exception("Some error", new Exception("Inner exception")));
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // State remains booked because opening failed.
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // State remains booked because opening failed.
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAlert(
"Error while opening lock!",
"Some error",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAlert(
"Error while opening lock!",
"Some error",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedClosed"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedClosed"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
/// <summary>
/// Use case: Open lock.
/// Final state: Lock is opened and bike remains booked.
/// </summary>
[Test]
public void TestOpenLock()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
/// <summary>
/// Use case: Open lock.
/// Final state: Lock is opened and bike remains booked.
/// </summary>
[Test]
public void TestOpenLock()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new BookedOpen(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new BookedOpen(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
bike.Id.Returns("0");
bike.Id.Returns("0");
bike.LockInfo.State.Returns(LockingState.Open); // After opening, lock state is open.
bike.LockInfo.State.Returns(LockingState.Open); // After opening, lock state is open.
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // After Booking and opening, state is booked.
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked); // After Booking and opening, state is booked.
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
bikesViewModel.ActionText = "Opening lock...";
connector.Command.OpenLockAsync(bike); // Booking must be performed
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedOpen"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
// Verify state
Assert.That(
subsequent.ButtonText,
Is.EqualTo("BookedOpen"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Open lock"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
}
}
}

View file

@ -14,191 +14,191 @@ using TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler;
namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
{
[TestFixture]
public class TestFeedbackPending
{
/// <summary>
/// Use case: Give feedback but submission fails.
/// Final state: Feedback is pending.
/// </summary>
[Test]
public void TestGiveFeedbackDoSubmitFeedbackFailsException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
[TestFixture]
public class TestFeedbackPending
{
/// <summary>
/// Use case: Give feedback but submission fails.
/// Final state: Feedback is pending.
/// </summary>
[Test]
public void TestGiveFeedbackDoSubmitFeedbackFailsException()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new FeedbackPending(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new FeedbackPending(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
connector.Command.DoSubmitFeedback(
Arg.Any<TINK.Model.Connector.IUserFeedback>(),
Arg.Any<Uri>()).Returns(x => throw new Exception("Context info", new Exception("Tst")));
connector.Command.DoSubmitFeedback(
Arg.Any<TINK.Model.Connector.IUserFeedback>(),
Arg.Any<Uri>()).Returns(x => throw new Exception("Context info", new Exception("Tst")));
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
viewService.DisplayUserFeedbackPopup(Arg.Any<IBattery>(), Arg.Any<string>());
bikesViewModel.ActionText = "Submitting feedback...";
connector.Command.DoSubmitFeedback(Arg.Any<TINK.Model.Connector.IUserFeedback>(), Arg.Any<Uri>()); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAlert(
"Submitting feedback failed!",
"Your feedback could not be send to server successfully.",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
viewService.DisplayUserFeedbackPopup(Arg.Any<IBattery>(), Arg.Any<string>());
bikesViewModel.ActionText = "Submitting feedback...";
connector.Command.DoSubmitFeedback(Arg.Any<TINK.Model.Connector.IUserFeedback>(), Arg.Any<Uri>()); // Booking must be performed
bikesViewModel.ActionText = "";
viewService.DisplayAlert(
"Submitting feedback failed!",
"Your feedback could not be send to server successfully.",
"OK");
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("FeedbackPending"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Give Feedback"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("FeedbackPending"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Give Feedback"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
/// <summary>
/// Use case: Give feedback.
/// Final state: Feedback is pending.
/// </summary>
[Test]
public void TestGiveFeedback()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
/// <summary>
/// Use case: Give feedback.
/// Final state: Feedback is pending.
/// </summary>
[Test]
public void TestGiveFeedback()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new FeedbackPending(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new FeedbackPending(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
viewService.DisplayUserFeedbackPopup(Arg.Any<IBattery>(), Arg.Any<string>());
bikesViewModel.ActionText = "Submitting feedback...";
connector.Command.DoSubmitFeedback(Arg.Any<TINK.Model.Connector.IUserFeedback>(), Arg.Any<Uri>()); // Booking must be performed
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
viewService.DisplayUserFeedbackPopup(Arg.Any<IBattery>(), Arg.Any<string>());
bikesViewModel.ActionText = "Submitting feedback...";
connector.Command.DoSubmitFeedback(Arg.Any<TINK.Model.Connector.IUserFeedback>(), Arg.Any<Uri>()); // Booking must be performed
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("FeedbackPending"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Give Feedback"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("FeedbackPending"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Give Feedback"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
/// <summary>
/// Use case: Give feedback.
/// Final state: Feedback is pending.
/// </summary>
[Test]
public void TestGiveFeedbackAndQuerry()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
/// <summary>
/// Use case: Give feedback.
/// Final state: Feedback is pending.
/// </summary>
[Test]
public void TestGiveFeedbackAndQuerry()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
var handler = new FeedbackPending(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
var handler = new FeedbackPending(
bike,
() => true, // isConnectedDelegate
(isConnexted) => connector,
() => pollingManager,
Substitute.For<ISmartDevice>(),
viewService,
bikesViewModel,
activeUser);
bike.BookingFinishedModel.MiniSurvey.Questions.Count.Returns(1);
bike.BookingFinishedModel.MiniSurvey.Questions.Count.Returns(1);
var subsequent = handler.HandleRequestOption2().Result;
var subsequent = handler.HandleRequestOption2().Result;
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
viewService.DisplayUserFeedbackPopup(Arg.Any<IBattery>(), Arg.Any<string>());
bikesViewModel.ActionText = "Submitting feedback...";
connector.Command.DoSubmitFeedback(Arg.Any<TINK.Model.Connector.IUserFeedback>(), Arg.Any<Uri>()); // Booking must be performed
viewService.PushModalAsync(ViewTypes.MiniSurvey);
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify behaviour
Received.InOrder(() =>
{
bikesViewModel.Received(1).IsIdle = false; // GUI must be locked
bikesViewModel.ActionText = "One moment please...";
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
viewService.DisplayUserFeedbackPopup(Arg.Any<IBattery>(), Arg.Any<string>());
bikesViewModel.ActionText = "Submitting feedback...";
connector.Command.DoSubmitFeedback(Arg.Any<TINK.Model.Connector.IUserFeedback>(), Arg.Any<Uri>()); // Booking must be performed
viewService.PushModalAsync(ViewTypes.MiniSurvey);
bikesViewModel.ActionText = "Updating...";
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
bikesViewModel.ActionText = "";
bikesViewModel.Received(1).IsIdle = true; // GUI must be unlocked
});
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("FeedbackPending"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Give Feedback"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
}
// Verify state after action
Assert.That(
subsequent.ButtonText,
Is.EqualTo("FeedbackPending"));
Assert.That(
subsequent.IsButtonVisible,
Is.False);
Assert.That(
subsequent.LockitButtonText,
Is.EqualTo("Give Feedback"));
Assert.That(
subsequent.IsLockitButtonVisible,
Is.True);
}
}
}

View file

@ -13,135 +13,135 @@ using TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler;
namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock
{
[TestFixture]
public class TestReqeustHandlerFactory
{
[Test]
public void TestCreateDisposable()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var smartDevice = Substitute.For<ISmartDevice>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
[TestFixture]
public class TestReqeustHandlerFactory
{
[Test]
public void TestCreateDisposable()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var smartDevice = Substitute.For<ISmartDevice>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Disposable);
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Disposable);
var requestHandler = RequestHandlerFactory.Create(
bike,
() => true /*isConnectedDelegate*/,
(isconnected) => connector,
() => pollingManager,
smartDevice,
viewService,
bikesViewModel,
activeUser);
var requestHandler = RequestHandlerFactory.Create(
bike,
() => true /*isConnectedDelegate*/,
(isconnected) => connector,
() => pollingManager,
smartDevice,
viewService,
bikesViewModel,
activeUser);
Assert.That(
requestHandler.GetType(),
Is.EqualTo(typeof(DisposableClosed)));
}
Assert.That(
requestHandler.GetType(),
Is.EqualTo(typeof(DisposableClosed)));
}
[Test]
public void TestCreateReserved()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var smartDevice = Substitute.For<ISmartDevice>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
[Test]
public void TestCreateReserved()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var smartDevice = Substitute.For<ISmartDevice>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Reserved);
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Reserved);
var requestHandler = RequestHandlerFactory.Create(
bike,
() => true /*isConnectedDelegate*/,
(isconnected) => connector,
() => pollingManager,
smartDevice,
viewService,
bikesViewModel,
activeUser);
var requestHandler = RequestHandlerFactory.Create(
bike,
() => true /*isConnectedDelegate*/,
(isconnected) => connector,
() => pollingManager,
smartDevice,
viewService,
bikesViewModel,
activeUser);
Assert.That(
requestHandler.GetType(),
Is.EqualTo(typeof(ReservedClosed)));
}
Assert.That(
requestHandler.GetType(),
Is.EqualTo(typeof(ReservedClosed)));
}
[Test]
public void TestCreateBooked()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var smartDevice = Substitute.For<ISmartDevice>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
[Test]
public void TestCreateBooked()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var smartDevice = Substitute.For<ISmartDevice>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked);
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.Booked);
foreach (LockingState state in Enum.GetValues(typeof(LockingState)))
{
bike.LockInfo.State.Returns(state);
foreach (LockingState state in Enum.GetValues(typeof(LockingState)))
{
bike.LockInfo.State.Returns(state);
var requestHandler = RequestHandlerFactory.Create(
bike,
() => true /*isConnectedDelegate*/,
(isconnected) => connector,
() => pollingManager,
smartDevice,
viewService,
bikesViewModel,
activeUser);
var requestHandler = RequestHandlerFactory.Create(
bike,
() => true /*isConnectedDelegate*/,
(isconnected) => connector,
() => pollingManager,
smartDevice,
viewService,
bikesViewModel,
activeUser);
Assert.That(
requestHandler.GetType(),
Is.EqualTo(state == LockingState.Closed
? typeof(BookedClosed)
: typeof(BookedOpen)));
}
}
Assert.That(
requestHandler.GetType(),
Is.EqualTo(state == LockingState.Closed
? typeof(BookedClosed)
: typeof(BookedOpen)));
}
}
[Test]
public void TestCreateFeedbackPending()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var smartDevice = Substitute.For<ISmartDevice>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
[Test]
public void TestCreateFeedbackPending()
{
var bike = Substitute.For<IBikeInfoMutable>();
var connector = Substitute.For<IConnector>();
var command = Substitute.For<ICommand>();
var pollingManager = Substitute.For<IPollingUpdateTaskManager>();
var smartDevice = Substitute.For<ISmartDevice>();
var viewService = Substitute.For<IViewService>();
var bikesViewModel = Substitute.For<IBikesViewModel>();
var activeUser = Substitute.For<IUser>();
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.FeedbackPending);
bike.State.Value.Returns(TINK.Model.State.InUseStateEnum.FeedbackPending);
foreach (LockingState state in Enum.GetValues(typeof(LockingState)))
{
bike.LockInfo.State.Returns(state);
foreach (LockingState state in Enum.GetValues(typeof(LockingState)))
{
bike.LockInfo.State.Returns(state);
var requestHandler = RequestHandlerFactory.Create(
bike,
() => true /*isConnectedDelegate*/,
(isconnected) => connector,
() => pollingManager,
smartDevice,
viewService,
bikesViewModel,
activeUser);
var requestHandler = RequestHandlerFactory.Create(
bike,
() => true /*isConnectedDelegate*/,
(isconnected) => connector,
() => pollingManager,
smartDevice,
viewService,
bikesViewModel,
activeUser);
Assert.That(
requestHandler.GetType(),
Is.EqualTo(typeof(FeedbackPending)));
}
}
}
Assert.That(
requestHandler.GetType(),
Is.EqualTo(typeof(FeedbackPending)));
}
}
}
}