summaryrefslogtreecommitdiff
path: root/distixlib/ticket_saver_tests.py
blob: 6da9fa09406aed35fe84bbe421244d6ba5b9f56f (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
# 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.mime.text
import os
import shutil
import tempfile
import unittest

import distixlib


class _DummyMessage(email.mime.text.MIMEText):

    def __init__(self, subject):
        body = 'This is a dummy message.'
        email.mime.text.MIMEText.__init__(self, body, _charset='utf-8')
        self['From'] = 'Tomjon <tomjon@example.com>'
        self['Subject'] = subject


class TicketSaverTests(unittest.TestCase):

    def setUp(self):
        self.tempdir = tempfile.mkdtemp()
        self.saver = distixlib.TicketSaver()
        self.ticket = distixlib.Ticket()
        self.ticket.set_ticket_id('foo-id')
        self.message = _DummyMessage('first message')
        self.ticket.add_message(self.message)
        self.ticket.make_clean()

    def tearDown(self):
        shutil.rmtree(self.tempdir)

    def serialise_ticket(self, ticket):
        serialiser = distixlib.MetadataSerialiser()
        return ([serialiser.serialise(ticket.get_ticket_metadata())] +
                sorted(msg.as_string() for msg in ticket.get_messages()))

    def test_create_ticket_raises_error_if_directory_already_exists(self):
        ticket = distixlib.Ticket()
        self.assertRaises(
            distixlib.TicketDirectoryExistsError,
            self.saver.create_ticket_on_disk,
            ticket,
            self.tempdir)

    def test_creates_ticket(self):
        dirname = os.path.join(self.tempdir, self.ticket.get_ticket_id())
        filenames = self.saver.create_ticket_on_disk(self.ticket, dirname)
        self.assertTrue(os.path.isdir(dirname))
        self.assertGreater(len(filenames), 0)

    def fixme_test_created_ticket_can_be_loaded(self):
        dirname = os.path.join(self.tempdir, self.ticket.get_ticket_id())
        self.saver.create_ticket_on_disk(self.ticket, dirname)
        loader = distixlib.TicketLoader()
        loaded_ticket = loader.load_from_directory(dirname)
        self.assertEqual(
            self.serialise_ticket(self.ticket),
            self.serialise_ticket(loaded_ticket))

    def fixme_test_saves_changes_to_existing_ticket(self):
        dirname = os.path.join(self.tempdir, self.ticket.get_ticket_id())
        self.saver.create_ticket_on_disk(self.ticket, dirname)
        self.ticket.add_metadata_key_value_pair('foo', 'bar')
        self.ticket.add_message(_DummyMessage('second message'))
        self.saver.save_changes_to_ticket(self.ticket, dirname)

        loader = distixlib.TicketLoader()
        loaded_ticket = loader.load_from_directory(dirname)
        self.assertEqual(
            self.serialise_ticket(self.ticket),
            self.serialise_ticket(loaded_ticket))

    def test_saving_changes_raises_error_if_directory_doesnt_exist(self):
        dirname = os.path.join(self.tempdir, self.ticket.get_ticket_id())
        self.assertRaises(
            distixlib.TicketDirectoryDoesNotExistError,
            self.saver.save_changes_to_ticket,
            self.ticket,
            dirname)