public void CreateCreditCardShouldSucceed() { const string expectedRequestUrl = "https://sandbox.thelevelup.com/v15/credit_cards"; // The below strings can be arbitrary for the purposes of this test -- These are just the examples from the api docs. const string encrypted_cvv = "$bt4|javascript_1_3_9$Zar7J1+0QNsrHtKFufeJ8UCpSd5RM1PwTjzNE1Dm1N0A969OuWfU03..."; const string encrypted_expiration_month = "$bt4|javascript_1_3_9$7ad9aydahduiw+89w7dHusaihdas..."; const string encrypted_expiration_year = "$bt4|javascript_1_3_9$9asdjaIjashuUHsj+saiUSj..."; const string encrypted_number = "$bt4|javascript_1_3_9$FyreT+o2W/9VHHjS43ZJJe2SmdvTBcve58..."; const string postal_code = "12345"; string expectedRequestbody = string.Format( "{{" + "\"credit_card\": {{" + "\"encrypted_cvv\": \"{0}\"," + "\"encrypted_expiration_month\": \"{1}\"," + "\"encrypted_expiration_year\": \"{2}\"," + "\"encrypted_number\": \"{3}\"," + "\"postal_code\": \"{4}\" " + "}}" + "}}", encrypted_cvv, encrypted_expiration_month, encrypted_expiration_year, encrypted_number, postal_code); RestResponse expectedResponse = new RestResponse { StatusCode = HttpStatusCode.OK, Content = "{" + "\"credit_card\": {" + "\"bin\": \"123456\"," + "\"description\": \"JCB ending in 1234\"," + "\"expiration_month\": 7," + "\"expiration_year\": 2015," + "\"id\": 305999," + "\"last_4\": \"1234\"," + "\"promoted\": true," + "\"state\": \"active\"," + "\"type\": \"JCB\"" + "}" + "}" }; const string accessToken = "abc"; ICreateCreditCards client = ClientModuleUnitTestingUtilities.GetMockedLevelUpModule <ICreateCreditCards, CreateCreditCardRequest>( expectedResponse, expectedRequestbody, expectedAccessToken: accessToken, expectedRequestUrl: expectedRequestUrl); var card = client.CreateCreditCard(accessToken, encrypted_number, encrypted_expiration_month, encrypted_expiration_year, encrypted_cvv, postal_code); Assert.AreEqual(card.Bin, "123456"); Assert.AreEqual(card.Description, "JCB ending in 1234"); Assert.AreEqual(card.ExpirationMonth, 7); Assert.AreEqual(card.ExpirationYear, 2015); Assert.AreEqual(card.Id, 305999); Assert.AreEqual(card.Last4Numbers, "1234"); Assert.AreEqual(card.Promoted, true); Assert.AreEqual(card.State, "active"); Assert.AreEqual(card.Type, "JCB"); }
public void CreateCreditCardShouldFailForInvalidCardDetails() { RestResponse expectedResponse = new RestResponse { StatusCode = (HttpStatusCode)422, Content = "[{\"error\":{\"object\":\"credit_card\",\"property\":\"expiration_year\",\"message\":\"Expiration year is invalid.\"}}]" }; try { ICreateCreditCards client = ClientModuleUnitTestingUtilities.GetMockedLevelUpModule <ICreateCreditCards>(expectedResponse); var card = client.CreateCreditCard("abc", new CreateCreditCardRequestBody("we", "aren't", "checking", "these", "params")); Assert.IsTrue(false, "Failed to throw a LevelUpApiException for invalid card data (422 response code)"); } catch (LevelUpApiException ex) { Assert.AreEqual((int)ex.StatusCode, 422); Assert.AreEqual(ex.Message.Trim(), "Expiration year is invalid."); } }
// Braintree enforces a 50-cards-per-user restriction, so we can't keep adding/removing cards for the test user. public void CreateCreditCards() { ICreateCreditCards createInterface = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <ICreateCreditCards>(); IDestroyCreditCards destroyInterface = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IDestroyCreditCards>(); IQueryCreditCards queryInterface = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IQueryCreditCards>(); CreditCard created = createInterface.CreateCreditCard(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken, ClientModuleIntegrationTestingUtilities.SandboxIntegrationTestCreditCard); List <CreditCard> creditCards = new List <CreditCard>(queryInterface.ListCreditCards(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken)); Assert.AreEqual(creditCards.FindAll(x => x.Id == created.Id).Count, 1); destroyInterface.DeleteCreditCard(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken, created.Id); creditCards = new List <CreditCard> (queryInterface.ListCreditCards(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken)); Assert.AreEqual(creditCards.FindAll(x => x.Id == created.Id).Count, 0); // Note: The card won't actually be deleted in the cleanup for this test, just deactivated. AFAIK cards cannot be deleted via // the api, and they just languish in a deactivated state. As a result, the sandbox merchant account that is used for integration // tests may wind up with a bunch of old credit card entries. }
[Test] // Braintree enforces a 50-cards-per-user restriction, so we can't keep adding/removing cards for the test user. public void DestroyCard() { IQueryCreditCards queryClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IQueryCreditCards>(); IDestroyCreditCards destroyClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IDestroyCreditCards>(); ICreateCreditCards createClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <ICreateCreditCards>(); var toCreate = createClient.CreateCreditCard(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken, ClientModuleIntegrationTestingUtilities.SandboxIntegrationTestCreditCard); var cards = queryClient.ListCreditCards(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken); Assert.AreEqual(cards.Count, 1); Assert.AreEqual(cards[0].Active, true); Assert.AreEqual(cards[0].Id, toCreate.Id); destroyClient.DeleteCreditCard(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken, toCreate.Id); cards = queryClient.ListCreditCards(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken); Assert.AreEqual(cards.Count, 0); createClient.CreateCreditCard(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken, ClientModuleIntegrationTestingUtilities.SandboxIntegrationTestCreditCard); }
[Test] // Braintree enforces a 50-cards-per-user restriction, so we can't keep adding/removing cards for the // test user. This test requires adding/removing cards. public void QueryCreditCards() { IQueryCreditCards queryInterface = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IQueryCreditCards>(); ICreateCreditCards createInterface = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <ICreateCreditCards>(); IDestroyCreditCards destroyInterface = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IDestroyCreditCards>(); var existingCards = queryInterface.ListCreditCards(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken); foreach (var card in existingCards) { destroyInterface.DeleteCreditCard(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken, card.Id); } Assert.AreEqual(queryInterface.ListCreditCards(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken).Count, 0); createInterface.CreateCreditCard(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken, ClientModuleIntegrationTestingUtilities.SandboxIntegrationTestCreditCard); var newCards = queryInterface.ListCreditCards(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpUserAccessToken); Assert.AreEqual(newCards.Count, 1); Assert.AreEqual(newCards[0].State.ToLower(), "active"); Assert.AreEqual(newCards[0].Promoted, true); }