# Copyright (C) 2018 Patrick Totzke # This file is released under the GNU GPL, version 3 or a later revision. # For further details see the COPYING file """Test suite for alot.db.manager module.""" import tempfile import textwrap import os import shutil import unittest from unittest import mock from alot.db import manager from alot.settings.const import settings from notmuch import Database from .. import utilities class TestIsSubdirOf(unittest.TestCase): def test_both_paths_absolute_matching(self): superpath = '/a/b' subpath = '/a/b/c/d.rst' result = manager._is_subdir_of(subpath, superpath) self.assertTrue(result) def test_both_paths_absolute_not_matching(self): superpath = '/a/z' subpath = '/a/b/c/d.rst' result = manager._is_subdir_of(subpath, superpath) self.assertFalse(result) def test_both_paths_relative_matching(self): superpath = 'a/b' subpath = 'a/b/c/d.rst' result = manager._is_subdir_of(subpath, superpath) self.assertTrue(result) def test_both_paths_relative_not_matching(self): superpath = 'a/z' subpath = 'a/b/c/d.rst' result = manager._is_subdir_of(subpath, superpath) self.assertFalse(result) def test_relative_path_and_absolute_path_matching(self): superpath = 'a/b' subpath = os.path.join(os.getcwd(), 'a/b/c/d.rst') result = manager._is_subdir_of(subpath, superpath) self.assertTrue(result) class TestDBManager(utilities.TestCaseClassCleanup): @classmethod def setUpClass(cls): # create temporary notmuch config with tempfile.NamedTemporaryFile(mode='w+', delete=False) as f: f.write(textwrap.dedent("""\ [maildir] synchronize_flags = true """)) cls.notmuch_config_path = f.name cls.addClassCleanup(os.unlink, f.name) # define an empty notmuch database in a temporary directory cls.dbpath = tempfile.mkdtemp() cls.db = Database(path=cls.dbpath, create=True) cls.db.close() cls.manager = manager.DBManager(cls.dbpath) # clean up temporary database cls.addClassCleanup(shutil.rmtree, cls.dbpath) # let global settings manager read our temporary notmuch config settings.read_notmuch_config(cls.notmuch_config_path)