Пример #1
0
    def test_league_cascade_deletes(self):
        league = LeagueFactory()
        event = self.event_factory(league=league)

        league.delete()

        with self.assertRaises(RegistrationEvent.DoesNotExist):
            event_shouldnt_exist = RegistrationEvent.objects.get(pk=event.pk)
Пример #2
0
    def test_billing_group_amounts_and_label(self):
        league = LeagueFactory()
        bg = BillingGroupFactory(league=league)
        field_name = 'billinggroup{}'.format(bg.pk)

        form_data = {
            'name': 'Test Form',
            'start_date': '2012-01-01',
            'end_date': '2012-03-31',
        }

        # Check that label is set correctly
        form = RegistrationAdminEventForm(data=form_data, league=league)
        self.assertEqual(form[field_name].label,
                         "{} Invoice Amount".format(bg.name))

        # Negative numbers should not be accepted
        form_data[field_name] = -99.99
        form = RegistrationAdminEventForm(data=form_data, league=league)
        self.assertFalse(
            form.is_valid(),
            "BillingGroup in  RegistrationAdminEventForm should not be negative"
        )

        # Large numbers should not be accepted
        form_data[field_name] = 100000000000.0
        form = RegistrationAdminEventForm(data=form_data, league=league)
        self.assertFalse(
            form.is_valid(),
            "BillingGroup in  RegistrationAdminEventForm should not be negative"
        )
Пример #3
0
 def test_registration_admin_form_no_data(self):
     league = LeagueFactory()
     # No data, should fail.
     form_data = {}
     form = RegistrationAdminEventForm(data=form_data, league=league)
     self.assertFalse(form.is_valid(),
                      "Form should not be valid with no data.")
Пример #4
0
    def test_billing_group_league_filter(self):
        league1 = LeagueFactory()
        league2 = LeagueFactory()

        bg1 = BillingGroupFactory(league=league1)
        bg2 = BillingGroupFactory(league=league2)

        form = EventInviteEmailForm(league=league1)

        # First billing group should be included in form
        self.assertTrue(
            any(bg1.pk == c.data['value'] for c in form['billing_group']))

        # Second billing group should NOT be included
        self.assertFalse(
            any(bg2.pk == c.data['value'] for c in form['billing_group']))
Пример #5
0
 def test_slug_unique_same_league(self):
     league = LeagueFactory()
     event1 = self.event_factory(name="Testing Slugfest Duplicate",
                                 league=league)
     with self.assertRaises(IntegrityError):
         event2 = self.event_factory(name="Testing Slugfest Duplicate",
                                     league=league)
Пример #6
0
    def test_all_fields(self):
        event = RegistrationEvent(
            name="All Fields Test",
            league=LeagueFactory(),
            description="Description of event here",
            start_date="2010-01-01",
            end_date="2010-12-31",
            public_registration_open_date=get_aware_datetime(
                "2009-12-01 00:00:00"),
            public_registration_closes_date=get_aware_datetime(
                "2009-12-31 23:59:59"),
            invite_expiration_date=get_aware_datetime("2009-12-31 23:59:59"),
            minimum_registration_age=18,
            maximum_registration_age=25,
        )
        event.full_clean()
        event.save()

        self.assertEqual(event.name, "All Fields Test")
        self.assertEqual(event.slug, "all-fields-test")
        self.assertEqual(event.description, "Description of event here")
        self.assertEqual(event.start_date, date(2010, 1, 1))
        self.assertEqual(event.end_date, date(2010, 12, 31))
        self.assertEqual(event.public_registration_open_date,
                         get_aware_datetime("2009-12-01 00:00:00"))
        self.assertEqual(event.public_registration_closes_date,
                         get_aware_datetime("2009-12-31 23:59:59"))
        self.assertEqual(event.invite_expiration_date,
                         get_aware_datetime("2009-12-31 23:59:59"))
        self.assertEqual(event.minimum_registration_age, 18)
        self.assertEqual(event.maximum_registration_age, 25)
Пример #7
0
    def test_save_no_commit(self):
        league = LeagueFactory()
        form = self.form(data=form_data)

        # commit=False should not save the user
        user = form.save(league=league, commit=False)
        self.assertFalse(user.pk)
Пример #8
0
    def setUp(self):
        super().setUp()
        self.league = LeagueFactory()
        self.league.stripe_private_key = settings.STRIPE_TEST_SECRET
        self.league.stripe_public_key = settings.STRIPE_TEST_PUBLIC
        self.league.save()

        self.group = BillingGroupFactory(league=self.league)
        self.group.default_group_for_league = True
        self.group.save()

        self.event = RegistrationEventFactory(
            league=self.league,
            start_date=date(2018, 3, 1),
            end_date=date(2018, 6, 30),
        )
        self.billing_periods = self.event.create_monthly_billing_periods()
Пример #9
0
 def setUp(self):
     super().setUp()
     try:
         self.league
         self.organization
     except AttributeError:
         self.league = LeagueFactory()
         self.organization = self.league.organization
Пример #10
0
 def test_password_validator_works(self):
     # try with a short password, validator should throw ValidationError
     league = LeagueFactory()
     form = self.form(data={
         'email': '*****@*****.**',
         'password1': 'test',
         'password2': 'test',
     })
     self.assertFalse(form.is_valid())
Пример #11
0
    def test_legal_docs_league_Filter(self):
        league1 = LeagueFactory()
        league2 = LeagueFactory()

        legal_form1 = LegalDocumentFactory(league=league1)
        legal_form2 = LegalDocumentFactory(league=league2)

        form = RegistrationAdminEventForm(league=league1)

        # Legal form 1 should be included in form generated for league 1
        self.assertTrue(
            any(legal_form1.pk == c[0]
                for c in form.fields['legal_forms'].choices))

        # LEgal form 2 should NOT be included
        self.assertFalse(
            any(legal_form2.pk == c[0]
                for c in form.fields['legal_forms'].choices))
Пример #12
0
    def test_legal_document_agree_form_generates_correct_documents(self):
        # Ensure that we are filtering for other leagues documents
        # and only showing the ones applicable to this league.
        other_league = LeagueFactory()
        other_event = RegistrationEventFactory(league=other_league)
        other_leagues_documents = LegalDocumentFactory(league=other_league)

        form = self.form(event=self.event)
        self.assertEqual(len(form.fields), len(self.legal_documents))
Пример #13
0
    def test_save_commit(self):
        league = LeagueFactory()
        form = self.form(data=form_data)

        # commit=True should save this by default
        user = form.save(league=league)
        self.assertTrue(user.pk)

        self.assertEqual(user.league, league)
        self.assertEqual(user.organization, league.organization)
Пример #14
0
 def test_registration_admin_form_minimum_data(self):
     league = LeagueFactory()
     # Minimum data, should validate.
     form_data = {
         'name': 'Test Form',
         'start_date': '2012-01-01',
         'end_date': '2012-03-31',
     }
     form = RegistrationAdminEventForm(data=form_data, league=league)
     self.assertTrue(form.is_valid(),
                     "Form should be valid with minimum data.")
Пример #15
0
    def test_billing_groups_league_filter(self):
        league1 = LeagueFactory()
        league2 = LeagueFactory()

        bg1 = BillingGroupFactory(league=league1)
        bg2 = BillingGroupFactory(league=league2)

        # Use an unbound form for this
        form = RegistrationAdminEventForm(league=league1)

        # Key for billing group should not be set
        self.assertRaises(KeyError,
                          lambda: form['billinggroup{}'.format(bg2.pk)])

        # The first billing group should be set and the initial value set
        try:
            self.assertEqual(form['billinggroup{}'.format(bg1.pk)].value(),
                             bg1.invoice_amount)
        except KeyError:
            self.fail("Billing Group should have been set for this league.")
Пример #16
0
    def test_unique_together(self):
        league2 = LeagueFactory()

        group1 = BillingGroupFactory(name="Taco Tuesday", league=self.league)
        group2 = BillingGroupFactory(name="Taco Tuesday", league=league2)

        self.assertNotEqual(group1.league, group2.league)
        self.assertTrue(group1.default_group_for_league)
        self.assertTrue(group2.default_group_for_league)

        with self.assertRaises(IntegrityError):
            BillingGroupFactory(name="Taco Tuesday", league=league2)

        group1.delete()
        group2.delete()
Пример #17
0
    def test_default_billing_group_league_selected(self):
        # Test that if a league has a default billing group set it is selected here
        league = LeagueFactory()

        bg1 = BillingGroupFactory(league=league)
        bg2 = BillingGroupFactory(league=league)
        bg3 = BillingGroupFactory(league=league)

        bg2.default_group_for_league = True
        bg2.save()

        default = BillingGroup.objects.filter(
            league=league, default_group_for_league=True).get()

        # Default group should be selected on the form.
        form = EventInviteEmailForm(league=league)
        self.assertTrue(
            any(bg2.pk == c.data['value'] and c.data['selected']
                for c in form['billing_group']))

        # Introduce some chaos. Change the league to no longer have a default.
        # Temporarily disable signals so we can set the league to not have a default.
        default.default_group_for_league = False
        kwargs = {
            'signal': pre_save,
            'receiver': update_default_billing_group_for_league,
            'sender': BillingGroup,
        }
        with temp_disconnect_signal(**kwargs):
            default.save()

        # There should no longer be a default group set.
        with self.assertRaises(BillingGroup.DoesNotExist):
            BillingGroup.objects.filter(league=league,
                                        default_group_for_league=True).get()

        # Try to create the form with no default group set.
        form = EventInviteEmailForm(league=league)

        # Nothing should be marked as selected.
        self.assertFalse(
            any(bg1.pk == c.data['value'] and c.data['selected']
                for c in form['billing_group']))
        self.assertFalse(
            any(bg2.pk == c.data['value'] and c.data['selected']
                for c in form['billing_group']))
Пример #18
0
    def test_required_fields(self):
        # Check that required fields are checked.
        event = RegistrationEvent()

        with self.assertRaises(ValidationError):
            event.full_clean()

        event.name = "Test Event"
        with self.assertRaises(ValidationError):
            event.full_clean()

        event.league = LeagueFactory()
        with self.assertRaises(ValidationError):
            event.full_clean()

        event.start_date = "2010-01-01"
        event.end_date = "2010-12-31"

        event.full_clean()
        event.save()
Пример #19
0
    def test_registration_admin_form_minimum_data(self):
        league = LeagueFactory()
        legal_forms_ids = []
        for c in range(1, 3):
            legal_form = LegalDocumentFactory(league=league)
            legal_forms_ids.append(legal_form.pk)

        billing_groups = []
        for bg in range(1, 5):
            billing_groups.append(BillingGroupFactory(league=league))

        # Maximum arguments, all of them, everything and then more.
        form_data = {
            'name': 'Test Form',
            'start_date': '2012-01-01',
            'end_date': '2012-03-31',
            'description': 'Test Description of this event',
            'public_registration_open_date': '2011-12-01',
            'public_registration_closes_date': '2011-12-31',
            'invite_expiration_date': '2011-12-31',
            'minimum_registration_age': 18,
            'maximum_registration_age': 25,
            'automatic_billing_dates': 'monthly',
            # Legal forms
            'legal_forms': legal_forms_ids,
            # Billing Status billing amounts
        }
        for billing_group in billing_groups:
            form_data['billinggroup{}'.format(
                billing_group.pk)] = billing_group.invoice_amount

        form = RegistrationAdminEventForm(data=form_data, league=league)
        self.assertTrue(
            form.is_valid(),
            "RegistrationAdminEventForm should be valid with all data submitted."
        )
Пример #20
0
class TestAutomaticBilling(TransactionTestCase):
    def setUp(self):
        super().setUp()
        self.league = LeagueFactory()
        self.league.stripe_private_key = settings.STRIPE_TEST_SECRET
        self.league.stripe_public_key = settings.STRIPE_TEST_PUBLIC
        self.league.save()

        self.group = BillingGroupFactory(league=self.league)
        self.group.default_group_for_league = True
        self.group.save()

        self.event = RegistrationEventFactory(
            league=self.league,
            start_date=date(2018, 3, 1),
            end_date=date(2018, 6, 30),
        )
        self.billing_periods = self.event.create_monthly_billing_periods()

    def tearDown(self):
        #self.event.delete()
        #self.group.delete()
        #self.league.delete()
        super().tearDown()

    def get_registration_data(self, user):
        registration_data_obj = RegistrationDataFactory(
            invite=None,
            user=user,
            event=self.event,
            organization=self.league.organization,
        )
        registration_data = copy_model_to_dict(registration_data_obj)
        registration_data_obj.delete()

        registration_data['birth_month'] = 11
        registration_data['birth_day'] = 3
        registration_data['birth_year'] = 1987
        registration_data['legal_agree'] = 'checked'
        registration_data['stripe_token'] = 'tok_visa'
        return registration_data

    def test_automatic_invoicing(self):
        freezer = freeze_time("2018-02-20 12:00:01")
        freezer.start()

        user = UserFactoryNoPermissions(league=self.league,
                                        organization=self.league.organization)
        self.client.login(username=user.email, password=user_password)

        response = self.client.post(reverse('register:show_form',
                                            kwargs={
                                                'league_slug':
                                                self.league.slug,
                                                'event_slug': self.event.slug
                                            }),
                                    self.get_registration_data(user),
                                    follow=True)

        # Generate invoice should not create an invoice, as the first period
        # should have been paid during the registration process.
        freezer.stop()
        freezer = freeze_time("2018-03-20 12:00:01")
        freezer.start()
        generate_invoices()
        self.assertEqual(Invoice.objects.count(), 1)
        self.assertEqual(Invoice.objects.all()[0].status, "paid")
        self.assertEqual(Invoice.objects.all()[0].subscription.status,
                         "active")

        # Invoice should be generated
        freezer.stop()
        freezer = freeze_time("2018-03-22 12:00:01")
        freezer.start()
        generate_invoices()
        capture_invoices()

        self.assertEqual(Invoice.objects.all()[1].status, "unpaid")
        self.assertEqual(Invoice.objects.all()[1].subscription.status,
                         "active")

        # Card should be automatically charged
        freezer.stop()
        freezer = freeze_time("2018-04-01 12:00:01")
        freezer.start()
        capture_invoices()
        freezer.stop()

        invoices = Invoice.objects.all()
        self.assertEqual(invoices.count(), 2)
        self.assertEqual(invoices[1].status, "paid")
        self.assertEqual(Invoice.objects.all()[1].subscription.status,
                         "active")

        freezer = freeze_time("2018-04-22 12:00:01")
        freezer.start()
        generate_invoices()
        capture_invoices()
        freezer.stop()
        self.assertEqual(invoices.count(), 3)
        self.assertEqual(invoices[2].status, "unpaid")
        self.assertEqual(Invoice.objects.all()[1].subscription.status,
                         "active")

        freezer = freeze_time("2018-05-01 12:00:01")
        freezer.start()
        generate_invoices()
        capture_invoices()
        freezer.stop()
        self.assertEqual(invoices.count(), 3)
        self.assertEqual(invoices[2].status, "paid")
        self.assertEqual(Invoice.objects.all()[2].subscription.status,
                         "active")

        freezer = freeze_time("2018-05-22 12:00:01")
        freezer.start()
        generate_invoices()
        capture_invoices()
        freezer.stop()
        self.assertEqual(invoices.count(), 4)
        self.assertEqual(invoices[3].status, "unpaid")
        self.assertEqual(Invoice.objects.all()[3].subscription.status,
                         "complete")

        freezer = freeze_time("2018-06-01 12:00:01")
        freezer.start()
        generate_invoices()
        capture_invoices()
        freezer.stop()
        self.assertEqual(invoices.count(), 4)
        self.assertEqual(invoices[3].status, "paid")
        self.assertEqual(Invoice.objects.all()[3].subscription.status,
                         "complete")
Пример #21
0
 def test_event_invite_form_no_data(self):
     league = LeagueFactory()
     # No data, should fail.
     form = EventInviteEmailForm(data={}, league=league)
     self.assertFalse(form.is_valid(),
                      "Form should not be valid with no data.")