Exemplo n.º 1
0
 def test_yearly_schedule_with_interval(self):
     with freeze_time('2013-08-18'):
         now = utc_now()
         self.assert_schedule(started_at=now,
                              frequency=self.plan_model.frequencies.YEARLY,
                              interval=2,
                              length=3,
                              expected=[
                                  utc_datetime(2013, 8, 18),
                                  utc_datetime(2015, 8, 18),
                                  utc_datetime(2017, 8, 18),
                              ])
Exemplo n.º 2
0
 def test_yearly_schedule_with_interval(self):
     with freeze_time('2013-08-18'):
         now = utc_now()
         self.assert_schedule(
             started_at=now,
             frequency=self.plan_model.frequencies.YEARLY,
             interval=2,
             length=3,
             expected=[
                 utc_datetime(2013, 8, 18),
                 utc_datetime(2015, 8, 18),
                 utc_datetime(2017, 8, 18),
             ])
Exemplo n.º 3
0
 def test_daily_schedule_with_interval(self):
     with freeze_time('2013-07-28'):
         now = utc_now()
         self.assert_schedule(started_at=now,
                              frequency=self.plan_model.frequencies.DAILY,
                              interval=3,
                              length=4,
                              expected=[
                                  utc_datetime(2013, 7, 28),
                                  utc_datetime(2013, 7, 31),
                                  utc_datetime(2013, 8, 3),
                                  utc_datetime(2013, 8, 6),
                              ])
Exemplo n.º 4
0
 def test_monthly_schedule_with_interval(self):
     with freeze_time('2013-08-18'):
         now = utc_now()
         self.assert_schedule(started_at=now,
                              frequency=self.plan_model.frequencies.MONTHLY,
                              interval=6,
                              length=4,
                              expected=[
                                  utc_datetime(2013, 8, 18),
                                  utc_datetime(2014, 2, 18),
                                  utc_datetime(2014, 8, 18),
                                  utc_datetime(2015, 2, 18),
                              ])
Exemplo n.º 5
0
 def test_yearly_schedule_with_leap_year(self):
     with freeze_time('2012-02-29'):
         now = utc_now()
         self.assert_schedule(started_at=now,
                              frequency=self.plan_model.frequencies.YEARLY,
                              interval=1,
                              length=5,
                              expected=[
                                  utc_datetime(2012, 2, 29),
                                  utc_datetime(2013, 2, 28),
                                  utc_datetime(2014, 2, 28),
                                  utc_datetime(2015, 2, 28),
                                  utc_datetime(2016, 2, 29),
                              ])
Exemplo n.º 6
0
 def test_weekly_schedule(self):
     with freeze_time('2013-08-18'):
         now = utc_now()
         self.assert_schedule(started_at=now,
                              frequency=self.plan_model.frequencies.WEEKLY,
                              interval=1,
                              length=5,
                              expected=[
                                  utc_datetime(2013, 8, 18),
                                  utc_datetime(2013, 8, 25),
                                  utc_datetime(2013, 9, 1),
                                  utc_datetime(2013, 9, 8),
                                  utc_datetime(2013, 9, 15),
                              ])
Exemplo n.º 7
0
 def test_daily_schedule_with_interval(self):
     with freeze_time('2013-07-28'):
         now = utc_now()
         self.assert_schedule(
             started_at=now,
             frequency=self.plan_model.frequencies.DAILY,
             interval=3,
             length=4,
             expected=[
                 utc_datetime(2013, 7, 28),
                 utc_datetime(2013, 7, 31),
                 utc_datetime(2013, 8, 3),
                 utc_datetime(2013, 8, 6),
             ]
         )
Exemplo n.º 8
0
 def test_monthly_schedule_with_interval(self):
     with freeze_time('2013-08-18'):
         now = utc_now()
         self.assert_schedule(
             started_at=now,
             frequency=self.plan_model.frequencies.MONTHLY,
             interval=6,
             length=4,
             expected=[
                 utc_datetime(2013, 8, 18),
                 utc_datetime(2014, 2, 18),
                 utc_datetime(2014, 8, 18),
                 utc_datetime(2015, 2, 18),
             ]
         )
Exemplo n.º 9
0
 def test_yearly_schedule_with_leap_year(self):
     with freeze_time('2012-02-29'):
         now = utc_now()
         self.assert_schedule(
             started_at=now,
             frequency=self.plan_model.frequencies.YEARLY,
             interval=1,
             length=5,
             expected=[
                 utc_datetime(2012, 2, 29),
                 utc_datetime(2013, 2, 28),
                 utc_datetime(2014, 2, 28),
                 utc_datetime(2015, 2, 28),
                 utc_datetime(2016, 2, 29),
             ]
         )
Exemplo n.º 10
0
 def test_weekly_schedule(self):
     with freeze_time('2013-08-18'):
         now = utc_now()
         self.assert_schedule(
             started_at=now,
             frequency=self.plan_model.frequencies.WEEKLY,
             interval=1,
             length=5,
             expected=[
                 utc_datetime(2013, 8, 18),
                 utc_datetime(2013, 8, 25),
                 utc_datetime(2013, 9, 1),
                 utc_datetime(2013, 9, 8),
                 utc_datetime(2013, 9, 15),
             ]
         )
Exemplo n.º 11
0
    def test_create_subscription_with_started_at(self):
        amount = 5566
        now = utc_now()
        now_iso = now.isoformat()
        # next week
        next_invoice_at = utc_datetime(2013, 8, 17)
        next_iso = next_invoice_at.isoformat()

        res = self.testapp.post(
            '/v1/subscriptions',
            dict(
                customer_guid=self.customer.guid,
                plan_guid=self.plan.guid,
                amount=amount,
                started_at='2013-08-17T00:00:00Z',
            ),
            extra_environ=dict(REMOTE_USER=self.api_key),
            status=200,
        )
        self.failUnless('guid' in res.json)
        self.assertEqual(res.json['created_at'], now_iso)
        self.assertEqual(res.json['updated_at'], now_iso)
        self.assertEqual(res.json['next_invoice_at'], next_iso)
        self.assertEqual(res.json['invoice_count'], 0)
        self.assertEqual(res.json['amount'], amount)
        self.assertEqual(res.json['customer_guid'], self.customer.guid)
        self.assertEqual(res.json['plan_guid'], self.plan.guid)
Exemplo n.º 12
0
    def test_create_subscription_with_started_at(self):
        amount = 5566
        now = utc_now()
        now_iso = now.isoformat()
        # next week
        next_invoice_at = utc_datetime(2013, 8, 17)
        next_iso = next_invoice_at.isoformat()

        res = self.testapp.post(
            '/v1/subscriptions',
            dict(
                customer_guid=self.customer.guid,
                plan_guid=self.plan.guid,
                amount=amount,
                started_at='2013-08-17T00:00:00Z',
            ),
            extra_environ=dict(REMOTE_USER=self.api_key),
            status=200,
        )
        self.failUnless('guid' in res.json)
        self.assertEqual(res.json['created_at'], now_iso)
        self.assertEqual(res.json['updated_at'], now_iso)
        self.assertEqual(res.json['next_invoice_at'], next_iso)
        self.assertEqual(res.json['invoice_count'], 0)
        self.assertEqual(res.json['amount'], amount)
        self.assertEqual(res.json['customer_guid'], self.customer.guid)
        self.assertEqual(res.json['plan_guid'], self.plan.guid)
Exemplo n.º 13
0
    def test_create_subscription(self, debit_method):
        amount = 5566
        funding_instrument_uri = 'MOCK_CARD_URI'
        appears_on_statement_as = 'hello baby'
        now = utc_now()
        now_iso = now.isoformat()
        # next week
        next_invoice_at = utc_datetime(2013, 8, 23)
        next_iso = next_invoice_at.isoformat()
        debit_method.return_value = dict(
            processor_uri='MOCK_DEBIT_URI',
            status=self.transaction_model.statuses.SUCCEEDED,
        )

        res = self.testapp.post(
            '/v1/subscriptions',
            dict(
                customer_guid=self.customer.guid,
                plan_guid=self.plan.guid,
                amount=amount,
                funding_instrument_uri=funding_instrument_uri,
                appears_on_statement_as=appears_on_statement_as,
            ),
            extra_environ=dict(REMOTE_USER=self.api_key),
            status=200,
        )

        self.failUnless('guid' in res.json)
        self.assertEqual(res.json['created_at'], now_iso)
        self.assertEqual(res.json['updated_at'], now_iso)
        self.assertEqual(res.json['canceled_at'], None)
        self.assertEqual(res.json['next_invoice_at'], next_iso)
        self.assertEqual(res.json['invoice_count'], 1)
        self.assertEqual(res.json['amount'], amount)
        self.assertEqual(res.json['effective_amount'], amount)
        self.assertEqual(res.json['customer_guid'], self.customer.guid)
        self.assertEqual(res.json['plan_guid'], self.plan.guid)
        self.assertEqual(res.json['funding_instrument_uri'],
                         funding_instrument_uri)
        self.assertEqual(res.json['appears_on_statement_as'],
                         appears_on_statement_as)
        self.assertEqual(res.json['canceled'], False)

        subscription = self.subscription_model.get(res.json['guid'])
        self.assertEqual(subscription.invoice_count, 1)

        invoice = subscription.invoices[0]
        self.assertEqual(len(invoice.transactions), 1)
        self.assertEqual(invoice.amount, amount)
        self.assertEqual(invoice.scheduled_at, now)
        self.assertEqual(invoice.transaction_type,
                         self.invoice_model.transaction_types.DEBIT)
        self.assertEqual(invoice.invoice_type,
                         self.invoice_model.types.SUBSCRIPTION)
        self.assertEqual(invoice.appears_on_statement_as,
                         appears_on_statement_as)

        transaction = invoice.transactions[0]
        debit_method.assert_called_once_with(transaction)
        self.assertEqual(transaction.processor_uri, 'MOCK_DEBIT_URI')
        self.assertEqual(transaction.submit_status,
                         self.transaction_model.submit_statuses.DONE)
        self.assertEqual(transaction.appears_on_statement_as,
                         subscription.appears_on_statement_as)
        self.assertEqual(transaction.amount, amount)
        self.assertEqual(transaction.transaction_type,
                         self.transaction_model.types.DEBIT)
Exemplo n.º 14
0
    def test_daily_schedule_with_end_of_month(self):
        def assert_next_day(now_dt, expected):
            with freeze_time(now_dt):
                now = utc_now()
                next_dt = next_transaction_datetime(
                    started_at=now,
                    frequency=self.plan_model.frequencies.DAILY,
                    period=1,
                )
                self.assertEqual(next_dt, expected)

        assert_next_day('2013-01-31', utc_datetime(2013, 2, 1))
        assert_next_day('2013-02-28', utc_datetime(2013, 3, 1))
        assert_next_day('2013-03-31', utc_datetime(2013, 4, 1))
        assert_next_day('2013-04-30', utc_datetime(2013, 5, 1))
        assert_next_day('2013-05-31', utc_datetime(2013, 6, 1))
        assert_next_day('2013-06-30', utc_datetime(2013, 7, 1))
        assert_next_day('2013-07-31', utc_datetime(2013, 8, 1))
        assert_next_day('2013-08-31', utc_datetime(2013, 9, 1))
        assert_next_day('2013-09-30', utc_datetime(2013, 10, 1))
        assert_next_day('2013-10-31', utc_datetime(2013, 11, 1))
        assert_next_day('2013-11-30', utc_datetime(2013, 12, 1))
        assert_next_day('2013-12-31', utc_datetime(2014, 1, 1))
Exemplo n.º 15
0
    def test_monthly_schedule_with_end_of_month(self):
        with freeze_time('2013-08-31'):
            now = utc_now()
            self.assert_schedule(
                started_at=now,
                frequency=self.plan_model.frequencies.MONTHLY,
                interval=1,
                length=7,
                expected=[
                    utc_datetime(2013, 8, 31),
                    utc_datetime(2013, 9, 30),
                    utc_datetime(2013, 10, 31),
                    utc_datetime(2013, 11, 30),
                    utc_datetime(2013, 12, 31),
                    utc_datetime(2014, 1, 31),
                    utc_datetime(2014, 2, 28),
                ]
            )

        with freeze_time('2013-11-30'):
            now = utc_now()
            self.assert_schedule(
                started_at=now,
                frequency=self.plan_model.frequencies.MONTHLY,
                interval=1,
                length=6,
                expected=[
                    utc_datetime(2013, 11, 30),
                    utc_datetime(2013, 12, 30),
                    utc_datetime(2014, 1, 30),
                    utc_datetime(2014, 2, 28),
                    utc_datetime(2014, 3, 30),
                    utc_datetime(2014, 4, 30),
                ]
            )
Exemplo n.º 16
0
    def test_daily_schedule_with_end_of_month(self):
        def assert_next_day(now_dt, expected):
            with freeze_time(now_dt):
                now = utc_now()
                next_dt = next_transaction_datetime(
                    started_at=now,
                    frequency=self.plan_model.frequencies.DAILY,
                    period=1,
                )
                self.assertEqual(next_dt, expected)

        assert_next_day('2013-01-31', utc_datetime(2013, 2, 1))
        assert_next_day('2013-02-28', utc_datetime(2013, 3, 1))
        assert_next_day('2013-03-31', utc_datetime(2013, 4, 1))
        assert_next_day('2013-04-30', utc_datetime(2013, 5, 1))
        assert_next_day('2013-05-31', utc_datetime(2013, 6, 1))
        assert_next_day('2013-06-30', utc_datetime(2013, 7, 1))
        assert_next_day('2013-07-31', utc_datetime(2013, 8, 1))
        assert_next_day('2013-08-31', utc_datetime(2013, 9, 1))
        assert_next_day('2013-09-30', utc_datetime(2013, 10, 1))
        assert_next_day('2013-10-31', utc_datetime(2013, 11, 1))
        assert_next_day('2013-11-30', utc_datetime(2013, 12, 1))
        assert_next_day('2013-12-31', utc_datetime(2014, 1, 1))
Exemplo n.º 17
0
    def test_create_subscription(self, debit_method):
        amount = 5566
        funding_instrument_uri = 'MOCK_CARD_URI'
        appears_on_statement_as = 'hello baby'
        now = utc_now()
        now_iso = now.isoformat()
        # next week
        next_invoice_at = utc_datetime(2013, 8, 23)
        next_iso = next_invoice_at.isoformat()
        debit_method.return_value = dict(
            processor_uri='MOCK_DEBIT_URI',
            status=self.transaction_model.statuses.SUCCEEDED,
        )

        res = self.testapp.post(
            '/v1/subscriptions',
            dict(
                customer_guid=self.customer.guid,
                plan_guid=self.plan.guid,
                amount=amount,
                funding_instrument_uri=funding_instrument_uri,
                appears_on_statement_as=appears_on_statement_as,
            ),
            extra_environ=dict(REMOTE_USER=self.api_key),
            status=200,
        )
       
        self.failUnless('guid' in res.json)
        self.assertEqual(res.json['created_at'], now_iso)
        self.assertEqual(res.json['updated_at'], now_iso)
        self.assertEqual(res.json['canceled_at'], None)
        self.assertEqual(res.json['next_invoice_at'], next_iso)
        self.assertEqual(res.json['invoice_count'], 1)
        self.assertEqual(res.json['amount'], amount)
        self.assertEqual(res.json['effective_amount'], amount)
        self.assertEqual(res.json['customer_guid'], self.customer.guid)
        self.assertEqual(res.json['plan_guid'], self.plan.guid)
        self.assertEqual(res.json['funding_instrument_uri'], funding_instrument_uri)
        self.assertEqual(res.json['appears_on_statement_as'],
                         appears_on_statement_as)
        self.assertEqual(res.json['canceled'], False)

        subscription = self.subscription_model.get(res.json['guid'])
        self.assertEqual(subscription.invoice_count, 1)

        invoice = subscription.invoices[0]
        self.assertEqual(len(invoice.transactions), 1)
        self.assertEqual(invoice.amount, amount)
        self.assertEqual(invoice.scheduled_at, now)
        self.assertEqual(invoice.transaction_type,
                         self.invoice_model.transaction_types.DEBIT)
        self.assertEqual(invoice.invoice_type,
                         self.invoice_model.types.SUBSCRIPTION)
        self.assertEqual(invoice.appears_on_statement_as,
                         appears_on_statement_as)

        transaction = invoice.transactions[0]
        debit_method.assert_called_once_with(transaction)
        self.assertEqual(transaction.processor_uri,
                         'MOCK_DEBIT_URI')
        self.assertEqual(transaction.submit_status, self.transaction_model.submit_statuses.DONE)
        self.assertEqual(transaction.appears_on_statement_as,
                         subscription.appears_on_statement_as)
        self.assertEqual(transaction.amount, amount)
        self.assertEqual(transaction.transaction_type,
                         self.transaction_model.types.DEBIT)
Exemplo n.º 18
0
    def test_monthly_schedule_with_end_of_month(self):
        with freeze_time('2013-08-31'):
            now = utc_now()
            self.assert_schedule(started_at=now,
                                 frequency=self.plan_model.frequencies.MONTHLY,
                                 interval=1,
                                 length=7,
                                 expected=[
                                     utc_datetime(2013, 8, 31),
                                     utc_datetime(2013, 9, 30),
                                     utc_datetime(2013, 10, 31),
                                     utc_datetime(2013, 11, 30),
                                     utc_datetime(2013, 12, 31),
                                     utc_datetime(2014, 1, 31),
                                     utc_datetime(2014, 2, 28),
                                 ])

        with freeze_time('2013-11-30'):
            now = utc_now()
            self.assert_schedule(started_at=now,
                                 frequency=self.plan_model.frequencies.MONTHLY,
                                 interval=1,
                                 length=6,
                                 expected=[
                                     utc_datetime(2013, 11, 30),
                                     utc_datetime(2013, 12, 30),
                                     utc_datetime(2014, 1, 30),
                                     utc_datetime(2014, 2, 28),
                                     utc_datetime(2014, 3, 30),
                                     utc_datetime(2014, 4, 30),
                                 ])