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.");
            }
        }
Beispiel #3
0
        // 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.
        }
Beispiel #4
0
        [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);
        }
Beispiel #5
0
        [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);
        }