def setUp(self):
     self.data = {
         "user": "******",
         "tags": ["Youtracked"],
         "use_stop": True,
         "description": "BCSM-15 Support new presences in code",
         "dur": 12294000,
         "billable": None,
         "pid": 6337533,
         "tid": None,
         "cur": None,
         "is_billable": False,
         "end": "2014-10-06T18:29:54+01:00",
         "updated": "2014-10-06T22:43:19+01:00",
         "start": "2014-10-06T15:05:00+01:00",
         "client": "British Council",
         "task": None,
         "project": "Social Monitor",
         "id": 166078570,
         "uid": 907967,
     }
     connection = MagicMock()
     self.row = TogglAPIRow(self.data, connection, "username")
class TestTogglAPIRow(TestCase):
    def setUp(self):
        self.data = {
            "user": "******",
            "tags": ["Youtracked"],
            "use_stop": True,
            "description": "BCSM-15 Support new presences in code",
            "dur": 12294000,
            "billable": None,
            "pid": 6337533,
            "tid": None,
            "cur": None,
            "is_billable": False,
            "end": "2014-10-06T18:29:54+01:00",
            "updated": "2014-10-06T22:43:19+01:00",
            "start": "2014-10-06T15:05:00+01:00",
            "client": "British Council",
            "task": None,
            "project": "Social Monitor",
            "id": 166078570,
            "uid": 907967,
        }
        connection = MagicMock()
        self.row = TogglAPIRow(self.data, connection, "username")

    def test_work_item(self):
        work_item = self.row.work_item
        self.assertIsInstance(work_item, WorkItem)
        self.assertEqual("BCSM-15 Support new presences in code", work_item.description)
        self.assertEqual("205", work_item.duration)
        self.assertEqual("1412604300000", work_item.date)

    def test__str__(self):
        self.assertEqual(self.row.__str__(), "BCSM-15 Support new presences in code - 15:05 06/10/14")

    def test_is_ignored(self):
        self.assertFalse(self.row.is_ignored())

    def test_is_ignored_when_ignore_tag_is_present(self):
        self.row.data.get("tags").append("ignore")
        self.assertTrue(self.row.is_ignored())

    def test_issue_id(self):
        self.assertEqual("BCSM-15", self.row.issue_id)

    def test_issue_id_return_false_if_no_issue_id(self):
        self.row.data["description"] = "Support new presences in code"
        self.assertFalse(self.row.issue_id)

    def test_save_work_item_raises_exception_if_no_connection(self):
        self.row.connection = "connection"
        work_item = WorkItem()
        work_item.description = "Test Description"
        work_item.duration = "10"
        work_item.date = "1000"
        self.row.work_item = work_item
        self.assertRaises(YoutrackMissingConnectionException, self.row.save_work_item)

    def test_save_work_item_raise_exception_if_issue_doesnt_exist(self):
        self.row.connection.createWorkItem = MagicMock(side_effect=YouTrackException("", mockResponse))
        self.row.data["description"] = "Support new presences in code"
        work_item = WorkItem()
        work_item.description = "Test Description"
        work_item.duration = "10"
        work_item.date = "1000"
        self.row.work_item = work_item
        self.assertRaises(YoutrackIssueNotFoundException, self.row.save_work_item)

    def test_save_work_item_raise_exception_if_work_item_missing_description(self):
        self.row.connection.createWorkItem = MagicMock(side_effect=attribute_error)
        work_item = WorkItem()
        work_item.duration = "10"
        work_item.date = "1000"
        self.row.work_item = work_item
        self.assertRaises(YoutrackWorkItemIncorrectException, self.row.save_work_item)

    def test_save_work_item_raise_exception_if_work_item_missing_duration(self):
        self.row.connection.createWorkItem = MagicMock(side_effect=attribute_error)
        work_item = WorkItem()
        work_item.description = "Support new presences in code"
        work_item.date = "1000"
        self.row.work_item = work_item
        self.assertRaises(YoutrackWorkItemIncorrectException, self.row.save_work_item)

    def test_save_work_item_raise_exception_if_work_item_missing_date(self):
        self.row.connection.createWorkItem = MagicMock(side_effect=attribute_error)
        work_item = WorkItem()
        work_item.duration = "10"
        work_item.description = "Support new presences in code"
        self.row.work_item = work_item
        self.assertRaises(YoutrackWorkItemIncorrectException, self.row.save_work_item)