sharee.bike-App/TestTINKLib/Fixtures/ObjectTests/Connector/TestCopriCallsHttps.cs
Anja Müller-Meißner 0468955d49 Version 3.0.338
2022-09-08 09:55:14 +02:00

692 lines
26 KiB
C#

using System;
using System.Linq;
using System.Reflection;
using System.Threading;
using NUnit.Framework;
using TINK.Model;
using TINK.Model.Services.CopriApi.ServerUris;
using TINK.Repository;
using TINK.Repository.Exception;
using TINK.Repository.Request;
using TINK.Repository.Response;
using static TINK.Repository.CopriCallsHttps;
namespace UITest.Fixtures.Connector
{
[TestFixture]
public class TestCopriCallsHttps
{
public const string CATEGORY_REQUIRESCOPRI = "RequiresCOPRI";
public const string CATEGORY_USESLIVESERVER = "RequiresCOPRI.Live";
public const string CATEGORY_USESDEVELSERVER = "RequiresCOPRI.Devel";
public const string TESTAGENT = "TestShareeLib";
[TearDown]
public void TearDown()
{
Thread.Sleep(2000); // Sleep, otherwise copri will block requested calls.
}
[Test]
public void TestIsConnected()
{
Assert.IsTrue(new CopriCallsHttps(new Uri("http://127.0.0.0/api"), new AppContextInfo("oiF2kahH", "sharee.bike.test", new Version(3, 0, 267)), "123").IsConnected);
}
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestLogin(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)]
string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
Func<string, string> command = (password) => new RequestBuilder(TinkApp.MerchantId, null /*UI language */).DoAuthorization(
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Mail,
password,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.DeviceId);
var l_oSessionCookieJM_Dev1 = DoAuthorizationAsync(
url,
command(TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Pwd),
() => command("*******"),
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestLogin)}").Result;
Assert.AreEqual(
string.Format("{0}{1}", "6103_4da3044c8657a04ba60e2eaa753bc51a_", "oiF2kahH"),
l_oSessionCookieJM_Dev1.authcookie,
"Session cookie must never change if user and hardware id does not change.");
}
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestLogin_UserUnknown(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)]
string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
Func<string, string> command = (password) => new RequestBuilder(TinkApp.MerchantId, null /*UI language */).DoAuthorization(
TestTINKLib.LoginSessionCopriInfo.JavaministerGibtsNet.Mail,
password,
TestTINKLib.LoginSessionCopriInfo.JavaministerGibtsNet.DeviceId);
var l_oSessionCookieJM_Dev1 = DoAuthorizationAsync(
url,
command(TestTINKLib.LoginSessionCopriInfo.JavaministerGibtsNet.Pwd),
() => command("***********"),
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestLogin_UserUnknown)}").Result;
Assert.That(
l_oSessionCookieJM_Dev1,
Is.Not.Null);
// From COPRI 4.1 cookie is empty, was null before
Assert.IsEmpty(l_oSessionCookieJM_Dev1.authcookie);
Assert.AreEqual(
"authorization",
l_oSessionCookieJM_Dev1.response);
Assert.AreEqual(
"Failure: cannot generate authcookie",
l_oSessionCookieJM_Dev1.response_state);
}
/// <summary> Log out functionality is only for test purposes. </summary>
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestLogout(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)]
string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
// Prerequisite: Login must be performed before logging out.
var l_oSessionCookie = CopriCallsHttpsReference.DoAuthorizeCall(
url,
TinkApp.MerchantId,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Mail,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Pwd,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.DeviceId);
Assert.IsFalse(
string.IsNullOrEmpty(l_oSessionCookie?.authcookie),
"Prerequisites not matched: User must be logged on before beeing able to log out.");
// Verify logout
try
{
Assert.NotNull(DoAuthoutAsync(
url,
new RequestBuilderLoggedIn(
TinkApp.MerchantId,
null /*UI language */,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie).DoAuthout(),
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestLogout)}"
).Result.GetIsResponseOk());
}
finally
{
// Log in again to ensure that tests do not change state of database (assumtion: user is always logged in).
CopriCallsHttpsReference.DoAuthorizeCall(
url,
TinkApp.MerchantId,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Mail,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Pwd,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.DeviceId);
}
}
/// <summary>
/// Log out functionality is only for test purposes.
/// </summary>
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestLogout_NotLoggedIn(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)]
string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
// Prerequisite:
// Ensure that user is really logged out and get valid session cookie before verifying logout behavior.
var l_oLoginResponse = CopriCallsHttpsReference.DoAuthorizeCall(
url,
TinkApp.MerchantId,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Mail,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Pwd,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.DeviceId);
Assert.IsFalse(
string.IsNullOrEmpty(l_oLoginResponse?.authcookie),
"Prerequisites not matched: User must be logged out before beeing able to log out.");
CopriCallsHttpsReference.DoAuthoutCall(url, TinkApp.MerchantId, l_oLoginResponse.authcookie);
try
{
// Verify logout
Assert.Throws<AuthcookieNotDefinedException>(
() => DoAuthoutAsync(
url,
new RequestBuilderLoggedIn(TinkApp.MerchantId, null /*UI language */, l_oLoginResponse.authcookie).DoAuthout(),
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestLogout_NotLoggedIn)}").Result.GetIsResponseOk());
}
finally
{
// Log in again. Otherwise subsequent tests might fail.
l_oLoginResponse = CopriCallsHttpsReference.DoAuthorizeCall(
new CopriServerUriList().ActiveUri.AbsoluteUri,
TinkApp.MerchantId,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Mail,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Pwd,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.DeviceId);
}
}
/// <summary>
/// Log out is performed by app programmatically if authcookie is no more valid.
/// Must work even if authcookie is no more valid, otherwise login would not be avalable.
/// </summary>
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestLogout_AuthcookieUnknown(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)]
string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
// Prerequisite: Login must be formormed before logging out.
var l_oSessionCookie = CopriCallsHttpsReference.DoAuthorizeCall(
url,
TinkApp.MerchantId,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Mail,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Pwd,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.DeviceId);
Assert.IsFalse(
string.IsNullOrEmpty(l_oSessionCookie?.authcookie),
"Prerequisites not matched: User must be logged on before beeing able to log out.");
// Verify logout that expected excepton is thrown.
try
{
Assert.AreEqual(
"Failure 1001: authcookie not defined", // Up to 2020-12-05 COPRI returned: "Failure 1004: authcookie not defined"
DoAuthoutAsync(
url,
new RequestBuilderLoggedIn(
TinkApp.MerchantId,
null /*UI language */,
TestTINKLib.LoginSessionCopriInfo.JavaministerKeksGibtsNet.AuthCookie).DoAuthout(),
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestLogout_AuthcookieUnknown)}"
).Result.response_state);
}
finally
{
// Log in again to ensure that tests do not change state of database (assumtion: user is always logged in).
CopriCallsHttpsReference.DoAuthorizeCall(
url,
TinkApp.MerchantId,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Mail,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.Pwd,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.DeviceId);
}
}
/// <remarks>
/// From COPRI version v4.1 switched from TINK devel CopriServerUriList.TINK_DEVEL and CopriServerUriList.TINK_LIVE to CopriServerUriList.SHAREE_DEVEL.
/// </remarks>
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestGetBikesAvailalbleCall_LoggedId(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)] string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
// Check prerequisites: At least one bike must be available.
var bikesReference = CopriCallsHttpsReference.GetBikesAvailableCall(url, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes;
Assert.NotNull(bikesReference);
var bikeReference = bikesReference.FirstOrDefault().Value;
Assert.That(
bikeReference,
Is.Not.Null,
$"Prerequisites are not matched: No bikes available from server {url} returned but at least one bike for verification required.");
// Verify list of bikes returned from first device
var request = new RequestBuilderLoggedIn(
TinkApp.MerchantId,
null /*UI language */,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie).GetBikesAvailable();
var bikes = GetBikesAvailableAsync(
url,
request).Result.bikes;
Assert.That(
bikes,
Is.Not.Null,
"Response is null.");
var bike = bikes.FirstOrDefault().Value;
Assert.That(
bike,
Is.Not.Null,
"Response on GetBikesAvailableCall must contain at leas one bike.");
// Check if entries are valid.
Assert.Greater(
bike.description.Length,
0,
"Bike despcription must never be empty.");
Assert.That(
bike.bike,
Is.Not.Null,
"Bike index must never be null");
Assert.AreEqual(
"available",
bike.state,
"Bike state must be available");
}
/// <remarks>
/// From COPRI version v4.1 switched from TINK devel CopriServerUriList.TINK_DEVEL and CopriServerUriList.TINK_LIVE to CopriServerUriList.SHAREE_DEVEL.
/// </remarks>
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestGetBikesAvailalbleCall_NotLoggedId(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)] string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
// Check prerequisites: At least one bike must be available.
var bikeReference = CopriCallsHttpsReference.GetBikesAvailableCall(url, TinkApp.MerchantId)?.bikes?.FirstOrDefault().Value;
Assert.That(
bikeReference,
Is.Not.Null,
$"Prerequisites are not matched: No bikes available from server {url} returned but at least one bike for verification required.");
// Verify list of bikes returned from first device
var request = new RequestBuilder(TinkApp.MerchantId, null /*UI language */).GetBikesAvailable();
var bikes = GetBikesAvailableAsync(
url,
request,
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestGetBikesAvailalbleCall_NotLoggedId)}").Result.bikes;
Assert.That(
bikes,
Is.Not.Null,
"Response is null.");
var bike = bikes.FirstOrDefault().Value;
Assert.That(
bike,
Is.Not.Null,
"Response on GetBikesAvailableCall must contain at leas one bike.");
// Check if entries are valid.
Assert.Greater(
bike.description.Length,
0,
"Bike despcription must never be empty.");
Assert.That(
bike.bike,
Is.Not.Null,
"Bike index must never be null");
Assert.AreEqual(
"available",
bike.state,
"Bike state must be available");
}
/// <summary>
/// Attention: Behaves different if called with a period smaller 15minutes because bike will alreay be reserved.
/// </summary>
[Test, Explicit, Ignore("Avoid testrunner running explicit tests.")]
public void TestDoReserveCall(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)]
string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
Assert.Less(
CopriCallsHttpsReference.GetBikesOccupiedCall(url, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes_occupied.Count,
3,
"Too many bikes requested/ booked.");
var l_oBikesAvailable = CopriCallsHttpsReference.GetBikesAvailableCall(CopriServerUriList.DevelopUri.AbsoluteUri, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes;
Assert.Greater(
l_oBikesAvailable.Count,
0,
"There must be at least one bike available.");
// Id of bike to book
string l_oBikeId = l_oBikesAvailable.ToArray()[0].Value.bike;
// Check prerequisites.
// State of bike for which to cancel booking must be available.
Assert.NotNull(
CopriCallsHttpsReference.GetBikesAvailableCall(url, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes?.FirstOrDefault(x => x.Value.bike == l_oBikeId).Value,
"Prerequities check failed: Bike with given id must be available;");
var l_oBookingResponse = DoReserveAsync(
CopriServerUriList.DevelopUri.AbsoluteUri,
new RequestBuilderLoggedIn(
TinkApp.MerchantId, null /*UI language */, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie).DoReserve(l_oBikeId)).Result;
try
{
// If response_state is "Failure 2001: booking bike 20 . maybe not available" probale test was run already and bike got reserved.
Assert.AreEqual(string.Format("OK: requested bike {0}", l_oBikeId), l_oBookingResponse.response_state);
}
finally
{
// Clean up to ensure that running tests does not modify data base.
CopriCallsHttpsReference.DoCancelReservationCall(url, TinkApp.MerchantId, l_oBikeId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie);
}
}
/// <summary>
/// Attention: Behaves different if called with a period smaller 15minutes because bike will alreay be reserved.
/// </summary>
[Test, Explicit, Ignore("Avoid testrunner running explicit tests.")]
public void TestDoCancelReservationCall(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)]
string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
Assert.Less(
CopriCallsHttpsReference.GetBikesOccupiedCall(url, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes_occupied.Count,
3,
"Too many bikes requested/ booked.");
var l_oBikesAvailable = CopriCallsHttpsReference.GetBikesAvailableCall(CopriServerUriList.DevelopUri.AbsoluteUri, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes;
Assert.Greater(
l_oBikesAvailable.Count,
0,
"There must be at least one bike available.");
// Id of bike to book
string l_oBikeId = l_oBikesAvailable.ToArray()[0].Value.bike;
// Check prerequisites.
var l_oBikeToCancel = CopriCallsHttpsReference.GetBikesAvailableCall(url, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes?.FirstOrDefault(x => x.Value.bike == l_oBikeId).Value;
if (l_oBikeToCancel != null)
{
// Bike is avilable. Do request before unning test.
CopriCallsHttpsReference.DoReserveCall(url, TinkApp.MerchantId, l_oBikeId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie);
}
// State of bike for which to cancel booking must be reserved.
var l_oReservedBike = CopriCallsHttpsReference.GetBikesOccupiedCall(url, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie).bikes_occupied.FirstOrDefault(x => x.Value.bike == l_oBikeId).Value;
Assert.NotNull(l_oReservedBike, string.Format("Setup test failed. Bike with id {0} must be booked before verifying cancel of booking.", l_oReservedBike));
Assert.AreEqual("requested", l_oReservedBike.state, string.Format("Setup test failed. Bike with id {0} must be booked before verifying cancel of booking.", l_oReservedBike));
// Test cancel booking
var l_oBookingResponse = DoCancelReservationAsync(
CopriServerUriList.DevelopUri.AbsoluteUri,
new RequestBuilderLoggedIn(
TinkApp.MerchantId,
null /*UI language */,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie).DoReserve(l_oBikeId)).Result;
try
{
Assert.AreEqual(string.Format("OK: canceled bike {0}", l_oBikeId), l_oBookingResponse.response_state);
}
catch
{
// Clean up to ensure that running tests does not modify data base.
CopriCallsHttpsReference.DoCancelReservationCall(url, TinkApp.MerchantId, l_oBikeId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie);
}
}
/// <summary>Tests the member.</summary>
/// <remarks>Timecode is no more verified since COPRI 4.1.</remarks>
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestGetBikesOccupiedCall_SomeRequestedBooked(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)]
string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
BikesReservedOccupiedResponse l_oBookingResponse;
var bikesOccupied = CopriCallsHttpsReference.GetBikesOccupiedCall(url, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes_occupied;
if (bikesOccupied == null || bikesOccupied.Count < 1)
{
// There must be at least one bike booked.
var bikesAvailable = CopriCallsHttpsReference.GetBikesAvailableCall(
url,
TinkApp.MerchantId,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes;
Assert.Greater(
bikesAvailable.Count,
0,
"Prerequisites are not matched: There must be at least one bike available.");
// Id of bike to book
var bike = bikesAvailable.ToArray()[0].Value;
l_oBookingResponse = CopriCallsHttpsReference.DoReserveCall(
bike.uri_operator + "/APIjsonserver",
TinkApp.MerchantId,
bike.bike,
TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie);
Assert.That(l_oBookingResponse.GetIsResponseOk("Testing cotext"),
!Is.Null,
$"Booking must succeed. {l_oBookingResponse.response_text}");
}
// Verify GetBikesOccupied call.
var l_oBike = CopriCallsHttpsReference.GetBikesOccupiedCall(url, TinkApp.MerchantId, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie)?.bikes_occupied?.FirstOrDefault().Value;
Assert.NotNull(l_oBike, "Response on GetBikesOccupiedCall of must contain at least one bike.");
l_oBookingResponse = GetBikesOccupiedAsync(
url,
new RequestBuilderLoggedIn(TinkApp.MerchantId, null /*UI language */, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie).GetBikesOccupied(),
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestGetBikesOccupiedCall_SomeRequestedBooked)}").Result;
// Check first entry.
Assert.AreEqual(
string.Format("{0}{1}", TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie, TinkApp.MerchantId),
l_oBookingResponse.authcookie);
Assert.Greater(l_oBike.description.Length, 0, "Bike despcription must never be empty.");
Assert.That(l_oBike.bike, Is.Not.Null, "Bike index must not be null.");
Assert.That(
l_oBike.station,
Is.Not.Null,
"Station index must never be null");
Assert.Greater(l_oBike.state.Length, 0, "State info must never be null or empty.");
// Todo: Requested bikes do not have a gps position. What is about booked bikes?
// Assert.Greater(l_oBike.gps.Length, 0, "Gps position must never be empty.");
Assert.Greater(l_oBike.start_time.Length, 0, "Time when request/ booking was performed must never be null or empty.");
}
/// <summary>
/// Tests the member.
/// Call GetBikesOccupiedCall is first call of app which fails (throws AuthcookieNotDefinedException) if auth cookie is invalid.
/// If app detects AuthcookieNotDefinedException exception user is logged out.
/// </summary>
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestGetBikesOccupiedCall_KeksGibtsNet(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)] string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
var request = new RequestBuilderLoggedIn(TinkApp.MerchantId, null /*UI language */, TestTINKLib.LoginSessionCopriInfo.JavaministerKeksGibtsNet.AuthCookie).GetBikesOccupied();
var l_oBookingResponse = GetBikesOccupiedAsync(
url,
request,
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestGetBikesOccupiedCall_KeksGibtsNet)}").Result;
Assert.AreEqual(
"Failure 1001: authcookie on primary not defined",
l_oBookingResponse.response_state); // Up to 2020-12-05 COPRI returned: "Failure 1003: authcookie not defined"
}
/// <summary>
/// Tests the member.
/// </summary>
/// <remarks>
/// From COPRI version v4.1 switched from TINK devel CopriServerUriList.TINK_DEVEL and CopriServerUriList.TINK_LIVE to CopriServerUriList.SHAREE_DEVEL.
/// </remarks>
[Test]
[Category(CATEGORY_REQUIRESCOPRI)]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#endif
public void TestGetStationsAllCall_NotLoggedIn(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)] string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
// Check prerequisites: At least one bike must be available.
var l_oStationsReference = CopriCallsHttpsReference.GetStationsAllCall(url, TinkApp.MerchantId)?.stations;
Assert.IsTrue(
l_oStationsReference != null && l_oStationsReference.Count > 0,
"Prerequisites are not matched: There are no stations.");
// Verify implementation
var l_oStationsAll = GetStationsAsync(url, new RequestBuilder(TinkApp.MerchantId, null /*UI language */).GetStations()).Result;
Assert.NotNull(l_oStationsAll?.stations);
Assert.Greater(l_oStationsAll.stations.Count, 0);
}
/// <summary>
/// Tests the member.
/// </summary>
/// <remarks>
/// From COPRI version v4.1 switched from TINK devel CopriServerUriList.TINK_DEVEL and CopriServerUriList.TINK_LIVE to CopriServerUriList.SHAREE_DEVEL.
/// </remarks>
[Test]
#if !NOLIVESERVER
[Category(CATEGORY_USESLIVESERVER)]
#elif !NODEVELSERVER
[Category(CATEGORY_USESDEVELSERVER)]
#endif
public void TestGetStationsAllCall_LoggedIn(
#if NOLIVESERVER
[Values(CopriServerUriList.SHAREE_DEVEL)] string url)
#elif NODEVELSERVER
[Values(CopriServerUriList.SHAREE_LIVE)] string url)
#else
[Values(CopriServerUriList.SHAREE_DEVEL, CopriServerUriList.SHAREE_LIVE)] string url)
#endif
{
var stationsAll = GetStationsAsync(
url,
new RequestBuilderLoggedIn(TinkApp.MerchantId, null /*UI language */, TestTINKLib.LoginSessionCopriInfo.JavaministerHardwareNr1.AuthCookie).GetStations(),
$"{Assembly.GetAssembly(GetType()).GetName().Name}-{GetType().Name}-{nameof(TestGetStationsAllCall_LoggedIn)}").Result;
Assert.NotNull(stationsAll?.stations);
Assert.That(
stationsAll.stations.Count,
Is.GreaterThan(0),
$"There must be at least one station.");
}
}
}