sharee.bike-App/TestTINKLib/Fixtures/ObjectTests/Connector/CopriCallsHttpReference.cs
2021-07-20 23:06:09 +02:00

291 lines
10 KiB
C#

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Text;
using TINK.Repository;
using TINK.Repository.Exception;
using TINK.Repository.Response;
namespace UITest.Fixtures.Connector
{
/// <summary>
/// Object which manages calls to copri.
/// </summary>
public class CopriCallsHttpsReference
{
/// <summary> Logs user in. </summary>
/// <param name="copriHost">Host to connect to. </param>
/// <param name="merchantId">Id of the merchant.</param>
/// <param name="mailAddress">Mailaddress of user to log in.</param>
/// <param name="password">Password to log in.</param>
/// <param name="deviceId">Id specifying user and hardware.</param>
/// <remarks>Response which holds auth cookie <see cref="ResponseBase.authcookie"/></remarks>
public static AuthorizationResponse DoAuthorizeCall(
string copriHost,
string merchantId,
string mailAddress,
string password,
string deviceId)
{
#if !WINDOWS_UWP
var l_oCommand = string.Format(
"request=authorization&merchant_id={0}&user_id={1}&user_pw={2}&hw_id={3}",
merchantId,
mailAddress,
password,
deviceId);
/// Extract session cookie from response.
string response = string.Empty;
response = Post(l_oCommand, copriHost);
return JsonConvert.DeserializeObject<ResponseContainer<AuthorizationResponse>>(response)?.shareejson;
#else
return null;
#endif
}
/// <summary> Logs user out. </summary>
/// <param name="copriHost">Host to connect to. </param>
/// <param name="merchantId">Id of the merchant.</param>
/// <param name="sessionCookie"> Cookie which identifies user.</param>
public static AuthorizationoutResponse DoAuthoutCall(
string copriHost,
string merchantId,
string sessionCookie)
{
#if !WINDOWS_UWP
var l_oCommand = string.Format(
"request=authout&authcookie={0}{1}",
sessionCookie,
merchantId);
string l_oLogoutResponse;
l_oLogoutResponse = Post(l_oCommand, copriHost);
/// Extract session cookie from response.
return JsonConvert.DeserializeObject<ResponseContainer<AuthorizationoutResponse>>(l_oLogoutResponse)?.shareejson;
#else
return null;
#endif
}
/// <summary>
/// Get list of stations from file.
/// </summary>
/// <param name="p_strCopriHost">URL of the copri host to connect to.</param>
/// <param name="p_strMerchantId">Id of the merchant.</param>
/// <param name="p_strCookie">Auto cookie of user if user is logged in.</param>
/// <returns>List of files.</returns>
public static StationsAvailableResponse GetStationsAllCall(
string p_strCopriHost,
string p_strMerchantId,
string p_strCookie = null)
{
var l_oCommand = string.Format(
"request=stations_all&authcookie={0}{1}",
p_strCookie,
p_strMerchantId);
#if !WINDOWS_UWP
string l_oStationsAllResponse;
l_oStationsAllResponse = Post(l_oCommand, p_strCopriHost);
// Extract bikes from response.
return JsonConvert.DeserializeObject<ResponseContainer<StationsAvailableResponse>>(l_oStationsAllResponse)?.shareejson;
#else
return null;
#endif
}
/// <summary>
/// Gets a list of bikes from Copri.
/// </summary>
/// <param name="copriHost">URL of the copri host to connect to.</param>
/// <param name="p_strMerchantId">Id of the merchant.</param>
/// <param name="p_strSessionCookie">Cookie to authenticate user.</param>
/// <returns>Response holding list of bikes.</returns>
public static BikesAvailableResponse GetBikesAvailableCall(
string copriHost,
string merchantId,
string sessionCookie = null)
{
#if !WINDOWS_UWP
string l_oCommand =
$"request=bikes_available&system=all&authcookie={sessionCookie ?? string.Empty}{merchantId}";
string response;
response = Post(l_oCommand, copriHost);
// Extract bikes from response.
return CopriCallsStatic.DeserializeResponse<BikesAvailableResponse>(response);
#else
return null;
#endif
}
/// <summary>
/// Gets a list of bikes reserved/ booked by acctive user from Copri.
/// </summary>
/// <param name="p_strMerchantId">Id of the merchant.</param>
/// <param name="p_strSessionCookie">Cookie to authenticate user.</param>
/// <returns>Response holding list of bikes.</returns>
public static BikesReservedOccupiedResponse GetBikesOccupiedCall(
string copriHost,
string merchantId,
string sessionCookie)
{
#if !WINDOWS_UWP
string l_oCommand = !string.IsNullOrEmpty(sessionCookie)
? $"request=user_bikes_occupied&system=all&authcookie={sessionCookie}{merchantId}"
: "request=bikes_available";
string l_oBikesOccupiedResponse;
l_oBikesOccupiedResponse = Post(l_oCommand, copriHost);
// Extract bikes from response.
return CopriCallsStatic.DeserializeResponse<BikesReservedOccupiedResponse>(l_oBikesOccupiedResponse);
#else
return null;
#endif
}
/// <summary>
/// Gets booking request response.
/// </summary>
/// <param name="p_strMerchantId">Id of the merchant.</param>
/// <param name="p_iBikeId">Id of the bike to book.</param>
/// <param name="p_strSessionCookie">Cookie identifying the user.</param>
/// <returns>Response on booking request.</returns>
public static ReservationBookingResponse DoReserveCall(
string copriHost,
string p_strMerchantId,
string p_iBikeId,
string p_strSessionCookie)
{
#if !WINDOWS_UWP
string l_oCommand = string.Format(
"request=booking_request&bike={0}&authcookie={1}{2}",
p_iBikeId,
p_strSessionCookie,
p_strMerchantId);
string l_oBikesAvaialbeResponse = Post(l_oCommand, copriHost);
// Extract bikes from response.
return JsonConvert.DeserializeObject<ResponseContainer<ReservationBookingResponse>>(l_oBikesAvaialbeResponse)?.shareejson;
#else
return null;
#endif
}
/// <summary>
/// Gets canel booking request response.
/// </summary>
/// <param name="p_strMerchantId">Id of the merchant.</param>
/// <param name="p_iBikeId">Id of the bike to book.</param>
/// <param name="p_strSessionCookie">Cookie of the logged in user.</param>
/// <returns>Response on cancel booking request.</returns>
public static ReservationCancelReturnResponse DoCancelReservationCall(
string copriHost,
string p_strMerchantId,
string p_iBikeId,
string p_strSessionCookie)
{
#if !WINDOWS_UWP
string l_oCommand = string.Format(
"request=booking_cancel&bike={0}&authcookie={1}{2}",
p_iBikeId,
p_strSessionCookie,
p_strMerchantId);
string l_oBikesAvaialbeResponse;
l_oBikesAvaialbeResponse = Post(l_oCommand, copriHost);
// Extract bikes from response.
return JsonConvert.DeserializeObject<ResponseContainer<ReservationCancelReturnResponse>>(l_oBikesAvaialbeResponse)?.shareejson;
#else
return null;
#endif
}
/// <summary>
/// Gets a list of bikes from Copri.
/// </summary>
/// <param name="p_strSessionCookie">Cookie to authenticate user.</param>
/// <returns></returns>
private static string Post(
string p_strCommand,
string p_strURL)
{
#if !WINDOWS_UWP
var l_strHost = p_strURL;
// Returns a http request.
var l_oRequest = WebRequest.Create(l_strHost);
l_oRequest.Method = "POST";
l_oRequest.ContentType = "application/x-www-form-urlencoded";
byte[] l_oPostData = Encoding.UTF8.GetBytes(p_strCommand);
l_oRequest.ContentLength = l_oPostData.Length;
// Get the request stream.
using (Stream l_oDataStream = l_oRequest.GetRequestStream())
{
// Write the data to the request stream.
l_oDataStream.Write(l_oPostData, 0, l_oPostData.Length);
}
// Get the response.
var l_oResponse = l_oRequest.GetResponse() as HttpWebResponse;
if (l_oResponse == null)
{
throw new Exception(string.Format("Reserve request failed. Response form from server was not of expected type."));
}
if (l_oResponse.StatusCode != HttpStatusCode.OK)
{
throw new CommunicationException(string.Format(
"Posting request {0} failed. Expected status code is {1} but was {2}.",
p_strCommand,
HttpStatusCode.OK,
l_oResponse.StatusCode));
}
string responseFromServer = string.Empty;
// Get the request stream.
using (Stream l_oDataStream = l_oResponse.GetResponseStream())
using (StreamReader l_oReader = new StreamReader(l_oDataStream))
{
// Read the content.
responseFromServer = l_oReader.ReadToEnd();
// Display the content.
Console.WriteLine(responseFromServer);
// Clean up the streams.
l_oResponse.Close();
}
return responseFromServer;
#else
return null;
#endif
}
}
}