source: products/quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/tests/testNewsSitemaps.py @ 2400

Last change on this file since 2400 was 2400, checked in by mylan, 14 years ago

#131: Added tests for dynamic schema extending

  • Property svn:eol-style set to native
File size: 6.5 KB
Line 
1from base import *
2from DateTime import DateTime
3
4from zope.component import getSiteManager, getGlobalSiteManager
5from archetypes.schemaextender.interfaces import ISchemaExtender
6
7from Products.CMFPlone.utils import _createObjectByType
8
9class TestNewsSitemapsXML(FunctionalTestCase):
10
11    def afterSetUp(self):
12        super(TestNewsSitemapsXML, self).afterSetUp()
13        # Create news sitemaps
14        _createObjectByType("Sitemap", self.portal, id="news-sitemaps",
15                            sitemapType="news", portalTypes=("News Item",))
16        self.portal["news-sitemaps"].at_post_create_script()
17        # Add testing news item to portal
18        self.pubdate = (DateTime()+1).strftime("%Y-%m-%d")
19        my_news = self.portal.invokeFactory("News Item", id="my_news")
20        self.my_news = self.portal["my_news"]
21        self.my_news.edit(text="Test news item", title="First news (test)", language="ua",
22                          effectiveDate=self.pubdate)
23        self.portal.portal_workflow.doActionFor(self.my_news, "publish")
24        self.reParse()
25
26    def reParse(self):
27        # Parse news sitemap
28        self.sitemap = self.publish("/"+self.portal.absolute_url(1) + "/news-sitemaps",
29                                    "%s:%s" % (portal_owner, default_password)).getBody()
30        parsed_sitemap = parse(self.sitemap)
31        self.start = parsed_sitemap["start"]
32        self.data = parsed_sitemap["data"]
33
34    def test_urlset(self):
35        self.assert_("urlset" in self.start.keys())
36        urlset = self.start["urlset"]
37        self.assertEqual(urlset.get("xmlns", ""), "http://www.sitemaps.org/schemas/sitemap/0.9")
38        self.assertEqual(urlset.get("xmlns:n", ""), "http://www.google.com/schemas/sitemap-news/0.9")
39
40    def test_url(self):
41        self.assert_("url" in self.start.keys())
42
43    def test_loc(self):
44        self.assert_("loc" in self.start.keys())
45        self.assert_(self.portal.absolute_url() + "/my_news" in self.data)
46
47    def test_nnews(self):
48        self.assert_("n:news" in self.start.keys())
49       
50    def test_npublication(self):
51        self.assert_("n:publication" in self.start.keys())
52        self.assert_("n:name" in self.start.keys())
53        self.assert_("First news" in self.data, "No 'First news' in data")
54        self.assert_("n:language" in self.start.keys())
55        self.assert_("ua" in self.data, "No 'ua' in data")
56
57    def test_npublication_date(self):
58        self.assert_("n:publication_date" in self.start.keys())
59        self.assert_(self.pubdate in self.data, "No %s in data" % self.pubdate)
60       
61    def test_ntitle(self):
62        self.assert_("n:title" in self.start.keys())
63        self.assert_("First news (test)" in self.data, "No 'First news (test)' in data")
64
65    def test_no_naccess(self):
66        self.assert_("n:access" not in self.start.keys())
67
68    def test_no_ngenres(self):
69        self.assert_("n:genres" not in self.start.keys())
70
71    def test_naccess(self):
72        # Test when access present
73        self.my_news._setProperty("gsm_access", "Registration")
74        self.my_news.reindexObject()
75        self.reParse()
76        self.assert_("n:access" in self.start.keys())
77        self.assert_("Registration" in self.data, "No 'Registration' in data")
78
79    def test_ngenres(self):
80        # Test when genres present
81        self.my_news._setProperty("gsm_genres", "PressRelease")
82        self.my_news.reindexObject()
83        self.reParse()
84        self.assert_("n:genres" in self.start.keys())
85        self.assert_("PressRelease" in self.data, "No 'PressRelease' in data")
86
87
88from Products.ATContentTypes.interface import IATNewsItem
89from quintagroup.plonegooglesitemaps.content.newsextender import NewsExtender
90from quintagroup.plonegooglesitemaps.utils import addLocalSchemaExtenderAdapter
91from quintagroup.plonegooglesitemaps.utils import removeLocalSchemaExtenderAdapter
92
93class TestDynamicSchemaExtending(TestCase):
94
95    def afterSetUp(self):
96        super(TestDynamicSchemaExtending, self).afterSetUp()
97        self.loginAsPortalOwner()
98        # Add testing news item to portal
99        my_news = self.portal.invokeFactory("News Item", id="my_news")
100        self.my_news = self.portal["my_news"]
101        my_doc = self.portal.invokeFactory("Document", id="my_doc")
102        self.my_doc = self.portal["my_doc"]
103
104    def testNotExtendByDefault(self):
105        # Neither of object has extended fields
106        self.assertEqual(self.my_news.getField("gsm_access"), None)
107        self.assertEqual(self.my_news.getField("gsm_genres"), None)
108        self.assertEqual(self.my_doc.getField("gsm_access"), None)
109        self.assertEqual(self.my_doc.getField("gsm_genres"), None)
110   
111    def testExtend(self):
112        addLocalSchemaExtenderAdapter(self.portal, IATNewsItem)
113        self.assertNotEqual(self.my_news.getField("gsm_access"), None)
114        self.assertNotEqual(self.my_news.getField("gsm_genres"), None)
115        # But for document schema should not extended
116        self.assertEqual(self.my_doc.getField("gsm_access"), None)
117        self.assertEqual(self.my_doc.getField("gsm_genres"), None)
118
119    def testRemoveExtend(self):
120        addLocalSchemaExtenderAdapter(self.portal, IATNewsItem)
121        self.assertNotEqual(self.my_news.getField("gsm_access"), None)
122        self.assertNotEqual(self.my_news.getField("gsm_genres"), None)
123        removeLocalSchemaExtenderAdapter(self.portal, IATNewsItem)
124        self.assertEqual(self.my_news.getField("gsm_access"), None)
125        self.assertEqual(self.my_news.getField("gsm_genres"), None)
126
127    def testRegistrationOnLocalSM(self):
128        """SchemaExtender adapters must be registered
129           in Local SiteManager only.
130        """
131        localsm = getSiteManager(self.portal)
132        globalsm = getGlobalSiteManager()
133        # Check if by default neither site manger
134        # has ISchemaExtender adapter registered in.
135        self.assertNotEqual(localsm, globalsm)
136        self.assertEqual(localsm.queryAdapter(self.my_news, ISchemaExtender), None)
137        self.assertEqual(globalsm.queryAdapter(self.my_news, ISchemaExtender), None)
138        # Now register SchemaExtender adapter and
139        # check if it present in Local SiteManger only
140        addLocalSchemaExtenderAdapter(self.portal, IATNewsItem)
141        self.assertNotEqual(localsm.queryAdapter(self.my_news, ISchemaExtender), None)
142        self.assertEqual(globalsm.queryAdapter(self.my_news, ISchemaExtender), None)
143
144
145def test_suite():
146    from unittest import TestSuite, makeSuite
147    suite = TestSuite()
148    suite.addTest(makeSuite(TestNewsSitemapsXML))
149    suite.addTest(makeSuite(TestDynamicSchemaExtending))
150    return suite
Note: See TracBrowser for help on using the repository browser.