blob: e50efd24de9e33f94ce78b18399dad2b146ebb43 [file] [log] [blame]
# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for issuelist module."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import time
import unittest
from framework import framework_constants
from framework import table_view_helpers
from framework import template_helpers
from mrproto import tracker_pb2
from testing import fake
from testing import testing_helpers
from tracker import tablecell
from tracker import tracker_bizobj
class DisplayNameMock(object):
def __init__(self, name):
self.display_name = name
self.user = None
def MakeTestIssue(local_id, issue_id, summary, status=None):
issue = tracker_pb2.Issue()
issue.local_id = local_id
issue.issue_id = issue_id
issue.summary = summary
if status:
issue.status = status
return issue
class TableCellUnitTest(unittest.TestCase):
USERS_BY_ID = {
23456: DisplayNameMock('Jason'),
34567: DisplayNameMock('Nathan'),
}
def setUp(self):
self.issue1 = MakeTestIssue(
local_id=1, issue_id=100001, summary='One', status="New")
self.issue2 = MakeTestIssue(
local_id=2, issue_id=100002, summary='Two', status="Fixed")
self.issue3 = MakeTestIssue(
local_id=3, issue_id=100003, summary='Three', status="UndefinedString")
self.issue5 = MakeTestIssue(
local_id=5, issue_id=100005, summary='FiveUnviewable', status="Fixed")
self.table_cell_kws = {
'col': None,
'users_by_id': self.USERS_BY_ID,
'non_col_labels': [],
'label_values': {},
'related_issues': {},
'config': tracker_bizobj.MakeDefaultProjectIssueConfig(678),
'viewable_iids_set': {100001, 100002, 100003}
}
def testTableCellNote(self):
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws.update({'note': ''})
cell = tablecell.TableCellNote(
self.issue1, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_NOTE)
self.assertEqual(cell.values, [])
def testTableCellNote_NoNote(self):
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws.update({'note': 'some note'})
cell = tablecell.TableCellNote(
self.issue1, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_NOTE)
self.assertEqual(cell.values[0].item, 'some note')
def testTableCellDateAdded(self):
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws.update({'date_added': 1234})
cell = tablecell.TableCellDateAdded(
self.issue1, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 1234)
def testTableCellAdderID(self):
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws.update({'adder_id': 23456})
cell = tablecell.TableCellAdderID(
self.issue1, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 'Jason')
def testTableCellRank(self):
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws.update({'issue_rank': 3})
cell = tablecell.TableCellRank(
self.issue1, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 3)
def testTableCellID(self):
cell = tablecell.TableCellID(
MakeTestIssue(4, 4, 'Four'), **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ID)
# Note that the ID itself is accessed from the row, not the cell.
def testTableCellOwner(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.owner_id=23456
cell = tablecell.TableCellOwner(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 'Jason')
def testTableCellOwnerNoOwner(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.owner_id=framework_constants.NO_USER_SPECIFIED
cell = tablecell.TableCellOwner(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values, [])
def testTableCellReporter(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.reporter_id=34567
cell = tablecell.TableCellReporter(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 'Nathan')
def testTableCellCc(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.cc_ids = [23456, 34567]
cell = tablecell.TableCellCc(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 'Jason')
self.assertEqual(cell.values[1].item, 'Nathan')
def testTableCellCcNoCcs(self):
cell = tablecell.TableCellCc(
MakeTestIssue(4, 4, 'Four'), **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values, [])
def testTableCellAttachmentsNone(self):
cell = tablecell.TableCellAttachments(
MakeTestIssue(4, 4, 'Four'), **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 0)
def testTableCellAttachments(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.attachment_count = 2
cell = tablecell.TableCellAttachments(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 2)
def testTableCellOpened(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.opened_timestamp = 1200000000
cell = tablecell.TableCellOpened(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 'Jan 2008')
def testTableCellClosed(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.closed_timestamp = None
cell = tablecell.TableCellClosed(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values, [])
test_issue.closed_timestamp = 1200000000
cell = tablecell.TableCellClosed(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 'Jan 2008')
def testTableCellModified(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.modified_timestamp = None
cell = tablecell.TableCellModified(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values, [])
test_issue.modified_timestamp = 1200000000
cell = tablecell.TableCellModified(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 'Jan 2008')
def testTableCellOwnerLastVisit(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.owner_id = None
cell = tablecell.TableCellOwnerLastVisit(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values, [])
test_issue.owner_id = 23456
self.USERS_BY_ID[23456].user = testing_helpers.Blank(last_visit_timestamp=0)
cell = tablecell.TableCellOwnerLastVisit(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values, [])
self.USERS_BY_ID[23456].user.last_visit_timestamp = int(time.time())
cell = tablecell.TableCellOwnerLastVisit(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 'Today')
self.USERS_BY_ID[23456].user.last_visit_timestamp = (
int(time.time()) - 25 * framework_constants.SECS_PER_HOUR)
cell = tablecell.TableCellOwnerLastVisit(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 'Yesterday')
def testTableCellBlockedOn(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.blocked_on_iids = [
self.issue1.issue_id, self.issue2.issue_id, self.issue3.issue_id,
self.issue5.issue_id]
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws['related_issues'] = {
self.issue1.issue_id: self.issue1, self.issue2.issue_id: self.issue2,
self.issue3.issue_id: self.issue3, self.issue5.issue_id: self.issue5}
cell = tablecell.TableCellBlockedOn(
test_issue, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ISSUES)
self.assertEqual(
[x.item for x in cell.values], [
template_helpers.EZTItem(
href='/p/None/issues/detail?id=1',
id='1',
closed=None,
title='One'),
template_helpers.EZTItem(
href='/p/None/issues/detail?id=3',
id='3',
closed=None,
title='Three'),
template_helpers.EZTItem(
href='/p/None/issues/detail?id=5',
id='5',
closed=None,
title=''),
template_helpers.EZTItem(
href='/p/None/issues/detail?id=2',
id='2',
closed='yes',
title='Two')
])
def testTableCellBlockedOnNone(self):
cell = tablecell.TableCellBlockedOn(
MakeTestIssue(4, 4, 'Four'), **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ISSUES)
self.assertEqual(cell.values, [])
def testTableCellBlocking(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.blocking_iids = [
self.issue1.issue_id, self.issue2.issue_id, self.issue3.issue_id,
self.issue5.issue_id]
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws['related_issues'] = {
self.issue1.issue_id: self.issue1, self.issue2.issue_id: self.issue2,
self.issue3.issue_id: self.issue3, self.issue5.issue_id: self.issue5}
cell = tablecell.TableCellBlocking(
test_issue, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ISSUES)
self.assertEqual(
[x.item for x in cell.values], [
template_helpers.EZTItem(
href='/p/None/issues/detail?id=1',
id='1',
closed=None,
title='One'),
template_helpers.EZTItem(
href='/p/None/issues/detail?id=3',
id='3',
closed=None,
title='Three'),
template_helpers.EZTItem(
href='/p/None/issues/detail?id=5',
id='5',
closed=None,
title=''),
template_helpers.EZTItem(
href='/p/None/issues/detail?id=2',
id='2',
closed='yes',
title='Two')
])
def testTableCellBlockingNone(self):
cell = tablecell.TableCellBlocking(
MakeTestIssue(4, 4, 'Four'),
**self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ISSUES)
self.assertEqual(cell.values, [])
def testTableCellBlocked(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.blocked_on_iids = [1, 2, 3]
cell = tablecell.TableCellBlocked(
test_issue, **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 'Yes')
def testTableCellBlockedNotBlocked(self):
cell = tablecell.TableCellBlocked(
MakeTestIssue(4, 4, 'Four'), **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual(cell.values[0].item, 'No')
def testTableCellMergedInto(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.merged_into = self.issue2.issue_id
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws['related_issues'] = {self.issue2.issue_id: self.issue2}
cell = tablecell.TableCellMergedInto(
test_issue, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ISSUES)
self.assertEqual(
cell.values[0].item,
template_helpers.EZTItem(
href='/p/None/issues/detail?id=2',
id='2',
closed='yes',
title='Two'))
def testTableCellMergedIntoUnviewable(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.merged_into = self.issue5.issue_id
table_cell_kws = self.table_cell_kws.copy()
table_cell_kws['related_issues'] = {self.issue5.issue_id: self.issue5}
cell = tablecell.TableCellMergedInto(
test_issue, **table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ISSUES)
self.assertEqual(
cell.values[0].item,
template_helpers.EZTItem(
href='/p/None/issues/detail?id=5', id='5', closed=None, title=''))
def testTableCellMergedIntoNotMerged(self):
cell = tablecell.TableCellMergedInto(
MakeTestIssue(4, 4, 'Four'), **self.table_cell_kws)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ISSUES)
self.assertEqual(cell.values, [])
def testTableCellAllLabels(self):
labels = ['A', 'B', 'C', 'D-E', 'F-G']
derived_labels = ['W', 'X', 'Y-Z']
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.labels = labels
test_issue.derived_labels = derived_labels
cell = tablecell.TableCellAllLabels(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_ATTR)
self.assertEqual([v.item for v in cell.values], labels + derived_labels)
class TableCellCSVTest(unittest.TestCase):
USERS_BY_ID = {
23456: DisplayNameMock('Jason'),
}
def testTableCellOpenedTimestamp(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.opened_timestamp = 1200000000
cell = tablecell.TableCellOpenedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 1200000000)
def testTableCellClosedTimestamp(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.closed_timestamp = None
cell = tablecell.TableCellClosedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 0)
test_issue.closed_timestamp = 1200000000
cell = tablecell.TableCellClosedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 1200000000)
def testTableCellModifiedTimestamp(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.modified_timestamp = 0
cell = tablecell.TableCellModifiedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 0)
test_issue.modified_timestamp = 1200000000
cell = tablecell.TableCellModifiedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 1200000000)
def testTableCellOwnerModifiedTimestamp(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.owner_modified_timestamp = 0
cell = tablecell.TableCellOwnerModifiedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 0)
test_issue.owner_modified_timestamp = 1200000000
cell = tablecell.TableCellOwnerModifiedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 1200000000)
def testTableCellStatusModifiedTimestamp(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.status_modified_timestamp = 0
cell = tablecell.TableCellStatusModifiedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 0)
test_issue.status_modified_timestamp = 1200000000
cell = tablecell.TableCellStatusModifiedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 1200000000)
def testTableCellComponentModifiedTimestamp(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.component_modified_timestamp = 0
cell = tablecell.TableCellComponentModifiedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 0)
test_issue.component_modified_timestamp = 1200000000
cell = tablecell.TableCellComponentModifiedTimestamp(test_issue)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(cell.values[0].item, 1200000000)
def testTableCellOwnerLastVisitDaysAgo(self):
test_issue = MakeTestIssue(4, 4, 'Four')
test_issue.owner_id = None
cell = tablecell.TableCellOwnerLastVisitDaysAgo(
test_issue, users_by_id=self.USERS_BY_ID)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(None, cell.values[0].item)
test_issue.owner_id = 23456
self.USERS_BY_ID[23456].user = testing_helpers.Blank(last_visit_timestamp=0)
cell = tablecell.TableCellOwnerLastVisitDaysAgo(
test_issue, users_by_id=self.USERS_BY_ID)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(None, cell.values[0].item)
self.USERS_BY_ID[23456].user.last_visit_timestamp = (
int(time.time()) - 25 * 60 * 60)
cell = tablecell.TableCellOwnerLastVisitDaysAgo(
test_issue, users_by_id=self.USERS_BY_ID)
self.assertEqual(cell.type, table_view_helpers.CELL_TYPE_UNFILTERABLE)
self.assertEqual(1, cell.values[0].item)