def test_mix_pending_flagged_data_id(self): """ Case where reviewer holds locks for both pending and flagged themes. Calculating theme_lock_count on themes_more should be correct. """ reviewer = self.create_and_become_reviewer() # Check out pending themes. addon_factory(type=amo.ADDON_PERSONA, status=amo.STATUS_PENDING) req = self.req_factory_factory(reviewer, 'reviewers.themes.queue_themes') _get_themes(req, req.user.get_profile(), initial=True) # Check out flagged themes. for x in range(rvw.THEME_INITIAL_LOCKS + 1): addon_factory(type=amo.ADDON_PERSONA, status=amo.STATUS_REVIEW_PENDING) req = self.req_factory_factory(reviewer, 'reviewers.themes.queue_flagged') _get_themes(req, req.user.get_profile(), initial=True, flagged=True) # Get more flagged themes. req = self.req_factory_factory(reviewer, 'reviewers.themes.more_flagged') res = themes_more(req, flagged=True) themes = pq(json.loads(res.content)['html'])('.theme') eq_(pq(themes[0]).attr('data-id'), '2')
def test_themes_less_than_initial(self): """ Number of themes in the pool is less than amount we want to check out. """ addon_factory(type=amo.ADDON_PERSONA, status=self.status) reviewer = self.create_and_become_reviewer() eq_(len(_get_themes(mock.Mock(), reviewer)), 1) eq_(len(_get_themes(mock.Mock(), reviewer)), 1)
def test_expiry_update(self): """Test expiry is updated when reviewer reloads his queue.""" addon_factory(type=amo.ADDON_PERSONA, status=self.status) reviewer = self.create_and_become_reviewer() _get_themes(mock.Mock(), reviewer, initial=True, flagged=self.flagged) earlier = datetime.datetime.now() - datetime.timedelta(minutes=10) ThemeLock.objects.filter(reviewer=reviewer).update(expiry=earlier) _get_themes(mock.Mock(), reviewer, initial=True, flagged=self.flagged) eq_(ThemeLock.objects.filter(reviewer=reviewer)[0].expiry > earlier, True)
def test_expiry_update(self): """Test expiry is updated when reviewer reloads his queue.""" self.theme_factory() reviewer = self.create_and_become_reviewer() self.get_themes(reviewer) ThemeLock.objects.filter(reviewer=reviewer).update(expiry=days_ago(1)) _get_themes(mock.Mock(), reviewer, flagged=self.flagged) self.get_themes(reviewer) eq_(ThemeLock.objects.filter(reviewer=reviewer)[0].expiry > days_ago(1), True)
def test_expiry_update(self): """Test expiry is updated when reviewer reloads his queue.""" addon_factory(type=amo.ADDON_PERSONA, status=self.status) reviewer = self.create_and_become_reviewer() _get_themes(mock.Mock(), reviewer, flagged=self.flagged) ThemeLock.objects.filter(reviewer=reviewer).update(expiry=days_ago(1)) _get_themes(mock.Mock(), reviewer, flagged=self.flagged) eq_(ThemeLock.objects.filter(reviewer=reviewer)[0].expiry > days_ago(1), True)
def test_top_off(self): """If reviewer has fewer than max locks, get more from pool.""" for x in range(2): addon_factory(type=amo.ADDON_PERSONA, status=self.status) reviewer = self.create_and_become_reviewer() _get_themes(mock.Mock(), reviewer, initial=True, flagged=self.flagged) ThemeLock.objects.filter(reviewer=reviewer)[0].delete() _get_themes(mock.Mock(), reviewer, initial=True, flagged=self.flagged) # Check reviewer checked out the themes. eq_(ThemeLock.objects.filter(reviewer=reviewer).count(), rvw.THEME_INITIAL_LOCKS)
def test_release_locks(self): for x in range(2): addon_factory(type=amo.ADDON_PERSONA, status=self.status) other_reviewer = self.create_and_become_reviewer() _get_themes(mock.Mock(), other_reviewer) # Check reviewer's theme lock released. reviewer = self.create_and_become_reviewer() _get_themes(mock.Mock(), reviewer) eq_(ThemeLock.objects.filter(reviewer=reviewer).count(), 1) self.client.get(reverse('reviewers.themes.release_locks')) eq_(ThemeLock.objects.filter(reviewer=reviewer).count(), 0) # Check other reviewer's theme lock intact. eq_(ThemeLock.objects.filter(reviewer=other_reviewer).count(), 1)
def test_queue_cannot_review_own_theme(self): with self.settings(ALLOW_SELF_REVIEWS=False): reviewer = self.create_and_become_reviewer() for x in range(rvw.THEME_INITIAL_LOCKS + 1): addon = self.theme_factory() addon.addonuser_set.create(user=reviewer) eq_(_get_themes(amo.tests.req_factory_factory("", reviewer), reviewer), []) eq_(ThemeLock.objects.filter(reviewer=reviewer).count(), 0)
def test_queue_cannot_review_own_theme(self): with self.settings(ALLOW_SELF_REVIEWS=False): reviewer = self.create_and_become_reviewer() for x in range(rvw.THEME_INITIAL_LOCKS + 1): addon = self.theme_factory() addon.addonuser_set.create(user=reviewer) eq_(_get_themes(amo.tests.req_factory_factory('', reviewer), reviewer), []) eq_(ThemeLock.objects.filter(reviewer=reviewer).count(), 0)
def themes_more_helper(self): for x in range(rvw.THEME_INITIAL_LOCKS * 2): addon_factory(type=amo.ADDON_PERSONA, status=self.status) reviewer = self.create_and_become_reviewer() req = self.req_factory_factory(reviewer, "reviewers.themes.more") themes = _get_themes(req, req.user.get_profile(), initial=True, flagged=self.flagged) eq_(len(themes), 2) return req, themes
def test_basic_queue(self): """ Have reviewers take themes from the pool, check their queue sizes. """ for x in range(rvw.THEME_INITIAL_LOCKS + 1): addon_factory(type=amo.ADDON_PERSONA, status=self.status) themes = Persona.objects.all() expected_themes = [[themes[0], themes[1]], [themes[2]], []] for expected in expected_themes: reviewer = self.create_and_become_reviewer() eq_(_get_themes(mock.Mock(), reviewer, initial=False, flagged=self.flagged), expected) eq_(ThemeLock.objects.filter(reviewer=reviewer).count(), len(expected))
def test_more(self): """ Test number of themes checked out when asking for more asynchronously. """ for x in range(rvw.THEME_INITIAL_LOCKS + 1): addon_factory(type=amo.ADDON_PERSONA, status=self.status) themes = Persona.objects.all() expected_themes = [[themes[0], themes[1]], [themes[2]], []] reviewer = self.create_and_become_reviewer() for expected in expected_themes: actual = _get_themes(mock.Mock(), reviewer, initial=False, flagged=self.flagged) eq_(actual, expected)
def test_expiry(self): """ Test that reviewers who want themes from an empty pool can steal checked-out themes from other reviewers whose locks have expired. """ for x in range(2): addon_factory(type=amo.ADDON_PERSONA, status=self.status) reviewer = self.create_and_become_reviewer() _get_themes(mock.Mock(), reviewer, flagged=self.flagged) # Reviewer wants themes, but empty pool. reviewer = self.create_and_become_reviewer() _get_themes(mock.Mock(), reviewer, flagged=self.flagged) eq_(ThemeLock.objects.filter(reviewer=reviewer).count(), 0) # Manually expire a lock and see if it's reassigned. expired_theme_lock = ThemeLock.objects.all()[0] expired_theme_lock.expiry = self.days_ago(1) expired_theme_lock.save() _get_themes(mock.Mock(), reviewer, flagged=self.flagged) eq_(ThemeLock.objects.filter(reviewer=reviewer).count(), 1)
def get_themes(self, reviewer): return _get_themes(mock.Mock(), reviewer, flagged=self.flagged, rereview=self.rereview)