Always activate testing in every test module ever.
[mediagoblin.git] / mediagoblin / tests / test_modelmethods.py
1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17 # Maybe not every model needs a test, but some models have special
18 # methods, and so it makes sense to test them here.
19
20 import mock
21
22 from mediagoblin.db.base import Session
23 from mediagoblin.db.models import MediaEntry
24
25 from mediagoblin.tests.tools import fixture_add_user
26 from mediagoblin.tools.testing import _activate_testing
27
28 _activate_testing()
29
30
31
32 class FakeUUID(object):
33 hex = 'testtest-test-test-test-testtesttest'
34
35 UUID_MOCK = mock.Mock(return_value=FakeUUID())
36
37
38 class TestMediaEntrySlugs(object):
39 def _setup(self):
40 self.chris_user = fixture_add_user(u'chris')
41 self.emily_user = fixture_add_user(u'emily')
42 self.existing_entry = self._insert_media_entry_fixture(
43 title=u"Beware, I exist!",
44 slug=u"beware-i-exist")
45
46 def _insert_media_entry_fixture(self, title=None, slug=None, this_id=None,
47 uploader=None, save=True):
48 entry = MediaEntry()
49 entry.title = title or u"Some title"
50 entry.slug = slug
51 entry.id = this_id
52 entry.uploader = uploader or self.chris_user.id
53 entry.media_type = u'image'
54
55 if save:
56 entry.save()
57
58 return entry
59
60 def test_unique_slug_from_title(self, test_app):
61 self._setup()
62
63 entry = self._insert_media_entry_fixture(u"Totally unique slug!", save=False)
64 entry.generate_slug()
65 assert entry.slug == u'totally-unique-slug'
66
67 def test_old_good_unique_slug(self, test_app):
68 self._setup()
69
70 entry = self._insert_media_entry_fixture(
71 u"A title here", u"a-different-slug-there", save=False)
72 entry.generate_slug()
73 assert entry.slug == u"a-different-slug-there"
74
75 def test_old_weird_slug(self, test_app):
76 self._setup()
77
78 entry = self._insert_media_entry_fixture(
79 slug=u"wowee!!!!!", save=False)
80 entry.generate_slug()
81 assert entry.slug == u"wowee"
82
83 def test_existing_slug_use_id(self, test_app):
84 self._setup()
85
86 entry = self._insert_media_entry_fixture(
87 u"Beware, I exist!!", this_id=9000, save=False)
88 entry.generate_slug()
89 assert entry.slug == u"beware-i-exist-9000"
90
91 def test_existing_slug_cant_use_id(self, test_app):
92 self._setup()
93
94 # Getting tired of dealing with test_app and this mock.patch
95 # thing conflicting, getting lazy.
96 @mock.patch('uuid.uuid4', UUID_MOCK)
97 def _real_test():
98 # This one grabs the nine thousand slug
99 self._insert_media_entry_fixture(
100 slug=u"beware-i-exist-9000")
101
102 entry = self._insert_media_entry_fixture(
103 u"Beware, I exist!!", this_id=9000, save=False)
104 entry.generate_slug()
105 assert entry.slug == u"beware-i-exist-test"
106
107 _real_test()
108
109 def test_existing_slug_cant_use_id_extra_junk(self, test_app):
110 self._setup()
111
112 # Getting tired of dealing with test_app and this mock.patch
113 # thing conflicting, getting lazy.
114 @mock.patch('uuid.uuid4', UUID_MOCK)
115 def _real_test():
116 # This one grabs the nine thousand slug
117 self._insert_media_entry_fixture(
118 slug=u"beware-i-exist-9000")
119
120 # This one grabs makes sure the annoyance doesn't stop
121 self._insert_media_entry_fixture(
122 slug=u"beware-i-exist-test")
123
124 entry = self._insert_media_entry_fixture(
125 u"Beware, I exist!!", this_id=9000, save=False)
126 entry.generate_slug()
127 assert entry.slug == u"beware-i-exist-testtest"
128
129 _real_test()
130
131 def test_garbage_slug(self, test_app):
132 """
133 Titles that sound totally like Q*Bert shouldn't have slugs at
134 all. We'll just reference them by id.
135
136 ,
137 / \ (@!#?@!)
138 |\,/| ,-, /
139 | |#| ( ")~
140 / \|/ \ L L
141 |\,/|\,/|
142 | |#, |#|
143 / \|/ \|/ \
144 |\,/|\,/|\,/|
145 | |#| |#| |#|
146 / \|/ \|/ \|/ \
147 |\,/|\,/|\,/|\,/|
148 | |#| |#| |#| |#|
149 \|/ \|/ \|/ \|/
150 """
151 self._setup()
152
153 qbert_entry = self._insert_media_entry_fixture(
154 u"@!#?@!", save=False)
155 qbert_entry.generate_slug()
156 assert qbert_entry.slug is None
157
158
159 def test_media_data_init(test_app):
160 Session.rollback()
161 Session.remove()
162 media = MediaEntry()
163 media.media_type = u"mediagoblin.media_types.image"
164 assert media.media_data is None
165 media.media_data_init()
166 assert media.media_data is not None
167 obj_in_session = 0
168 for obj in Session():
169 obj_in_session += 1
170 print repr(obj)
171 assert obj_in_session == 0