# 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)