~chipaca/unity-lens-video/custom-user-agent

« back to all changes in this revision

Viewing changes to main/tests.py

  • Committer: Janos Gyerik
  • Date: 2012-04-03 19:21:24 UTC
  • Revision ID: janos@axiom-20120403192124-ygtt0it0sdltyl1a
pep8 fixes

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
from main.models import *
4
4
from main.forms import *
5
5
 
 
6
 
6
7
class Util:
7
8
    @staticmethod
8
9
    def new_user(username):
9
 
        user = User(username=username)
10
 
        user.save()
11
 
        return user
 
10
        user = User(username=username)
 
11
        user.save()
 
12
        return user
12
13
 
13
14
    @staticmethod
14
15
    def new_oneliner(user, line, summary=None, explanation=None, limitations=None):
15
 
        if summary is None:
16
 
            summary = '(incorrectly omitted)'
17
 
        if explanation is None:
18
 
            explanation = '(incorrectly omitted)'
19
 
        if limitations is None:
20
 
            limitations = '(this is optional)'
21
 
        oneliner = OneLiner(user=user, line=line, summary=summary, explanation=explanation, limitations=limitations)
22
 
        oneliner.save()
23
 
        return oneliner
 
16
        if summary is None:
 
17
            summary = '(incorrectly omitted)'
 
18
        if explanation is None:
 
19
            explanation = '(incorrectly omitted)'
 
20
        if limitations is None:
 
21
            limitations = '(this is optional)'
 
22
        oneliner = OneLiner(user=user, line=line, summary=summary, explanation=explanation, limitations=limitations)
 
23
        oneliner.save()
 
24
        return oneliner
24
25
 
25
26
    @staticmethod
26
27
    def new_vote():
27
 
        pass
 
28
        pass
28
29
 
29
30
    @staticmethod
30
31
    def new_question(user):
31
 
        question = Question(user=user)
32
 
        question.save()
33
 
        return question
 
32
        question = Question(user=user)
 
33
        question.save()
 
34
        return question
34
35
 
35
36
    @staticmethod
36
37
    def new_answer(question, oneliner):
37
 
        answer = Answer(question=question, oneliner=oneliner)
38
 
        answer.save()
39
 
        return answer
 
38
        answer = Answer(question=question, oneliner=oneliner)
 
39
        answer.save()
 
40
        return answer
40
41
 
41
42
 
42
43
class EditOneLinerTests(TestCase):
43
44
    def setUp(self):
44
 
        self.jack = Util.new_user('jack')
45
 
        self.jacks_oneliner = Util.new_oneliner(self.jack, 'echo jack')
 
45
        self.jack = Util.new_user('jack')
 
46
        self.jacks_oneliner = Util.new_oneliner(self.jack, 'echo jack')
46
47
 
47
 
        self.frank = Util.new_user('frank')
48
 
        self.franks_oneliner = Util.new_oneliner(self.frank, 'echo frank')
 
48
        self.frank = Util.new_user('frank')
 
49
        self.franks_oneliner = Util.new_oneliner(self.frank, 'echo frank')
49
50
 
50
51
    def test_save_own_success(self):
51
 
        oneliner0 = self.jacks_oneliner
52
 
        data = {
53
 
                'summary': oneliner0.summary,
54
 
                'line': oneliner0.line,
55
 
                'explanation': oneliner0.explanation,
56
 
                'action': EditOneLinerForm.action_save,
57
 
                }
58
 
        new_summary = oneliner0.summary + ' some change'
59
 
        data['summary'] = new_summary
60
 
 
61
 
        form = EditOneLinerForm(self.jack, data, instance=oneliner0)
62
 
        self.assertTrue(form.is_valid())
63
 
        oneliner1 = form.save()
64
 
 
65
 
        self.assertEquals(oneliner1.summary, new_summary)
66
 
        self.assertEquals(oneliner1.user, self.jack)
 
52
        oneliner0 = self.jacks_oneliner
 
53
        data = {
 
54
                'summary': oneliner0.summary,
 
55
                'line': oneliner0.line,
 
56
                'explanation': oneliner0.explanation,
 
57
                'action': EditOneLinerForm.action_save,
 
58
                }
 
59
        new_summary = oneliner0.summary + ' some change'
 
60
        data['summary'] = new_summary
 
61
 
 
62
        form = EditOneLinerForm(self.jack, data, instance=oneliner0)
 
63
        self.assertTrue(form.is_valid())
 
64
        oneliner1 = form.save()
 
65
 
 
66
        self.assertEquals(oneliner1.summary, new_summary)
 
67
        self.assertEquals(oneliner1.user, self.jack)
67
68
 
68
69
    def test_save_own_failure(self):
69
 
        oneliner0 = self.jacks_oneliner
70
 
        data = {
71
 
                'summary': oneliner0.summary,
72
 
                'line': oneliner0.line,
73
 
                'action': EditOneLinerForm.action_save,
74
 
                }
75
 
        new_summary = oneliner0.summary + ' some change'
76
 
        data['summary'] = new_summary
77
 
 
78
 
        form = EditOneLinerForm(self.jack, data, instance=oneliner0)
79
 
        self.assertFalse(form.is_valid())
80
 
 
81
 
        error_items = form.errors.items()
82
 
        self.assertEquals(len(error_items), 1)
83
 
        self.assertEquals(error_items[0][0], 'explanation')
 
70
        oneliner0 = self.jacks_oneliner
 
71
        data = {
 
72
                'summary': oneliner0.summary,
 
73
                'line': oneliner0.line,
 
74
                'action': EditOneLinerForm.action_save,
 
75
                }
 
76
        new_summary = oneliner0.summary + ' some change'
 
77
        data['summary'] = new_summary
 
78
 
 
79
        form = EditOneLinerForm(self.jack, data, instance=oneliner0)
 
80
        self.assertFalse(form.is_valid())
 
81
 
 
82
        error_items = form.errors.items()
 
83
        self.assertEquals(len(error_items), 1)
 
84
        self.assertEquals(error_items[0][0], 'explanation')
84
85
 
85
86
    def test_save_notown_failure(self):
86
 
        oneliner0 = self.jacks_oneliner
87
 
        data = {
88
 
                'summary': oneliner0.summary,
89
 
                'line': oneliner0.line,
90
 
                'explanation': oneliner0.explanation,
91
 
                'action': EditOneLinerForm.action_save,
92
 
                }
93
 
 
94
 
        form = EditOneLinerForm(self.frank, data, instance=self.jacks_oneliner)
95
 
        self.assertFalse(form.is_valid())
96
 
 
97
 
        error_items = form.errors.items()
98
 
        self.assertEquals(len(error_items), 1)
99
 
        self.assertEquals(error_items[0][0], '__all__')
 
87
        oneliner0 = self.jacks_oneliner
 
88
        data = {
 
89
                'summary': oneliner0.summary,
 
90
                'line': oneliner0.line,
 
91
                'explanation': oneliner0.explanation,
 
92
                'action': EditOneLinerForm.action_save,
 
93
                }
 
94
 
 
95
        form = EditOneLinerForm(self.frank, data, instance=self.jacks_oneliner)
 
96
        self.assertFalse(form.is_valid())
 
97
 
 
98
        error_items = form.errors.items()
 
99
        self.assertEquals(len(error_items), 1)
 
100
        self.assertEquals(error_items[0][0], '__all__')
100
101
 
101
102
 
102
103
class VoteTests(TestCase):
103
104
    def setUp(self):
104
 
        self.jack = Util.new_user('jack')
105
 
        self.jacks_oneliner = Util.new_oneliner(self.jack, 'echo jack')
106
 
 
107
 
        self.mike = Util.new_user('mike')
108
 
        self.mikes_oneliner = Util.new_oneliner(self.mike, 'echo mike')
109
 
 
110
 
        self.frank = Util.new_user('frank')
111
 
        self.franks_oneliner = Util.new_oneliner(self.frank, 'echo frank')
 
105
        self.jack = Util.new_user('jack')
 
106
        self.jacks_oneliner = Util.new_oneliner(self.jack, 'echo jack')
 
107
 
 
108
        self.mike = Util.new_user('mike')
 
109
        self.mikes_oneliner = Util.new_oneliner(self.mike, 'echo mike')
 
110
 
 
111
        self.frank = Util.new_user('frank')
 
112
        self.franks_oneliner = Util.new_oneliner(self.frank, 'echo frank')
112
113
 
113
114
    def test_multiple_vote_tolerance(self):
114
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 0)
115
 
        self.jacks_oneliner.vote_up(self.jack)
116
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 0)
117
 
        self.jacks_oneliner.vote_up(self.mike)
118
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
119
 
        self.jacks_oneliner.vote_up(self.mike)
120
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
121
 
        self.jacks_oneliner.vote_up(self.mike)
122
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
 
115
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 0)
 
116
        self.jacks_oneliner.vote_up(self.jack)
 
117
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 0)
 
118
        self.jacks_oneliner.vote_up(self.mike)
 
119
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
 
120
        self.jacks_oneliner.vote_up(self.mike)
 
121
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
 
122
        self.jacks_oneliner.vote_up(self.mike)
 
123
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
123
124
 
124
125
    def test_vote_counts(self):
125
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 0)
126
 
        self.jacks_oneliner.vote_up(self.jack)
127
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 0)
128
 
        self.jacks_oneliner.vote_up(self.mike)
129
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
130
 
        self.jacks_oneliner.vote_up(self.frank)
131
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 2)
132
 
        self.jacks_oneliner.vote_up(self.frank)
133
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 2)
134
 
        self.jacks_oneliner.vote_down(self.frank)
135
 
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
136
 
        self.assertEquals(self.jacks_oneliner.get_votes_down(), 1)
137
 
        self.assertEquals(self.jacks_oneliner.get_votes(), (1, 1))
 
126
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 0)
 
127
        self.jacks_oneliner.vote_up(self.jack)
 
128
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 0)
 
129
        self.jacks_oneliner.vote_up(self.mike)
 
130
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
 
131
        self.jacks_oneliner.vote_up(self.frank)
 
132
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 2)
 
133
        self.jacks_oneliner.vote_up(self.frank)
 
134
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 2)
 
135
        self.jacks_oneliner.vote_down(self.frank)
 
136
        self.assertEquals(self.jacks_oneliner.get_votes_up(), 1)
 
137
        self.assertEquals(self.jacks_oneliner.get_votes_down(), 1)
 
138
        self.assertEquals(self.jacks_oneliner.get_votes(), (1, 1))
138
139
 
139
140
 
140
141
class RecentTests(TestCase):
141
142
    def setUp(self):
142
 
        self.jack = Util.new_user('jack')
143
 
        self.jacks_oneliner = Util.new_oneliner(self.jack, 'echo jack')
 
143
        self.jack = Util.new_user('jack')
 
144
        self.jacks_oneliner = Util.new_oneliner(self.jack, 'echo jack')
144
145
 
145
 
        self.mike = Util.new_user('mike')
146
 
        self.mikes_oneliner = Util.new_oneliner(self.mike, 'echo mike')
 
146
        self.mike = Util.new_user('mike')
 
147
        self.mikes_oneliner = Util.new_oneliner(self.mike, 'echo mike')
147
148
 
148
149
    def xtest_recent(self):
149
 
        u1 = Util.new_user('u1')
150
 
        u2 = Util.new_user('u2')
151
 
        u3 = Util.new_user('u3')
152
 
 
153
 
        self.jacks_oneliner.vote_up(u1)
154
 
        self.assertEquals(OneLiner.recent()[0], self.jacks_oneliner)
155
 
 
156
 
        self.mikes_oneliner.vote_up(u1)
157
 
        self.mikes_oneliner.vote_up(u2)
158
 
        self.assertEquals(OneLiner.recent()[0], self.mikes_oneliner)
159
 
 
160
 
        self.jacks_oneliner.vote_up(u2)
161
 
        self.jacks_oneliner.vote_up(u3)
162
 
        self.assertEquals(OneLiner.recent()[0], self.jacks_oneliner)
163
 
 
164
 
        u4 = Util.new_user('u4')
165
 
        u5 = Util.new_user('u5')
166
 
        self.mikes_oneliner.vote_down(u4)
167
 
        self.mikes_oneliner.vote_down(u5)
168
 
        self.assertEquals(OneLiner.recent()[0], self.jacks_oneliner)
 
150
        u1 = Util.new_user('u1')
 
151
        u2 = Util.new_user('u2')
 
152
        u3 = Util.new_user('u3')
 
153
 
 
154
        self.jacks_oneliner.vote_up(u1)
 
155
        self.assertEquals(OneLiner.recent()[0], self.jacks_oneliner)
 
156
 
 
157
        self.mikes_oneliner.vote_up(u1)
 
158
        self.mikes_oneliner.vote_up(u2)
 
159
        self.assertEquals(OneLiner.recent()[0], self.mikes_oneliner)
 
160
 
 
161
        self.jacks_oneliner.vote_up(u2)
 
162
        self.jacks_oneliner.vote_up(u3)
 
163
        self.assertEquals(OneLiner.recent()[0], self.jacks_oneliner)
 
164
 
 
165
        u4 = Util.new_user('u4')
 
166
        u5 = Util.new_user('u5')
 
167
        self.mikes_oneliner.vote_down(u4)
 
168
        self.mikes_oneliner.vote_down(u5)
 
169
        self.assertEquals(OneLiner.recent()[0], self.jacks_oneliner)
169
170
 
170
171
 
171
172
class SearchTests(TestCase):
172
173
    def setUp(self):
173
 
        self.jack = Util.new_user('jack')
174
 
        self.jacks_oneliner = Util.new_oneliner(self.jack, 'echo jack')
175
 
 
176
 
        self.mike = Util.new_user('mike')
177
 
        self.mikes_oneliner = Util.new_oneliner(self.mike, 'echo mike')
178
 
 
179
 
        self.vi_oneliner = Util.new_oneliner(self.mike, 'vi is an editor', summary='vi oneliner')
180
 
        self.video_oneliner = Util.new_oneliner(self.mike, 'mplayer is a video manipulator', summary='mplayer oneliner')
181
 
 
182
 
        self.mline_oneliner = Util.new_oneliner(self.jack, 'mline')
183
 
        self.msummary_oneliner = Util.new_oneliner(self.jack, '', summary='msummary')
184
 
        self.mexplanation_oneliner = Util.new_oneliner(self.jack, '', explanation='mexplanation')
185
 
        self.mlimitations_oneliner = Util.new_oneliner(self.jack, '', limitations='mlimitations')
 
174
        self.jack = Util.new_user('jack')
 
175
        self.jacks_oneliner = Util.new_oneliner(self.jack, 'echo jack')
 
176
 
 
177
        self.mike = Util.new_user('mike')
 
178
        self.mikes_oneliner = Util.new_oneliner(self.mike, 'echo mike')
 
179
 
 
180
        self.vi_oneliner = Util.new_oneliner(self.mike, 'vi is an editor', summary='vi oneliner')
 
181
        self.video_oneliner = Util.new_oneliner(self.mike, 'mplayer is a video manipulator', summary='mplayer oneliner')
 
182
 
 
183
        self.mline_oneliner = Util.new_oneliner(self.jack, 'mline')
 
184
        self.msummary_oneliner = Util.new_oneliner(self.jack, '', summary='msummary')
 
185
        self.mexplanation_oneliner = Util.new_oneliner(self.jack, '', explanation='mexplanation')
 
186
        self.mlimitations_oneliner = Util.new_oneliner(self.jack, '', limitations='mlimitations')
186
187
 
187
188
    def test_simplesearch(self):
188
 
        self.assertEquals(OneLiner.simplesearch('echo').count(), 2)
189
 
        self.assertEquals(OneLiner.simplesearch('echo jack').count(), 1)
190
 
        self.assertEquals(OneLiner.simplesearch('echo mike').count(), 1)
191
 
        self.assertEquals(OneLiner.simplesearch('jack')[0], self.jacks_oneliner)
192
 
        self.assertEquals(OneLiner.simplesearch('echo jack')[0], self.jacks_oneliner)
193
 
        self.assertEquals(OneLiner.simplesearch('echo mike')[0], self.mikes_oneliner)
 
189
        self.assertEquals(OneLiner.simplesearch('echo').count(), 2)
 
190
        self.assertEquals(OneLiner.simplesearch('echo jack').count(), 1)
 
191
        self.assertEquals(OneLiner.simplesearch('echo mike').count(), 1)
 
192
        self.assertEquals(OneLiner.simplesearch('jack')[0], self.jacks_oneliner)
 
193
        self.assertEquals(OneLiner.simplesearch('echo jack')[0], self.jacks_oneliner)
 
194
        self.assertEquals(OneLiner.simplesearch('echo mike')[0], self.mikes_oneliner)
194
195
 
195
196
    def get_form(self, data):
196
 
        initial = {
197
 
                'match_summary': True,
198
 
                'match_line': True,
199
 
                'match_explanation': True,
200
 
                'match_limitations': True,
201
 
                }
202
 
        initial.update(data)
203
 
        form = SearchOneLinerForm(data=initial)
204
 
        self.assertTrue(form.is_valid())
205
 
        return form
 
197
        initial = {
 
198
                'match_summary': True,
 
199
                'match_line': True,
 
200
                'match_explanation': True,
 
201
                'match_limitations': True,
 
202
                }
 
203
        initial.update(data)
 
204
        form = SearchOneLinerForm(data=initial)
 
205
        self.assertTrue(form.is_valid())
 
206
        return form
206
207
 
207
208
    def test_match_summary(self):
208
 
        results = OneLiner.search(self.get_form({ 'query': 'msummary' }))
209
 
        self.assertEquals(len(results), 1)
210
 
        self.assertEquals(results[0], self.msummary_oneliner)
 
209
        results = OneLiner.search(self.get_form({'query': 'msummary', }))
 
210
        self.assertEquals(len(results), 1)
 
211
        self.assertEquals(results[0], self.msummary_oneliner)
211
212
 
212
 
        results = OneLiner.search(self.get_form({ 'query': 'msummary', 'match_summary': False }))
213
 
        self.assertEquals(len(results), 0)
 
213
        results = OneLiner.search(self.get_form({'query': 'msummary', 'match_summary': False, }))
 
214
        self.assertEquals(len(results), 0)
214
215
 
215
216
    def test_match_line(self):
216
 
        results = OneLiner.search(self.get_form({ 'query': 'mline' }))
217
 
        self.assertEquals(len(results), 1)
218
 
        self.assertEquals(results[0], self.mline_oneliner)
 
217
        results = OneLiner.search(self.get_form({'query': 'mline', }))
 
218
        self.assertEquals(len(results), 1)
 
219
        self.assertEquals(results[0], self.mline_oneliner)
219
220
 
220
 
        results = OneLiner.search(self.get_form({ 'query': 'mline', 'match_line': False }))
221
 
        self.assertEquals(len(results), 0)
 
221
        results = OneLiner.search(self.get_form({'query': 'mline', 'match_line': False, }))
 
222
        self.assertEquals(len(results), 0)
222
223
 
223
224
    def test_match_explanation(self):
224
 
        results = OneLiner.search(self.get_form({ 'query': 'mexplanation' }))
225
 
        self.assertEquals(len(results), 1)
226
 
        self.assertEquals(results[0], self.mexplanation_oneliner)
 
225
        results = OneLiner.search(self.get_form({'query': 'mexplanation', }))
 
226
        self.assertEquals(len(results), 1)
 
227
        self.assertEquals(results[0], self.mexplanation_oneliner)
227
228
 
228
 
        results = OneLiner.search(self.get_form({ 'query': 'mexplanation', 'match_explanation': False }))
229
 
        self.assertEquals(len(results), 0)
 
229
        results = OneLiner.search(self.get_form({'query': 'mexplanation', 'match_explanation': False, }))
 
230
        self.assertEquals(len(results), 0)
230
231
 
231
232
    def test_match_limitations(self):
232
 
        results = OneLiner.search(self.get_form({ 'query': 'mlimitations' }))
233
 
        self.assertEquals(len(results), 1)
234
 
        self.assertEquals(results[0], self.mlimitations_oneliner)
 
233
        results = OneLiner.search(self.get_form({'query': 'mlimitations', }))
 
234
        self.assertEquals(len(results), 1)
 
235
        self.assertEquals(results[0], self.mlimitations_oneliner)
235
236
 
236
 
        results = OneLiner.search(self.get_form({ 'query': 'mlimitations', 'match_limitations': False }))
237
 
        self.assertEquals(len(results), 0)
 
237
        results = OneLiner.search(self.get_form({'query': 'mlimitations', 'match_limitations': False, }))
 
238
        self.assertEquals(len(results), 0)
238
239
 
239
240
    def test_match_whole_words(self):
240
 
        results = OneLiner.search(self.get_form({ 'query': 'vi', }))
241
 
        self.assertEquals(len(results), 2)
 
241
        results = OneLiner.search(self.get_form({'query': 'vi', }))
 
242
        self.assertEquals(len(results), 2)
242
243
 
243
 
        results = OneLiner.search(self.get_form({ 'query': 'vi', 'match_whole_words': True }))
244
 
        self.assertEquals(len(results), 1)
245
 
        self.assertEquals(results[0], self.vi_oneliner)
 
244
        results = OneLiner.search(self.get_form({'query': 'vi', 'match_whole_words': True, }))
 
245
        self.assertEquals(len(results), 1)
 
246
        self.assertEquals(results[0], self.vi_oneliner)
246
247
 
247
248
    def test_match_nothing(self):
248
 
        form = SearchOneLinerForm(data={'query': 'NOTHINGSHOULDMATCH'})
249
 
        self.assertTrue(form.is_valid())
250
 
        results = OneLiner.search(form)
251
 
        self.assertEquals(len(results), 0)
 
249
        form = SearchOneLinerForm(data={'query': 'NOTHINGSHOULDMATCH'})
 
250
        self.assertTrue(form.is_valid())
 
251
        results = OneLiner.search(form)
 
252
        self.assertEquals(len(results), 0)
252
253
 
253
254
 
254
255
class QuestionTests(TestCase):
255
256
    def setUp(self):
256
 
        self.user = Util.new_user('user1')
 
257
        self.user = Util.new_user('user1')
257
258
 
258
259
    def test_create_question(self):
259
 
        Util.new_question(self.user)
 
260
        Util.new_question(self.user)
260
261
 
261
262
    def test_list_questions(self):
262
 
        self.assertTrue(Question.objects.all().count() == 0)
263
 
        Util.new_question(self.user)
264
 
        self.assertTrue(Question.objects.all().count() > 0)
 
263
        self.assertTrue(Question.objects.all().count() == 0)
 
264
        Util.new_question(self.user)
 
265
        self.assertTrue(Question.objects.all().count() > 0)
265
266
 
266
267
    def test_list_questions_latestfirst(self):
267
 
        q1 = Util.new_question(self.user)
268
 
        q2 = Util.new_question(self.user)
269
 
        self.assertTrue(Question.objects.latest() == q2)
 
268
        q1 = Util.new_question(self.user)
 
269
        q2 = Util.new_question(self.user)
 
270
        self.assertTrue(Question.objects.latest() == q2)
270
271
 
271
272
    def test_list_excludes_nonpublished(self):
272
 
        q1 = Util.new_question(self.user)
273
 
        q2 = Util.new_question(self.user)
274
 
        self.assertEquals(Question.latest(), q2)
275
 
        q2.is_published = False
276
 
        q2.save()
277
 
        self.assertNotEquals(Question.latest(), q2)
 
273
        q1 = Util.new_question(self.user)
 
274
        q2 = Util.new_question(self.user)
 
275
        self.assertEquals(Question.latest(), q2)
 
276
        q2.is_published = False
 
277
        q2.save()
 
278
        self.assertNotEquals(Question.latest(), q2)
278
279
 
279
280
    def test_list_excludes_answered(self):
280
 
        q1 = Util.new_question(self.user)
281
 
        q2 = Util.new_question(self.user)
282
 
        self.assertEquals(Question.latest(), q2)
283
 
        q2.is_answered = True
284
 
        q2.save()
285
 
        self.assertNotEquals(Question.latest(), q2)
 
281
        q1 = Util.new_question(self.user)
 
282
        q2 = Util.new_question(self.user)
 
283
        self.assertEquals(Question.latest(), q2)
 
284
        q2.is_answered = True
 
285
        q2.save()
 
286
        self.assertNotEquals(Question.latest(), q2)
286
287
 
287
288
    def test_answer(self):
288
 
        q1 = Util.new_question(self.user)
289
 
        jack = Util.new_user('jack')
290
 
        o1 = Util.new_oneliner(jack, 'echo jack')
291
 
        a1 = Util.new_answer(q1, o1)
 
289
        q1 = Util.new_question(self.user)
 
290
        jack = Util.new_user('jack')
 
291
        o1 = Util.new_oneliner(jack, 'echo jack')
 
292
        a1 = Util.new_answer(q1, o1)
292
293
 
293
294
    def test_multiple_answers(self):
294
 
        q1 = Util.new_question(self.user)
295
 
        jack = Util.new_user('jack')
296
 
        o1 = Util.new_oneliner(jack, 'echo jack')
297
 
        a1 = Util.new_answer(q1, o1)
298
 
        mike = Util.new_user('mike')
299
 
        o2 = Util.new_oneliner(mike, 'echo mike')
300
 
        a2 = Util.new_answer(q1, o2)
 
295
        q1 = Util.new_question(self.user)
 
296
        jack = Util.new_user('jack')
 
297
        o1 = Util.new_oneliner(jack, 'echo jack')
 
298
        a1 = Util.new_answer(q1, o1)
 
299
        mike = Util.new_user('mike')
 
300
        o2 = Util.new_oneliner(mike, 'echo mike')
 
301
        a2 = Util.new_answer(q1, o2)
301
302
 
302
303
 
303
304
class AcceptedAnswerTests(TestCase):
304
305
    def setUp(self):
305
 
        self.jack = Util.new_user('jack')
306
 
        self.oneliner = OneLiner(user=self.jack)
307
 
        self.oneliner.save()
308
 
 
309
 
        self.bill = Util.new_user('bill')
310
 
        OneLiner(user=self.bill).save()
311
 
 
312
 
        self.mike = Util.new_user('mike')
313
 
        self.question = Question(user=self.mike)
314
 
        self.question.save()
 
306
        self.jack = Util.new_user('jack')
 
307
        self.oneliner = OneLiner(user=self.jack)
 
308
        self.oneliner.save()
 
309
 
 
310
        self.bill = Util.new_user('bill')
 
311
        OneLiner(user=self.bill).save()
 
312
 
 
313
        self.mike = Util.new_user('mike')
 
314
        self.question = Question(user=self.mike)
 
315
        self.question.save()
315
316
 
316
317
    def test_accept(self):
317
 
        self.assertEqual(AcceptedAnswer.objects.count(), 0)
318
 
        self.assertTrue(not self.question.is_answered)
319
 
 
320
 
        self.question.accept_answer(self.oneliner)
321
 
        self.assertTrue(self.question.is_answered)
322
 
        self.assertEqual(AcceptedAnswer.objects.count(), 1)
323
 
 
324
 
        self.question.accept_answer(self.oneliner)
325
 
        self.assertTrue(self.question.is_answered)
326
 
        self.assertEqual(AcceptedAnswer.objects.count(), 1)
 
318
        self.assertEqual(AcceptedAnswer.objects.count(), 0)
 
319
        self.assertTrue(not self.question.is_answered)
 
320
 
 
321
        self.question.accept_answer(self.oneliner)
 
322
        self.assertTrue(self.question.is_answered)
 
323
        self.assertEqual(AcceptedAnswer.objects.count(), 1)
 
324
 
 
325
        self.question.accept_answer(self.oneliner)
 
326
        self.assertTrue(self.question.is_answered)
 
327
        self.assertEqual(AcceptedAnswer.objects.count(), 1)
327
328
 
328
329
    def test_accept_clear(self):
329
 
        self.test_accept()
330
 
        self.assertTrue(AcceptedAnswer.objects.count() > 0)
331
 
        self.assertTrue(self.question.is_answered)
 
330
        self.test_accept()
 
331
        self.assertTrue(AcceptedAnswer.objects.count() > 0)
 
332
        self.assertTrue(self.question.is_answered)
332
333
 
333
 
        self.question.clear_all_answers()
334
 
        self.assertFalse(AcceptedAnswer.objects.count() > 0)
335
 
        self.assertFalse(self.question.is_answered)
 
334
        self.question.clear_all_answers()
 
335
        self.assertFalse(AcceptedAnswer.objects.count() > 0)
 
336
        self.assertFalse(self.question.is_answered)
336
337
 
337
338
    def test_clear_answers_when_is_answered_is_cleared(self):
338
 
        self.test_accept()
339
 
        self.assertTrue(AcceptedAnswer.objects.count() > 0)
340
 
        self.assertTrue(self.question.is_answered)
 
339
        self.test_accept()
 
340
        self.assertTrue(AcceptedAnswer.objects.count() > 0)
 
341
        self.assertTrue(self.question.is_answered)
341
342
 
342
 
        self.question.is_answered = False
343
 
        self.question.save()
344
 
        self.assertFalse(AcceptedAnswer.objects.count() > 0)
 
343
        self.question.is_answered = False
 
344
        self.question.save()
 
345
        self.assertFalse(AcceptedAnswer.objects.count() > 0)
345
346
 
346
347
 
347
348
class TagTests(TestCase):
348
349
    def test_tag_generator(self):
349
 
        user = Util.new_user('jack')
350
 
 
351
 
        line = 'find grep xargs'
352
 
        oneliner = Util.new_oneliner(user, line)
353
 
        self.assertItemsEqual(('xargs', 'grep', 'find'), oneliner.get_tags())
354
 
 
355
 
        line = '''find /etc -type f -print0 2>/dev/null | xargs -0 grep --color=AUTO -Hn 'nameserver' 2>/dev/null'''
356
 
        oneliner = Util.new_oneliner(user, line)
357
 
        self.assertItemsEqual(('xargs', 'grep', 'find'), oneliner.get_tags())
358
 
 
359
 
        line = '''MAX=$(NUM=1;cat author.xml |perl -p -e 's/(Times Cited)/\n$1/g'|grep "Times Cited" |perl -p -e 's/^Times Cited:([0-9]*).*$/$1/g'|sort -nr | while read LINE; do if [ $LINE -ge $NUM ]; then echo "$NUM"; fi; NUM=$[$NUM+1]; done;); echo "$MAX"|tail -1'''
360
 
        oneliner = Util.new_oneliner(user, line)
361
 
        self.assertItemsEqual((u'sort', u'do', u'grep', u'then', u'read', u'tail', u'perl', u'while', u'done', u'echo', u'fi', u'cat', u'if'), oneliner.get_tags())
 
350
        user = Util.new_user('jack')
 
351
 
 
352
        line = 'find grep xargs'
 
353
        oneliner = Util.new_oneliner(user, line)
 
354
        self.assertItemsEqual(('xargs', 'grep', 'find'), oneliner.get_tags())
 
355
 
 
356
        line = '''find /etc -type f -print0 2>/dev/null | xargs -0 grep --color=AUTO -Hn 'nameserver' 2>/dev/null'''
 
357
        oneliner = Util.new_oneliner(user, line)
 
358
        self.assertItemsEqual(('xargs', 'grep', 'find'), oneliner.get_tags())
 
359
 
 
360
        line = '''MAX=$(NUM=1;cat author.xml |perl -p -e 's/(Times Cited)/\n$1/g'|grep "Times Cited" |perl -p -e 's/^Times Cited:([0-9]*).*$/$1/g'|sort -nr | while read LINE; do if [ $LINE -ge $NUM ]; then echo "$NUM"; fi; NUM=$[$NUM+1]; done;); echo "$MAX"|tail -1'''
 
361
        oneliner = Util.new_oneliner(user, line)
 
362
        self.assertItemsEqual((u'sort', u'do', u'grep', u'then', u'read', u'tail', u'perl', u'while', u'done', u'echo', u'fi', u'cat', u'if'), oneliner.get_tags())
362
363
 
363
364
    def test_tag_cloud(self):
364
 
        user = Util.new_user('jack')
365
 
 
366
 
        Util.new_oneliner(user, 'xargs find grep')
367
 
        Util.new_oneliner(user, 'xargs ls rm find')
368
 
        Util.new_oneliner(user, 'xargs xargs while sleep done do')
369
 
 
370
 
        tagcloud = Tag.tagcloud()
371
 
        tagcloud = tagcloud.values_list('text', 'count')
372
 
        dd = dict(tagcloud)
373
 
        self.assertEquals(3, dd['xargs'])
374
 
        self.assertEquals(3, dd.get('xargs'))
375
 
        self.assertEquals(2, dd['find'])
376
 
        self.assertFalse(dd.get('BLAH'))
 
365
        user = Util.new_user('jack')
 
366
 
 
367
        Util.new_oneliner(user, 'xargs find grep')
 
368
        Util.new_oneliner(user, 'xargs ls rm find')
 
369
        Util.new_oneliner(user, 'xargs xargs while sleep done do')
 
370
 
 
371
        tagcloud = Tag.tagcloud()
 
372
        tagcloud = tagcloud.values_list('text', 'count')
 
373
        dd = dict(tagcloud)
 
374
        self.assertEquals(3, dd['xargs'])
 
375
        self.assertEquals(3, dd.get('xargs'))
 
376
        self.assertEquals(2, dd['find'])
 
377
        self.assertFalse(dd.get('BLAH'))
377
378
 
378
379
 
379
380
# eof