summaryrefslogtreecommitdiffstats
path: root/devel/tests/test_user.py
blob: 557b2abb20d4e87236cbbf1da82f7db5690546ff (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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
from django.contrib.auth.models import User
from django.test import TestCase

from devel.utils import UserFinder
from devel.models import UserProfile


class DevelTest(TestCase):
    def test_index(self):
        response = self.client.get('/devel/')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.has_header('Location'), True)
        self.assertEqual(response['location'],
                         '/login/?next=/devel/')

    def test_profile(self):
        response = self.client.get('/devel/profile/')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.has_header('Location'), True)
        self.assertEqual(response['location'],
                         '/login/?next=/devel/profile/')

    def test_newuser(self):
        response = self.client.get('/devel/newuser/')
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.has_header('Location'), True)
        self.assertEqual(response['location'],
                         '/login/?next=/devel/newuser/')

    def test_mirrors(self):
        response = self.client.get('/mirrors/')
        self.assertEqual(response.status_code, 200)

    def test_admin_log(self):
        User.objects.create_superuser('admin', 'admin@archlinux.org', 'admin')
        response = self.client.post('/login/', {'username': 'admin', 'password': 'admin'})
        response = self.client.get('/devel/admin_log', follow=True)
        self.assertEqual(response.status_code, 200)


class FindUserTest(TestCase):

    def setUp(self):
        self.finder = UserFinder()

        self.user1 = User.objects.create(
            username="joeuser", first_name="Joe", last_name="User", email="user1@example.com")
        self.user2 = User.objects.create(
            username="john", first_name="John", last_name="", email="user2@example.com")
        self.user3 = User.objects.create(
            username="bjones", first_name="Bob", last_name="Jones", email="user3@example.com")

        for user in (self.user1, self.user2, self.user3):
            email_addr = "%s@awesome.com" % user.username
            UserProfile.objects.create(user=user, public_email=email_addr)

        self.user4 = User.objects.create(
            username="tim1", first_name="Tim", last_name="One", email="tim@example.com")
        self.user5 = User.objects.create(
            username="tim2", first_name="Tim", last_name="Two", email="timtwo@example.com")

    def test_not_matching(self):
        self.assertIsNone(self.finder.find(None))
        self.assertIsNone(self.finder.find(""))
        self.assertIsNone(self.finder.find("Bogus"))
        self.assertIsNone(self.finder.find("Bogus <invalid"))
        self.assertIsNone(self.finder.find("Bogus User <bogus@example.com>"))
        self.assertIsNone(self.finder.find("<bogus@example.com>"))
        self.assertIsNone(self.finder.find("bogus@example.com"))
        self.assertIsNone(self.finder.find("Unknown Packager"))

    def test_by_email(self):
        self.assertEqual(
            self.user1, self.finder.find("XXX YYY <user1@example.com>"))
        self.assertEqual(
            self.user2, self.finder.find("YYY ZZZ <user2@example.com>"))

    def test_by_profile_email(self):
        self.assertEqual(
            self.user1, self.finder.find("XXX <joeuser@awesome.com>"))
        self.assertEqual(
            self.user2, self.finder.find("YYY <john@awesome.com>"))
        self.assertEqual(
            self.user3, self.finder.find("ZZZ <bjones@awesome.com>"))

    def test_by_name(self):
        self.assertEqual(
            self.user1, self.finder.find("Joe User <joe@differentdomain.com>"))
        self.assertEqual(
            self.user1, self.finder.find("Joe User"))
        self.assertEqual(
            self.user2, self.finder.find("John <john@differentdomain.com>"))
        self.assertEqual(
            self.user2, self.finder.find("John"))
        self.assertEqual(
            self.user3, self.finder.find("Bob Jones <bjones AT Arch Linux DOT org>"))

    def test_by_invalid(self):
        self.assertEqual(
            self.user1, self.finder.find("Joe User <user1@example.com"))
        self.assertEqual(
            self.user1, self.finder.find("Joe 'nickname' User <user1@example.com"))
        self.assertEqual(
            self.user1, self.finder.find("Joe \"nickname\" User <user1@example.com"))
        self.assertEqual(
            self.user1, self.finder.find("Joe User <joe@differentdomain.com"))

    def test_cache(self):
        # simply look two of them up, but then do it repeatedly
        for _ in range(5):
            self.assertEqual(
                self.user1, self.finder.find("XXX YYY <user1@example.com>"))
            self.assertEqual(
                self.user3, self.finder.find("Bob Jones <bjones AT Arch Linux DOT org>"))

    def test_ambiguous(self):
        self.assertEqual(
            self.user4, self.finder.find("Tim One <tim@anotherdomain.com>"))
        self.assertEqual(
            self.user5, self.finder.find("Tim Two <tim@anotherdomain.com>"))
        self.assertIsNone(self.finder.find("Tim <tim@anotherdomain.com>"))

    def test_find_by_username(self):
        self.assertEqual(self.finder.find_by_username(None), None)
        self.assertEqual(self.finder.find_by_username('noone'), None)
        self.assertEqual(self.finder.find_by_username(self.user1.username), self.user1)
        # Test cache
        self.assertEqual(self.finder.find_by_username(self.user1.username), self.user1)

    def test_find_by_email(self):
        self.assertEqual(self.finder.find_by_email(None), None)
        self.assertEqual(self.finder.find_by_email('bar@bar.com'), None)
        self.assertEqual(self.finder.find_by_email(self.user1.email), self.user1)
        # Test cache
        self.assertEqual(self.finder.find_by_email(self.user1.email), self.user1)

# vim: set ts=4 sw=4 et: