public void UpgradeSubscription_ChargesProRatadAmount()
        {
            var subscriberHelper = new SubscriberHelper(TestConstants.TestSiteName, TestConstants.TestApiKey);

            var subscriber = new Subscriber
            {
                CustomerId = TestConstants.TestCustomerId,
                ScreenName = TestConstants.TestCustomerId,
                Email = "*****@*****.**"
            };
            var creditCard = new CreditCard
            {
                CardType = "visa",
                ExpirationMonth = 12,
                ExpirationYear = 2012,
                FirstName = "Tester",
                LastName = "Testing",
                Number = TestConstants.ValidCard,
                VerificationValue = "123"
            };

            subscriberHelper.SubscribeToSubscriptionPlanWithCreditCard(subscriber,
                                                                       TestConstants.MediumSubscriptionPlanId,
                                                                       creditCard);
            var upgradeInvoice = subscriberHelper.ChangeSubscriberFeatureLevelWithOnFilePayment(subscriber, TestConstants.HighSubscriptionPlanId);

            Assert.AreEqual(15, upgradeInvoice.Amount.Value);
        }
        public void UpgradeSubscriberThenDowngradeToFreePlan_ReturnsDowngradedSubscriber()
        {
            var custId = TestConstants.TestCustomerId;
            var sub = _subscribers.GetSubscriberByCustomerId(custId);
            var subscriber = sub.Entity;
            Assert.AreEqual(custId, subscriber.CustomerId);

            var planFactory = _factory.GetSubscriptionPlanClient();
            var invoiceFactory = _factory.GetInvoiceClient();

            var plans = planFactory.GetSubscriptionPlans();
            var freePlan = plans.Entity.SubscriptionPlans.FirstOrDefault(p => p.Id.Value == TestConstants.FreePlanSubscriptionPlanId);
            var paidPlan = plans.Entity.SubscriptionPlans.FirstOrDefault(p => p.Id.Value == TestConstants.MediumSubscriptionPlanId);

            Assert.NotNull(freePlan);
            Assert.NotNull(paidPlan);

            var creditCard = new CreditCard
                    {
                        CardType = "visa",
                        ExpirationMonth = 12,
                        ExpirationYear = 2012,
                        FirstName = "Tester",
                        LastName = "Testing",
                        Number = TestConstants.ValidCard,
                        VerificationValue = "123"
                    };

            var payment = new Payment
                  {
                      AccountType = "credit-card",
                      CreditCard = creditCard
                  };
            
            _subscribers.SubscribeSubscriberToFreeTrial(subscriber.CustomerId, freePlan);

            var invoiceResponse = invoiceFactory.CreateInvoice(new Invoice
            {
                SubscriptionPlanId = paidPlan.Id,
                Subscriber = subscriber
            });

            var invoice = invoiceResponse.Entity;

            Assert.NotNull(invoice);

            invoiceFactory.PayInvoice(invoice, payment);

            _subscribers.AllowSubscriberAnotherFreeTrial(subscriber.CustomerId);

            _subscribers.SubscribeSubscriberToFreeTrial(sub.Entity.CustomerId, freePlan);
        }
        public void CreateSubscription_WithHelper_ReturnsInvoice()
        {
            var subscriberHelper = new SubscriberHelper(TestConstants.TestSiteName, TestConstants.TestApiKey);
            var subscriber = new Subscriber
            {
                CustomerId = TestConstants.TestCustomerId,
                ScreenName = TestConstants.TestCustomerId,
                Email = "*****@*****.**"
            };
            var creditCard = new CreditCard
            {
                CardType = "visa",
                ExpirationMonth = 12,
                ExpirationYear = 2012,
                FirstName = "Tester",
                LastName = "Testing",
                Number = TestConstants.ValidCard,
                VerificationValue = "123"
            };

            var invoice = subscriberHelper.SubscribeToSubscriptionPlanWithCreditCard(subscriber, TestConstants.MediumSubscriptionPlanId, creditCard);

            Assert.NotNull(invoice);
        }
        public void DowngradeSubscription_GivesStoreCreditToSubscriber()
        {
            var subscriberHelper = new SubscriberHelper(TestConstants.TestSiteName, TestConstants.TestApiKey);
            var subscriber = new Subscriber
            {
                CustomerId = TestConstants.TestCustomerId,
                ScreenName = TestConstants.TestCustomerId,
                Email = "*****@*****.**"
            };
            var creditCard = new CreditCard
            {
                CardType = "visa",
                ExpirationMonth = 12,
                ExpirationYear = 2012,
                FirstName = "Tester",
                LastName = "Testing",
                Number = TestConstants.ValidCard,
                VerificationValue = "123"
            };

            subscriberHelper.SubscribeToSubscriptionPlanWithCreditCard(subscriber, TestConstants.HighSubscriptionPlanId, creditCard);
            subscriberHelper.ChangeSubscriberFeatureLevelWithOnFilePayment(subscriber, TestConstants.LowSubscriptionPlanId);
            var downgradedSubscriber = subscriberHelper.FetchSubscriber(subscriber.CustomerId);

            Assert.GreaterOrEqual(downgradedSubscriber.StoreCredit.Value, 0);
        }
        public void CreateSubscription_WithHelper_ForFreeSubscriptionPlan_ThrowsForbiddenActionException()
        {
            var subscriberHelper = new SubscriberHelper(TestConstants.TestSiteName, TestConstants.TestApiKey);
            var subscriber = new Subscriber
            {
                CustomerId = TestConstants.TestCustomerId,
                ScreenName = TestConstants.TestCustomerId,
                Email = "*****@*****.**"
            };
            var creditCard = new CreditCard
            {
                CardType = "visa",
                ExpirationMonth = 12,
                ExpirationYear = 2012,
                FirstName = "Tester",
                LastName = "Testing",
                Number = TestConstants.ValidCard,
                VerificationValue = "123"
            };

            var invoice = subscriberHelper.SubscribeToSubscriptionPlanWithCreditCard(subscriber, TestConstants.FreePlanSubscriptionPlanId, creditCard);
        }
        public void CreateSubscription_WithHelper_WhenGatewayTimesout_ThrowsPaymentGatewayTimeoutException()
        {
            var subscriberHelper = new SubscriberHelper(TestConstants.TestSiteName, TestConstants.TestApiKey);
            var subscriber = new Subscriber
            {
                CustomerId = TestConstants.TestCustomerId,
                ScreenName = TestConstants.TestCustomerId,
                Email = "*****@*****.**"
            };
            var creditCard = new CreditCard
            {
                CardType = "visa",
                ExpirationMonth = 12,
                ExpirationYear = 2012,
                FirstName = "Tester",
                LastName = "Testing",
                Number = TestConstants.GatewayUnavailableCard,
                VerificationValue = "123"
            };

            var invoice = subscriberHelper.SubscribeToSubscriptionPlanWithCreditCard(subscriber, TestConstants.MediumSubscriptionPlanId, creditCard);
        }