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

Last change on this file since 2683 was 2612, checked in by liebster, 14 years ago

Clean up test_ngenresForNotExtended test

  • Property svn:eol-style set to native
File size: 8.3 KB
RevLine 
[2394]1from base import *
2from DateTime import DateTime
3
[2400]4from zope.component import getSiteManager, getGlobalSiteManager
5from archetypes.schemaextender.interfaces import ISchemaExtender
6
7from Products.CMFPlone.utils import _createObjectByType
8
[2394]9class TestNewsSitemapsXML(FunctionalTestCase):
10
11    def afterSetUp(self):
12        super(TestNewsSitemapsXML, self).afterSetUp()
13        # Create news sitemaps
[2395]14        _createObjectByType("Sitemap", self.portal, id="news-sitemaps",
15                            sitemapType="news", portalTypes=("News Item",))
16        self.portal["news-sitemaps"].at_post_create_script()
[2394]17        # Add testing news item to portal
[2395]18        self.pubdate = (DateTime()+1).strftime("%Y-%m-%d")
[2538]19        self.my_news = _createObjectByType('News Item', self.portal, id='my_news')
[2397]20        self.my_news.edit(text="Test news item", title="First news (test)", language="ua",
[2422]21                          effectiveDate=self.pubdate, gsm_access="Registration",
22                          gsm_genres=("PressRelease",), gsm_stock="NASDAQ:AMAT, BOM:500325")
[2538]23        self.workflow.doActionFor(self.my_news, "publish")
[2397]24        self.reParse()
25
26    def reParse(self):
[2394]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())
[2395]53        self.assert_("First news" in self.data, "No 'First news' in data")
[2394]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())
[2395]59        self.assert_(self.pubdate in self.data, "No %s in data" % self.pubdate)
[2394]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_naccess(self):
[2397]66        # Test when access present
67        self.assert_("n:access" in self.start.keys())
68        self.assert_("Registration" in self.data, "No 'Registration' in data")
[2394]69
[2422]70    def test_ngenres(self):
[2399]71        # Test when genres present
[2397]72        self.assert_("n:genres" in self.start.keys())
73        self.assert_("PressRelease" in self.data, "No 'PressRelease' in data")
[2394]74
[2410]75    def test_ngenresMultiple(self):
76        # Test multiple genres
77        self.my_news.edit(gsm_genres=("PressRelease", "Blog"))
78        self.my_news.reindexObject()
79        self.reParse()
80        self.assert_("n:genres" in self.start.keys())
81        self.assert_("PressRelease, Blog" in self.data, "No 'PressRelease, Blog' in data")
[2394]82
[2413]83    def test_ngenresEmpty(self):
84        # No genres should present if it's not updated
[2422]85        self.my_news.edit(gsm_genres=[])
[2413]86        self.my_news.reindexObject()
87        self.reParse()
88        self.assertNotEqual("n:genres" in self.start.keys(), True)
[2410]89
[2413]90    def test_ngenresForNotExtended(self):
91        # No genres should present for not extended content type
[2538]92        my_doc = _createObjectByType('Document', self.portal, id='my_doc')
[2413]93        my_doc.edit(text="Test document")
[2538]94        self.workflow.doActionFor(my_doc, "publish")
[2422]95        self.portal["news-sitemaps"].edit(portalTypes=("Document",))
[2413]96        self.reParse()
97        self.assertNotEqual("n:genres" in self.start.keys(), True)
[2410]98
[2422]99    def test_nstock_tickers(self):
100        # Test n:stock_tickers
101        self.assert_("n:stock_tickers" in self.start.keys())
102        self.assert_("NASDAQ:AMAT, BOM:500325" in self.data, "No 'NASDAQ:AMAT, BOM:500325' in data")
[2413]103
[2422]104
[2415]105class TestNewsSitemapsXMLDefaultObject(FunctionalTestCase):
106
107    def afterSetUp(self):
108        super(TestNewsSitemapsXMLDefaultObject, self).afterSetUp()
109        # Create news sitemaps
110        _createObjectByType("Sitemap", self.portal, id="news-sitemaps",
111                            sitemapType="news", portalTypes=("News Item",))
112        self.portal["news-sitemaps"].at_post_create_script()
113        # Add minimal testing news item to portal
114        self.pubdate = (DateTime()+1).strftime("%Y-%m-%d")
[2538]115        self.my_news = _createObjectByType('News Item', self.portal, id='my_news')
[2415]116        self.my_news.edit(effectiveDate=self.pubdate)
[2538]117        self.workflow.doActionFor(self.my_news, "publish")
[2415]118        self.reParse()
119
120    def reParse(self):
121        # Parse news sitemap
122        self.sitemap = self.publish("/"+self.portal.absolute_url(1) + "/news-sitemaps",
123                                    "%s:%s" % (portal_owner, default_password)).getBody()
124        parsed_sitemap = parse(self.sitemap)
125        self.start = parsed_sitemap["start"]
126        self.data = parsed_sitemap["data"]
127
128    def test_nnews(self):
129        self.assert_("n:news" in self.start.keys())
130       
131    def test_npublication(self):
132        self.assert_("n:publication" in self.start.keys())
133        self.assert_("n:name" in self.start.keys())
134        self.assert_("my_news" in self.data, "No 'First news' in data")
135        self.assert_("n:language" in self.start.keys())
136        self.assert_("en" in self.data, "No 'en' in data")
137
138    def test_npublication_date(self):
139        self.assert_("n:publication_date" in self.start.keys())
140        self.assert_(self.pubdate in self.data, "No %s in data" % self.pubdate)
141       
142    def test_ntitle(self):
143        self.assert_("n:title" in self.start.keys())
144        self.assert_("my_news" in self.data, "No 'First news (test)' in data")
145
146    def test_no_naccess(self):
147        self.assert_("n:access" not in self.start.keys())
148
149    def test_no_ngenres(self):
150        self.assert_("n:genres" not in self.start.keys())
151
152    def test_no_keywords(self):
153        self.assert_("n:keywords" not in self.start.keys())
154
[2422]155    def test_no_keywords(self):
156        self.assert_("n:stock_tickers" not in self.start.keys())
[2415]157
[2422]158
[2400]159from Products.ATContentTypes.interface import IATNewsItem
160from quintagroup.plonegooglesitemaps.content.newsextender import NewsExtender
161
[2410]162class TestSchemaExtending(TestCase):
[2400]163
164    def afterSetUp(self):
[2410]165        super(TestSchemaExtending, self).afterSetUp()
[2538]166        self.my_doc = _createObjectByType('Document', self.portal, id='my_doc')
167        self.my_news = _createObjectByType('News Item', self.portal, id='my_news')
[2400]168
[2410]169    def testExtendNewsItemByDefault(self):
[2400]170        # Neither of object has extended fields
171        self.assertNotEqual(self.my_news.getField("gsm_access"), None)
172        self.assertNotEqual(self.my_news.getField("gsm_genres"), None)
[2422]173        self.assertNotEqual(self.my_news.getField("gsm_stock"), None)
[2400]174        self.assertEqual(self.my_doc.getField("gsm_access"), None)
175        self.assertEqual(self.my_doc.getField("gsm_genres"), None)
[2422]176        self.assertEqual(self.my_doc.getField("gsm_stock"), None)
[2410]177   
[2400]178    def testRegistrationOnLocalSM(self):
179        """SchemaExtender adapters must be registered
180           in Local SiteManager only.
181        """
182        localsm = getSiteManager(self.portal)
183        globalsm = getGlobalSiteManager()
184        # Now register SchemaExtender adapter and
185        # check if it present in Local SiteManger only
[2410]186        self.assertNotEqual(localsm, globalsm)
[2400]187        self.assertNotEqual(localsm.queryAdapter(self.my_news, ISchemaExtender), None)
188        self.assertEqual(globalsm.queryAdapter(self.my_news, ISchemaExtender), None)
189
190
[2394]191def test_suite():
192    from unittest import TestSuite, makeSuite
193    suite = TestSuite()
194    suite.addTest(makeSuite(TestNewsSitemapsXML))
[2415]195    suite.addTest(makeSuite(TestNewsSitemapsXMLDefaultObject))
[2410]196    suite.addTest(makeSuite(TestSchemaExtending))
[2394]197    return suite
Note: See TracBrowser for help on using the repository browser.