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
|
#
# Copyright (C) 2010 Wikkid Developers.
#
# This software is licensed under the GNU Affero General Public License
# version 3 (see the file LICENSE).
"""Tests for the model objects."""
from operator import attrgetter
from wikkid.interface.resource import (
IDefaultPage, IDirectoryResource, IMissingResource, IRootResource,
IWikiTextFile)
from wikkid.tests.factory import FactoryTestCase
class TestBaseRootResource(FactoryTestCase):
"""Tests for BaseResource.root_resource."""
def test_root_can_get_root(self):
"""Even the root resource can get the root resource."""
factory = self.make_factory()
resource = factory.get_resource_at_path('/')
root = resource.root_resource
self.assertProvides(root, IRootResource)
def test_missing_can_get_root(self):
"""Even the root resource can get the root resource."""
factory = self.make_factory()
resource = factory.get_resource_at_path('/MissingPage')
root = resource.root_resource
self.assertProvides(root, IRootResource)
class TestBaseDefaultResource(FactoryTestCase):
"""Tests for BaseResource.default_resource."""
def test_default_when_missing(self):
"""If the default is missing, then a missing resource is returned for
the default path.
"""
factory = self.make_factory()
resource = factory.get_resource_at_path('/')
home = resource.default_resource
self.assertProvides(home, IMissingResource)
self.assertProvides(home, IDefaultPage)
self.assertEqual('/Home', home.preferred_path)
def test_default_when_exists(self):
"""If the default exists, the default wiki page is returned."""
factory = self.make_factory([
('Home.txt', 'Some content'),
])
resource = factory.get_resource_at_path('/')
home = resource.default_resource
self.assertProvides(home, IWikiTextFile)
self.assertProvides(home, IDefaultPage)
self.assertEqual('/Home', home.preferred_path)
def test_default_different_name(self):
"""If the default name has been overridden, then the default_resource
attribute returns the correct name.
"""
factory = self.make_factory([
('FrontPage.txt', 'Some content'),
])
factory.DEFAULT_PATH = 'FrontPage'
resource = factory.get_resource_at_path('/')
home = resource.default_resource
self.assertProvides(home, IWikiTextFile)
self.assertProvides(home, IDefaultPage)
self.assertEqual('/FrontPage', home.preferred_path)
class TestBaseParent(FactoryTestCase):
"""Tests for the BaseResource.parent attribute."""
def test_parent_for_root(self):
"""Root shouldn't have a parent."""
factory = self.make_factory()
root = factory.get_root_resource()
self.assertIs(None, root.parent)
def test_parent_for_default(self):
"""The default's parent should be root."""
factory = self.make_factory()
home = factory.get_default_resource()
parent = home.parent
self.assertProvides(parent, IRootResource)
def test_parent_for_page(self):
"""Any page in the root directory has root as its parent."""
factory = self.make_factory([
('SomeDir.txt', 'Some content'),
])
home = factory.get_resource_at_path('/SomeDir')
parent = home.parent
self.assertProvides(parent, IRootResource)
def test_parent_for_subpage(self):
"""The path of the parent should be the parent directory."""
factory = self.make_factory([
('SomeDir/', None),
('SomeDir.txt', 'Some content'),
])
missing = factory.get_resource_at_path('/SomeDir/NoPage')
parent = missing.parent
expected = factory.get_resource_at_path('/SomeDir')
self.assertEquals(expected.preferred_path, parent.preferred_path)
class TestDirectoryResource(FactoryTestCase):
def test_implements_interface(self):
"""DirectoryResource implements IDirectoryResource."""
factory = self.make_factory([
('SomeDir/', None),
])
dir_resource = factory.get_resource_at_path('/SomeDir')
self.assertProvides(dir_resource, IDirectoryResource)
def test_directory_and_pages(self):
"""Both the directory and wiki page are returned."""
factory = self.make_factory([
('SomeDir/', None),
('SomeDir.txt', 'Some content'),
])
dir_resource = factory.get_resource_at_path('/')
listing = dir_resource.get_listing()
some_dir, some_wiki = sorted(
listing, key=attrgetter('path'))
self.assertEqual('/SomeDir', some_dir.path)
self.assertEqual('/SomeDir.txt', some_wiki.path)
def test_user_for_file(self):
"""Test that the user is a user object."""
factory = self.make_factory()
page = factory.get_resource_at_path('/testing')
page.put_bytes(
'hello world', 'Test User <test@example.com>', None, None)
new_page = factory.get_resource_at_path('/testing')
user = new_page.last_modified_by
self.assertEqual('Test User', user.display_name)
self.assertEqual('test@example.com', user.email)
|