# 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 .
#
# =*= 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 '
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)