public async Task VerifyReceiptAsync_Fallbacks_To_Test_Environment_Only_When_Explicitly_Set(bool isTestEnvEnabled, bool expectedReceiptValidity) { var httpHandlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); httpHandlerMock.Protected() .SetupSequence <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(new HttpResponseMessage() { Content = new StringContent(GetVerifiedReceiptJson("Invalid_Receipt_Is_From_Test_Environment")) }) .ReturnsAsync(new HttpResponseMessage() { Content = new StringContent(GetVerifiedReceiptJson("Valid_Production_Excluding_Old_Subscriptions")) }); var httpClient = new HttpClient(httpHandlerMock.Object); var options = new OptionsWrapper <AppleReceiptVerifierOptions>(new AppleReceiptVerifierOptions() { AppSecret = "test_app_password", AcceptTestEnvironmentReceipts = isTestEnvEnabled }); var verifier = new AppleReceiptVerifier(options, httpClient); var receipt = await verifier.VerifyReceiptAsync("test_receipt_data", true); Assert.Equal(expectedReceiptValidity, receipt.IsValid); httpHandlerMock.Protected() .Verify <Task <HttpResponseMessage> >("SendAsync", Times.Exactly(isTestEnvEnabled ? 2 : 1), ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()); }
public void DeserializeResponse_InApp_With_No_Expiration_Date() { string json = GetVerifiedReceiptJson("Valid_Sandbox_Consumable_And_Active_Subscription_Excluding_Old_Transactions"); var receipt = AppleReceiptVerifier.DeserializeResponse(json); Assert.Null(receipt.Receipt.InApp.First().ExpiresDate); }
public void DeserializeResponse_Does_Not_Throw_Correct_Status_And_Validity(string responseName, bool isValid, KnownStatusCodes statusCode) { string json = GetVerifiedReceiptJson(responseName); var receipt = AppleReceiptVerifier.DeserializeResponse(json); Assert.Equal(isValid, receipt.IsValid); Assert.Equal(statusCode, (KnownStatusCodes)receipt.Status); }
public void DeserializeResponse_Invalid_Malformed_Receipt_Data() { string json = GetVerifiedReceiptJson("Invalid_Malformed_Receipt_Data"); var receipt = AppleReceiptVerifier.DeserializeResponse(json); Assert.False(receipt.IsValid); Assert.Equal(KnownStatusCodes.MalformedReceiptData, (KnownStatusCodes)receipt.Status); }
public void DeserializeResponse_Invalid_Bad_App_Password() { string json = GetVerifiedReceiptJson("Invalid_Bad_App_Password"); var receipt = AppleReceiptVerifier.DeserializeResponse(json); Assert.False(receipt.IsValid); Assert.Equal(KnownStatusCodes.BadAppPassword, (KnownStatusCodes)receipt.Status); }
public void Resolves_From_Multiple_Instances() { var services = new ServiceCollection(); services.AddAppleReceiptVerifier(c => c.AppSecret = "test_password_1", "name1"); services.AddAppleReceiptVerifier(c => c.AppSecret = "test_password_2", "name2"); var provider = services.BuildServiceProvider(); var resolver = provider.GetRequiredService <IAppleReceiptVerifierResolver>(); AppleReceiptVerifier verifier1 = (AppleReceiptVerifier)resolver.Resolve("name1"); AppleReceiptVerifier verifier2 = (AppleReceiptVerifier)resolver.Resolve("name2"); Assert.Equal("test_password_1", verifier1.Options.AppSecret); Assert.Equal("test_password_2", verifier2.Options.AppSecret); }
public void DeserializeResponse_Valid_Excluding_Old_Subscriptions() { string json = GetVerifiedReceiptJson("Valid_Production_Excluding_Old_Subscriptions"); var receipt = AppleReceiptVerifier.DeserializeResponse(json); Assert.Equal(KnownStatusCodes.Valid, (KnownStatusCodes)receipt.Status); Assert.True(receipt.IsValid); Assert.Single(receipt.LatestReceiptInfo !); var lastReceiptInfo = receipt.LatestReceiptInfo !.Single(); Assert.Equal("com.test.app.proYearly", lastReceiptInfo.ProductId); Assert.Equal(DateTimeOffset.FromUnixTimeMilliseconds(1592834224000), lastReceiptInfo.PurchaseDate); Assert.Equal(DateTimeOffset.FromUnixTimeMilliseconds(1592575025000), lastReceiptInfo.OriginalPurchaseDate); Assert.Equal(DateTimeOffset.FromUnixTimeMilliseconds(1624370224000), lastReceiptInfo.ExpiresDate); Assert.False(lastReceiptInfo.IsTrialPeriod); }