Skip to content

Commit

Permalink
Refactor StripeClient setup in tests (#1631)
Browse files Browse the repository at this point in the history
  • Loading branch information
ob-stripe committed Jun 6, 2019
1 parent 969c353 commit 0194c80
Show file tree
Hide file tree
Showing 75 changed files with 364 additions and 165 deletions.
54 changes: 52 additions & 2 deletions src/StripeTests/BaseStripeTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,86 @@ namespace StripeTests
using System.Net.Http;
using System.Reflection;
using System.Text;
using Stripe;
using Xunit;

[Collection("stripe-mock tests")]
public class BaseStripeTest
{
/// <summary>
/// Initializes a new instance of the <see cref="BaseStripeTest"/> with no fixtures.
/// </summary>
public BaseStripeTest()
: this(null, null)
{
}

/// <summary>
/// Initializes a new instance of the <see cref="BaseStripeTest"/> with the
/// <see cref="StripeMockFixture"/> fixture. Use this constructor for tests that need to
/// send requests to stripe-mock, but don't need mocking capabilities (i.e. don't need to
/// assert or stub HTTP requests).
/// </summary>
public BaseStripeTest(StripeMockFixture stripeMockFixture)
: this(stripeMockFixture, null)
{
}

/// <summary>
/// Initializes a new instance of the <see cref="BaseStripeTest"/> with the
/// <see cref="MockHttpClientFixture"/> fixture. Use this constructor for tests that need
/// mocking capabilities (i.e. need to assert or stub HTTP requests) but don't need to send
/// requests to stripe-mock.
/// </summary>
public BaseStripeTest(MockHttpClientFixture mockHttpClientFixture)
: this(null, mockHttpClientFixture)
{
}

public BaseStripeTest(StripeMockFixture stripeMockFixture, MockHttpClientFixture mockHttpClientFixture)
/// <summary>
/// Initializes a new instance of the <see cref="BaseStripeTest"/> with both the
/// <see cref="StripeMockFixture"/> and the <see cref="MockHttpClientFixture"/> fixtures.
/// Use this constructor for tests that need to send requests to stripe-mock and also need
/// mocking capabilities (i.e. need to assert or stub HTTP requests).
/// </summary>
public BaseStripeTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
{
this.StripeMockFixture = stripeMockFixture;
this.MockHttpClientFixture = mockHttpClientFixture;

if (this.MockHttpClientFixture != null)
if ((this.StripeMockFixture != null) && (this.MockHttpClientFixture != null))
{
// Set up StripeClient to use stripe-mock with the mock HTTP client
var httpClient = new SystemNetHttpClient(
new HttpClient(this.MockHttpClientFixture.MockHandler.Object));
StripeConfiguration.StripeClient = this.StripeMockFixture.BuildStripeClient(
httpClient: httpClient);

// Reset the mock before each test
this.MockHttpClientFixture.Reset();
}
else if (this.StripeMockFixture != null)
{
// Set up StripeClient to use stripe-mock
StripeConfiguration.StripeClient = this.StripeMockFixture.BuildStripeClient();
}
else if (this.MockHttpClientFixture != null)
{
// Set up StripeClient with the mock HTTP client
var httpClient = new SystemNetHttpClient(
new HttpClient(this.MockHttpClientFixture.MockHandler.Object));
StripeConfiguration.StripeClient = new StripeClient(httpClient: httpClient);

// Reset the mock before each test
this.MockHttpClientFixture.Reset();
}
else
{
// Use the default StripeClient
StripeConfiguration.StripeClient = null;
}
}

protected MockHttpClientFixture MockHttpClientFixture { get; }
Expand Down
4 changes: 2 additions & 2 deletions src/StripeTests/Infrastructure/Public/StripeResponseTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ namespace StripeTests

public class StripeResponseTest : BaseStripeTest
{
public StripeResponseTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public StripeResponseTest(StripeMockFixture stripeMockFixture)
: base(stripeMockFixture)
{
}

Expand Down
19 changes: 12 additions & 7 deletions src/StripeTests/Infrastructure/Public/SystemNetHttpClientTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,24 @@ namespace StripeTests

public class SystemNetHttpClientTest : BaseStripeTest
{
public SystemNetHttpClientTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
{
}

[Fact]
public async Task MakeRequestAsync()
{
var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);
responseMessage.Content = new StringContent("Hello world!");
var mockHandler = new Mock<HttpClientHandler>();
mockHandler.Protected()
this.MockHttpClientFixture.MockHandler.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>())
.Returns(Task.FromResult(responseMessage));
var client = new SystemNetHttpClient(new System.Net.Http.HttpClient(mockHandler.Object));
var client = new SystemNetHttpClient(
new HttpClient(this.MockHttpClientFixture.MockHandler.Object));
var request = new StripeRequest(HttpMethod.Post, "/foo", null, null);

var response = await client.MakeRequestAsync(request);
Expand All @@ -52,19 +57,19 @@ public async Task UserAgentIncludesAppInfo()

var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);
responseMessage.Content = new StringContent("Hello world!");
var mockHandler = new Mock<HttpClientHandler>();
mockHandler.Protected()
this.MockHttpClientFixture.MockHandler.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>())
.Returns(Task.FromResult(responseMessage));

var client = new SystemNetHttpClient(new System.Net.Http.HttpClient(mockHandler.Object));
var client = new SystemNetHttpClient(
new HttpClient(this.MockHttpClientFixture.MockHandler.Object));
var request = new StripeRequest(HttpMethod.Post, "/foo", null, null);
await client.MakeRequestAsync(request);

mockHandler.Protected()
this.MockHttpClientFixture.MockHandler.Protected()
.Verify(
"SendAsync",
Times.Once(),
Expand Down
5 changes: 5 additions & 0 deletions src/StripeTests/Infrastructure/StripeExceptionTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ namespace StripeTests

public class StripeExceptionTest : BaseStripeTest
{
public StripeExceptionTest(StripeMockFixture stripeMockFixture)
: base(stripeMockFixture)
{
}

[Fact]
public async Task SetsStripeResponse()
{
Expand Down
18 changes: 4 additions & 14 deletions src/StripeTests/MockHttpClientFixture.cs
Original file line number Diff line number Diff line change
@@ -1,38 +1,28 @@
namespace StripeTests
{
using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Moq;
using Moq.Protected;
using Stripe;
using Stripe.Infrastructure;

public class MockHttpClientFixture : IDisposable
public class MockHttpClientFixture
{
private readonly IStripeClient origClient;

public MockHttpClientFixture()
{
this.MockHandler = new Mock<HttpClientHandler>
{
CallBase = true
};
var httpClient = new System.Net.Http.HttpClient(this.MockHandler.Object);
var stripeClient = new StripeClient(new Stripe.SystemNetHttpClient(httpClient));

this.origClient = StripeConfiguration.StripeClient;
StripeConfiguration.StripeClient = stripeClient;
this.HttpClient = new SystemNetHttpClient(
new System.Net.Http.HttpClient(this.MockHandler.Object));
}

public Mock<HttpClientHandler> MockHandler { get; }

public void Dispose()
{
StripeConfiguration.StripeClient = this.origClient;
}
public SystemNetHttpClient HttpClient { get; }

/// <summary>
/// Resets the mock's state.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@ public class AccountLinkServiceTest : BaseStripeTest
private readonly AccountLinkService service;
private readonly AccountLinkCreateOptions createOptions;

public AccountLinkServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public AccountLinkServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new AccountLinkService();

Expand Down
6 changes: 4 additions & 2 deletions src/StripeTests/Services/Accounts/AccountServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ public class AccountServiceTest : BaseStripeTest
private readonly AccountListOptions listOptions;
private readonly AccountRejectOptions rejectOptions;

public AccountServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public AccountServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new AccountService();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ public class ApplePayDomainServiceTest : BaseStripeTest
private readonly ApplePayDomainCreateOptions createOptions;
private readonly ApplePayDomainListOptions listOptions;

public ApplePayDomainServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public ApplePayDomainServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new ApplePayDomainService();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ public class ApplicationFeeRefundServiceTest : BaseStripeTest
private readonly ApplicationFeeRefundUpdateOptions updateOptions;
private readonly ApplicationFeeRefundListOptions listOptions;

public ApplicationFeeRefundServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public ApplicationFeeRefundServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new ApplicationFeeRefundService();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ public class ApplicationFeeServiceTest : BaseStripeTest
private readonly ApplicationFeeService service;
private readonly ApplicationFeeListOptions listOptions;

public ApplicationFeeServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public ApplicationFeeServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new ApplicationFeeService();

Expand Down
6 changes: 4 additions & 2 deletions src/StripeTests/Services/Balance/BalanceServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ public class BalanceServiceTest : BaseStripeTest
{
private readonly BalanceService service;

public BalanceServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public BalanceServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new BalanceService();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ public class BalanceTransactionServiceTest : BaseStripeTest
private readonly BalanceTransactionService service;
private readonly BalanceTransactionListOptions listOptions;

public BalanceTransactionServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public BalanceTransactionServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new BalanceTransactionService();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ public class BankAccountServiceTest : BaseStripeTest
private readonly BankAccountListOptions listOptions;
private readonly BankAccountVerifyOptions verifyOptions;

public BankAccountServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public BankAccountServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new BankAccountService();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ public class CapabilityServiceTest : BaseStripeTest
private readonly CapabilityUpdateOptions updateOptions;
private readonly CapabilityListOptions listOptions;

public CapabilityServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public CapabilityServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new CapabilityService();

Expand Down
6 changes: 4 additions & 2 deletions src/StripeTests/Services/Cards/CardServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,10 @@ public class CardServiceTest : BaseStripeTest
private readonly CardUpdateOptions updateOptions;
private readonly CardListOptions listOptions;

public CardServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public CardServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new CardService();

Expand Down
6 changes: 4 additions & 2 deletions src/StripeTests/Services/Charges/ChargeServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ public class ChargeServiceTest : BaseStripeTest
private readonly ChargeUpdateOptions updateOptions;
private readonly ChargeListOptions listOptions;

public ChargeServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public ChargeServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new ChargeService();

Expand Down
6 changes: 4 additions & 2 deletions src/StripeTests/Services/Checkout/SessionServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ public class SessionServiceTest : BaseStripeTest
private readonly SessionService service;
private readonly SessionCreateOptions createOptions;

public SessionServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public SessionServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new SessionService();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ public class CountrySpecServiceTest : BaseStripeTest
private readonly CountrySpecService service;
private readonly CountrySpecListOptions listOptions;

public CountrySpecServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public CountrySpecServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new CountrySpecService();

Expand Down
6 changes: 4 additions & 2 deletions src/StripeTests/Services/Coupons/CouponServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ public class CouponServiceTest : BaseStripeTest
private readonly CouponUpdateOptions updateOptions;
private readonly CouponListOptions listOptions;

public CouponServiceTest(MockHttpClientFixture mockHttpClientFixture)
: base(mockHttpClientFixture)
public CouponServiceTest(
StripeMockFixture stripeMockFixture,
MockHttpClientFixture mockHttpClientFixture)
: base(stripeMockFixture, mockHttpClientFixture)
{
this.service = new CouponService();

Expand Down
Loading

0 comments on commit 0194c80

Please sign in to comment.