using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Bogus;
using Moq;
using Moq.Protected;
using SignNow.Net.Interfaces;
using SignNow.Net.Service;
namespace UnitTests
{
public abstract class SignNowTestBase
{
protected static Faker Faker => new Faker();
protected static Uri ApiBaseUrl => new Uri("https://api-eval.signnow.com/");
private static readonly string BaseTestDataPath = "../../../TestData/"
.Replace('/', Path.DirectorySeparatorChar);
protected static readonly string PdfFileName = "DocumentUpload.pdf";
protected static readonly string TxtFileName = "DocumentUpload.txt";
protected static string PdfFilePath => Path.Combine($"{BaseTestDataPath}Documents", PdfFileName);
protected static string TxtFilePath => Path.Combine($"{BaseTestDataPath}Documents", TxtFileName);
///
/// Create Mock for HttpClient
///
/// Json response that you want to be returned
/// Http status that you expect
///
protected ISignNowClient SignNowClientMock(string jsonResponse, HttpStatusCode code = HttpStatusCode.OK)
{
var handlerMock = new Mock(MockBehavior.Strict);
handlerMock
.Protected()
.Setup>("SendAsync", ItExpr.IsAny(), ItExpr.IsAny())
.ReturnsAsync(new HttpResponseMessage
{
StatusCode = code,
Content = new StringContent(jsonResponse)
})
.Verifiable();
// use real http client with mocked handler here
return new SignNowClient(new HttpClient(handlerMock.Object, true));
}
}
}