summaryrefslogtreecommitdiff
path: root/members/test_models.py
blob: 78723021869f932a61ff918c7d992b534baeac07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
from datetime import date, timedelta

from django.test import TestCase

from members.models import (
    GOLD_MEMBERSHIP,
    PLATINUM_MEMBERSHIP,
    SILVER_MEMBERSHIP,
    CorporateMember,
    IndividualMember,
    Team,
)


class IndividualMemberTests(TestCase):
    @classmethod
    def setUpTestData(cls):
        cls.member = IndividualMember.objects.create(
            name="DjangoDeveloper", email="developer@example.com"
        )

    def setUp(self):
        self.member.refresh_from_db()

    def test_str(self):
        self.assertEqual(str(self.member), "DjangoDeveloper")

    def test_member_since_should_have_default(self):
        self.assertEqual(IndividualMember().member_since, date.today())

    def test_is_active(self):
        self.assertTrue(self.member.is_active)
        self.member.member_until = date.today()
        self.assertFalse(self.member.is_active)


class CorporateMemberTests(TestCase):
    today = date.today()
    tomorrow = today + timedelta(days=1)

    @classmethod
    def setUpTestData(cls):
        cls.member = CorporateMember.objects.create(
            display_name="Corporation",
            billing_name="foo",
            billing_email="c@example.com",
            contact_email="c@example.com",
            membership_level=SILVER_MEMBERSHIP,
        )

    def setUp(self):
        self.member.refresh_from_db()

    def test_str(self):
        self.assertEqual(str(self.member), "Corporation")

    def test_is_invoiced(self):
        # No invoices == not invoiced.
        self.assertEqual(self.member.is_invoiced, False)
        # Invoice but no sent_date == not invoiced.
        invoice = self.member.invoice_set.create(amount=500)
        self.assertEqual(self.member.is_invoiced, False)
        # Invoice with an sent_date == invoiced.
        invoice.sent_date = self.today
        invoice.save()
        self.assertEqual(self.member.is_invoiced, True)

    def test_is_paid(self):
        # No invoices == not paid.
        self.assertEqual(self.member.is_paid, False)
        # Invoice but no paid_date == not paid.
        invoice = self.member.invoice_set.create(amount=500)
        self.assertEqual(self.member.is_paid, False)
        # Invoice with a paid_date == paid.
        invoice.paid_date = self.today
        invoice.save()
        self.assertEqual(self.member.is_paid, True)

    def test_get_expiry_date(self):
        self.assertIsNone(self.member.get_expiry_date())
        self.member.invoice_set.create(amount=500)
        self.assertIsNone(self.member.get_expiry_date())
        self.member.invoice_set.create(amount=500, expiration_date=self.today)
        self.assertEqual(self.member.get_expiry_date(), self.today)
        self.member.invoice_set.create(amount=500, expiration_date=self.tomorrow)
        self.assertEqual(self.member.get_expiry_date(), self.tomorrow)

    def test_manager_by_membership_level(self):
        self.assertEqual(CorporateMember.objects.by_membership_level(), {})
        self.member.invoice_set.create(amount=500, expiration_date=self.tomorrow)
        self.assertEqual(
            CorporateMember.objects.by_membership_level(), {"silver": [self.member]}
        )
        self.member.membership_level = GOLD_MEMBERSHIP
        self.member.save()
        self.assertEqual(
            CorporateMember.objects.by_membership_level(), {"gold": [self.member]}
        )
        self.member.membership_level = PLATINUM_MEMBERSHIP
        self.member.save()
        self.assertEqual(
            CorporateMember.objects.by_membership_level(), {"platinum": [self.member]}
        )


class TeamTests(TestCase):
    def test_str(self):
        self.assertEqual(str(Team(name="Ops")), "Ops")