summaryrefslogtreecommitdiff
path: root/distixlib/ticket_tests.py
blob: 99c0d6405521a9cb4165168e1464cd4fc5f657aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# Copyright 2014  Lars Wirzenius
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# =*= License: GPL-3+ =*=


import email
import time
import unittest

import distixlib


class TicketTests(unittest.TestCase):

    def test_has_empty_metadata_initially(self):
        ticket = distixlib.Ticket()
        self.assertListEqual(ticket.get_metadata_keys(), [])

    def test_has_metadata_object(self):
        ticket = distixlib.Ticket()
        self.assertIsInstance(
            ticket.get_ticket_metadata(),
            distixlib.Metadata)

    def test_replaces_all_metadata(self):
        ticket = distixlib.Ticket()
        metadata = distixlib.Metadata()
        ticket.set_ticket_metadata(metadata)
        self.assertEqual(ticket.get_ticket_metadata(), metadata)

    def test_returns_None_as_ticket_id_initially(self):
        ticket = distixlib.Ticket()
        self.assertIsNone(ticket.get_ticket_id())

    def test_returns_ticket_id_as_set(self):
        ticket = distixlib.Ticket()
        ticket.set_ticket_id('this-is-my-id')
        self.assertEqual(ticket.get_ticket_id(), 'this-is-my-id')

    def test_returns_ticket_id_None_instead_of_words_if_unset(self):
        ticket = distixlib.Ticket()
        self.assertEqual(ticket.get_ticket_id_as_words(), None)

    def test_returns_ticket_id_as_words(self):
        ticket = distixlib.Ticket()
        ticket.set_ticket_id('010203')
        self.assertEqual(
            ticket.get_ticket_id_as_words(),
            'absurd aftermath acme')

    def test_raises_error_if_setting_id_of_ticket_with_id(self):
        ticket = distixlib.Ticket()
        ticket.set_ticket_id('this-is-my-id')
        self.assertRaises(
            distixlib.TicketAlreadyHasId,
            ticket.set_ticket_id,
            'other-id')

    def test_returns_None_as_title_initially(self):
        ticket = distixlib.Ticket()
        self.assertIsNone(ticket.get_title())

    def test_returns_title_as_set(self):
        ticket = distixlib.Ticket()
        ticket.set_title('a title it is')
        self.assertEqual(ticket.get_title(), 'a title it is')

    def test_removes_all_existing_titles_when_setting_title(self):
        ticket = distixlib.Ticket()
        ticket.add_metadata_key_value_pair('title', 'one')
        ticket.add_metadata_key_value_pair('title', 'two')
        ticket.set_title('a title it is')
        self.assertEqual(ticket.get_title(), 'a title it is')

    def test_has_no_messages_initially(self):
        ticket = distixlib.Ticket()
        self.assertListEqual(ticket.get_messages(), [])

    def test_adds_a_message(self):
        ticket = distixlib.Ticket()
        msg = 'this is a fake message'
        ticket.add_message(msg)
        self.assertListEqual(ticket.get_messages(), [msg])

    def test_adding_a_message_makes_ticket_dirty(self):
        ticket = distixlib.Ticket()
        msg = 'this is a fake message'
        ticket.add_message(msg)
        self.assertTrue(ticket.is_dirty())

    def test_remembers_added_messages(self):
        ticket = distixlib.Ticket()
        msg = 'this is a fake message'
        ticket.add_message(msg)
        self.assertListEqual(ticket.get_dirty_messages(), [msg])

    def test_making_ticket_clean_forgets_added_messages(self):
        ticket = distixlib.Ticket()
        msg = 'this is a fake message'
        ticket.add_message(msg)
        ticket.make_clean()
        self.assertListEqual(ticket.get_dirty_messages(), [])

    def test_get_dirty_messages_returns_only_added_messags(self):
        ticket = distixlib.Ticket()
        msg1 = 'msg1'
        msg2 = 'msg2'
        ticket.add_message(msg1)
        ticket.make_clean()
        ticket.add_message(msg2)
        self.assertListEqual(ticket.get_dirty_messages(), [msg2])

    def test_is_clean_initially(self):
        ticket = distixlib.Ticket()
        self.assertFalse(ticket.is_dirty())

    def test_setting_metadata_makes_ticket_dirty(self):
        ticket = distixlib.Ticket()
        metadata = distixlib.Metadata()
        ticket.set_ticket_metadata(metadata)
        self.assertTrue(ticket.is_dirty())

    def test_setting_metadata_key_value_pair_makes_ticket_dirty(self):
        ticket = distixlib.Ticket()
        ticket.add_metadata_key_value_pair('foo', 'bar')
        self.assertTrue(ticket.is_dirty())

    def test_setting_ticket_id_makes_ticket_dirty(self):
        ticket = distixlib.Ticket()
        ticket.set_ticket_id('foo')
        self.assertTrue(ticket.is_dirty())

    def test_setting_ticket_title_makes_ticket_dirty(self):
        ticket = distixlib.Ticket()
        ticket.set_title('foo')
        self.assertTrue(ticket.is_dirty())

    def test_can_be_made_clean(self):
        ticket = distixlib.Ticket()
        ticket.set_title('foo')
        ticket.make_clean()
        self.assertFalse(ticket.is_dirty())

    def test_returns_None_for_newest_message_time_if_no_messages(self):
        ticket = distixlib.Ticket()
        self.assertEqual(ticket.get_newest_message_timestamp(), None)

    def test_returns_time_of_newest_message(self):
        msg = email.message.Message()
        msg['Date'] = 'Wed, 09 Mar 2016 15:37:05 +0200'

        ticket = distixlib.Ticket()
        ticket.add_message(msg)

        t = ticket.get_newest_message_timestamp()
        tm = time.gmtime(t)
        self.assertEqual(tm.tm_year, 2016)
        self.assertEqual(tm.tm_mon, 3)
        self.assertEqual(tm.tm_mday, 9)
        self.assertEqual(tm.tm_hour, 13)
        self.assertEqual(tm.tm_min, 37)
        self.assertEqual(tm.tm_sec, 5)