def test_it(self): from zope.interface import Interface from zope.interface import directlyProvides from karl.models.interfaces import ICatalogSearch from karl.models.interfaces import ICommunity context = testing.DummyModel() directlyProvides(context, ICommunity) context.member_names = set('a',) context.moderator_names = set() request = testing.DummyRequest(params={'val':'a'}) profiles = testing.DummyModel() profile_1 = karltesting.DummyProfile(__name__='a', security_state='active') profile_2 = karltesting.DummyProfile(__name__='b', security_state='active') profile_3 = karltesting.DummyProfile(__name__='c', security_state='active') profile_4 = karltesting.DummyProfile(__name__='d', security_state='inactive') def resolver(docid): d = {1:profile_1, 2:profile_2, 3:profile_3, 4:profile_4} return d.get(docid) def dummy_catalog_search(context): def search(**kw): return 3, [1,2,3], resolver return search karltesting.registerAdapter(dummy_catalog_search, (Interface), ICatalogSearch) response = self._callFUT(context, request) self.assertEqual( response.body, '[{"text": "title", "id": "b"}, ' '{"text": "title", "id": "c"}]')
def setUp(self): testing.cleanUp() self.root = root = karltesting.DummyModel() root['profiles'] = profiles = karltesting.DummyModel() root.users = karltesting.DummyUsers() root['a'] = a = karltesting.DummyModel(creator='chris') root['b'] = b = karltesting.DummyModel(modified_by='chris') class DummySearchAdapter(object): def __init__(self, context): pass def __call__(self, **kw): resolver = lambda x: root.get(x) if kw.get('creator') == 'chris': return 1, ['a'], resolver if kw.get('modified_by') == 'chris': return 1, ['b'], resolver return 0, [], resolver from zope.interface import Interface from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummySearchAdapter, (Interface, Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchAdapter, (Interface,), ICatalogSearch) root.catalog = catalog = karltesting.DummyModel() catalog['creator'] = DummyCatalogIndex() catalog['modified_by'] = DummyCatalogIndex()
def test_known_kind_no_text_term(self): from webob.multidict import MultiDict from karl.models.interfaces import IGroupSearchFactory from repoze.lemonade.testing import registerContentFactory from zope.interface import Interface content = DummyCommunityContent() def search_factory(*arg, **kw): return DummySearchFactory(content) search_factory.icon = "foo.jpg" search_factory.advanced_search = True karltesting.registerUtility(search_factory, IGroupSearchFactory, name="People") context = testing.DummyModel() context.catalog = {} context["profiles"] = profiles = testing.DummyModel() profiles["tweedle dee"] = testing.DummyModel(title="Tweedle Dee") request = testing.DummyRequest(params=MultiDict({"kind": "People"})) request.layout_manager = mock.Mock() from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay registerContentFactory(DummyContent, IDummyContent) karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result["terms"], ["People"]) self.assertEqual(len(result["results"]), 1)
def test_community_search(self): context = testing.DummyModel() context.title = "Citizens" context.catalog = {} context["profiles"] = profiles = testing.DummyModel() profiles["tweedle dee"] = testing.DummyModel(title="Tweedle Dee") from webob.multidict import MultiDict from karl.models.interfaces import ICommunity from zope.interface import directlyProvides directlyProvides(context, ICommunity) request = testing.DummyRequest(params=MultiDict({"body": "yo"})) request.layout_manager = mock.Mock() from zope.interface import Interface from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay from repoze.lemonade.testing import registerContentFactory registerContentFactory(DummyContent, IDummyContent) karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result["community"], "Citizens") self.assertEqual(result["terms"], ["yo"]) self.assertEqual(len(result["results"]), 1)
def test_with_parameter_withresults_withkind(self): def dummy_factory(context, request, term): def results(): return 1, [1], lambda x: testing.DummyModel(title="yo") return results from repoze.lemonade.testing import registerListItem from karl.models.interfaces import IGroupSearchFactory registerListItem(IGroupSearchFactory, dummy_factory, "foo_kind", title="Dummy") context = testing.DummyModel() request = testing.DummyRequest() request.params = {"val": "somesearch", "kind": "foo_kind"} def dummy_adapter(context, request): return dict(title=context.title) from karl.views.interfaces import ILiveSearchEntry karltesting.registerAdapter(dummy_adapter, (testing.DummyModel, testing.DummyRequest), ILiveSearchEntry) response = self._callFUT(context, request) self.assertEqual(response.status, "200 OK") from simplejson import loads results = loads(response.body) self.assertEqual(len(results), 1) self.assertEqual(results[0]["title"], "yo") self.assertEqual(response.content_type, "application/json")
def test_numresults_nokind(self): def dummy_factory(context, request, term): return DummyGroupSearchFactory(lambda x: testing.DummyModel(title="yo")) from repoze.lemonade.testing import registerListItem from karl.models.interfaces import IGroupSearchFactory dummy_factory.livesearch = True registerListItem(IGroupSearchFactory, dummy_factory, "dummy", title="Dummy") context = testing.DummyModel() request = testing.DummyRequest() request.params = {"val": "somesearch"} def dummy_adapter(context, request): return dict(title=context.title) from karl.views.interfaces import ILiveSearchEntry karltesting.registerAdapter(dummy_adapter, (testing.DummyModel, testing.DummyRequest), ILiveSearchEntry) response = self._callFUT(context, request) self.assertEqual(response.status, "200 OK") from simplejson import loads results = loads(response.body) self.assertEqual(response.content_type, "application/json") self.assertEqual(len(results), 5)
def test_set_preferred_communities(self): from zope.interface import Interface from karl.models.interfaces import ICommunityInfo from karl.views.communities import get_preferred_communities context = testing.DummyModel() yo = testing.DummyModel() yo.title = 'Yo' yi = testing.DummyModel() yi.title = 'Yi' context['yo'] = yo context['yi'] = yi profiles = context['profiles'] = testing.DummyModel() foo = profiles['foo'] = testing.DummyModel() foo.preferred_communities = None request = testing.DummyRequest() karltesting.registerDummySecurityPolicy( 'foo', groupids=[ 'group.community:yo:members', 'group.community:yo:moderators', 'group.community:yi:moderators', 'group.community:yang:moderators' ] ) karltesting.registerAdapter(DummyAdapter, (Interface, Interface), ICommunityInfo) communities = ['yi'] self._callFUT(context, request, communities) result = get_preferred_communities(context, request) self.assertEqual(len(result), 1) self.assertEqual(result[0], 'yi')
def test_w_overflow(self): from zope.interface import Interface from karl.models.interfaces import ICommunityInfo context = testing.DummyModel() profiles = context['profiles'] = testing.DummyModel() profiles['foo'] = testing.DummyModel() yo = testing.DummyModel() yo.title = 'Yo' yi = testing.DummyModel() yi.title = 'Yi' context['yo'] = yo context['yi'] = yi request = testing.DummyRequest() karltesting.registerDummySecurityPolicy( 'foo', groupids=[ 'group.community:yo:members', 'group.community:yo:moderators', 'group.community:yi:moderators', 'group.community:yang:moderators' ] ) karltesting.registerAdapter(DummyAdapter, (Interface, Interface), ICommunityInfo) result = self._callFUT(context, request) self.assertEqual(len(result), 2) self.assertEqual(result[0].context, yi)
def test_jquery_list_my_communities_view(self): from zope.interface import Interface from karl.models.interfaces import ICommunityInfo context = testing.DummyModel() communities = context['communities'] = testing.DummyModel() yo = testing.DummyModel() yo.title = 'Yo' yi = testing.DummyModel() yi.title = 'Yi' communities['yo'] = yo communities['yi'] = yi profiles = context['profiles'] = testing.DummyModel() foo = profiles['foo'] = testing.DummyModel() foo.preferred_communities = ['Yi'] request = testing.DummyRequest() karltesting.registerDummySecurityPolicy( 'foo', groupids=[ 'group.community:yo:members', 'group.community:yo:moderators', 'group.community:yi:moderators', 'group.community:yang:moderators' ] ) karltesting.registerAdapter(DummyAdapterWithTitle, (Interface, Interface), ICommunityInfo) result = self._callFUT(context, request) self.assertEqual(result['preferred'], ['Yi']) self.assertEqual(result['show_all'], True) self.assertEqual(len(result['my_communities']), 2)
def test_jquery_set_preferred_view(self): from zope.interface import Interface from karl.models.interfaces import ICommunityInfo context = testing.DummyModel() communities = context['communities'] = testing.DummyModel() yo = testing.DummyModel() yo.title = 'Yo' yi = testing.DummyModel() yi.title = 'Yi' communities['yo'] = yo communities['yi'] = yi profiles = context['profiles'] = testing.DummyModel() foo = profiles['foo'] = testing.DummyModel() foo.preferred_communities = None request = testing.DummyRequest() request.params = RequestParamsWithGetall() request.params['preferred[]'] = ['Yi'] karltesting.registerDummySecurityPolicy( 'foo', [ 'group.community:yo:members', 'group.community:yo:moderators', 'group.community:yi:moderators', ] ) karltesting.registerAdapter(DummyAdapterWithTitle, (Interface, Interface), ICommunityInfo) result = self._callFUT(context, request) self.assertEqual(result['my_communities'][0].context, yi)
def test_it(self): from zope.interface import Interface from zope.interface import directlyProvides from karl.models.interfaces import ICatalogSearch from karl.models.interfaces import ICommunity context = testing.DummyModel() directlyProvides(context, ICommunity) context.member_names = set('a',) context.moderator_names = set() request = testing.DummyRequest(params={'val': 'a'}) profile_1 = karltesting.DummyProfile(__name__='a', security_state='active') profile_2 = karltesting.DummyProfile(__name__='b', security_state='active') profile_3 = karltesting.DummyProfile(__name__='c', security_state='active') profile_4 = karltesting.DummyProfile(__name__='d', security_state='inactive') def resolver(docid): d = {1: profile_1, 2: profile_2, 3: profile_3, 4: profile_4} return d.get(docid) def dummy_catalog_search(context): def search(**kw): return 3, [1, 2, 3], resolver return search karltesting.registerAdapter( dummy_catalog_search, (Interface), ICatalogSearch) data = self._callFUT(context, request) self.assertEqual(data, [{"text": "title", "id": "b"}, {"text": "title", "id": "c"}])
def test_creator_field(self): from zope.interface import Interface from zope.interface import implements from karl.models.interfaces import ICatalogSearch from karl.models.interfaces import IProfile searched_for = {} class Profile: implements(IProfile) profile = Profile() profile.__name__ = "admin" class ProfileSearch: def __init__(self, context): pass def __call__(self, **kw): searched_for.update(kw) return 1, [1], lambda x: profile karltesting.registerAdapter(ProfileSearch, (Interface), ICatalogSearch) query, terms = self._callFUT({"creator": "Ad"}) self.assertEquals(searched_for, {"texts": "Ad", "interfaces": [IProfile]}) from repoze.lemonade.interfaces import IContent self.assertEqual(query["creator"], {"query": ["admin"], "operator": "or"}) self.assertEqual(terms, ["Ad"])
def test_creator_field(self): from zope.interface import Interface from zope.interface import implements from karl.models.interfaces import ICatalogSearch from karl.models.interfaces import IProfile searched_for = {} class Profile: implements(IProfile) profile = Profile() profile.__name__ = 'admin' class ProfileSearch: def __init__(self, context): pass def __call__(self, **kw): searched_for.update(kw) return 1, [1], lambda x: profile karltesting.registerAdapter(ProfileSearch, (Interface), ICatalogSearch) query, terms = self._callFUT({'creator': 'Ad'}) self.assertEquals(searched_for, { 'texts': 'Ad', 'interfaces': [IProfile] }) from repoze.lemonade.interfaces import IContent self.assertEqual(query['creator'], { 'query': ['admin'], 'operator': 'or' }) self.assertEqual(terms, ['Ad'])
def test_community_search(self): context = testing.DummyModel() context.title = 'Citizens' context.catalog = {} context['profiles'] = profiles = testing.DummyModel() profiles['tweedle dee'] = testing.DummyModel(title='Tweedle Dee') from webob.multidict import MultiDict from karl.models.interfaces import ICommunity from zope.interface import directlyProvides directlyProvides(context, ICommunity) request = testing.DummyRequest(params=MultiDict({'body': 'yo'})) request.layout_manager = mock.Mock() from zope.interface import Interface from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay from repoze.lemonade.testing import registerContentFactory registerContentFactory(DummyContent, IDummyContent) karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result['community'], 'Citizens') self.assertEqual(result['terms'], ['yo']) self.assertEqual(len(result['results']), 1)
def test_numresults_withkind(self): def dummy_factory(context, request, term): return DummyGroupSearchFactory( lambda x: testing.DummyModel(title='yo')) from repoze.lemonade.testing import registerListItem from karl.models.interfaces import IGroupSearchFactory registerListItem(IGroupSearchFactory, dummy_factory, 'foo_kind', title='Dummy') context = testing.DummyModel() request = testing.DummyRequest() request.params = { 'val': 'somesearch', 'kind': 'foo_kind', } def dummy_adapter(context, request): return dict(title=context.title) from karl.views.interfaces import ILiveSearchEntry karltesting.registerAdapter(dummy_adapter, (testing.DummyModel, testing.DummyRequest), ILiveSearchEntry) response = self._callFUT(context, request) self.assertEqual(response.status, '200 OK') from simplejson import loads results = loads(response.body) self.assertEqual(response.content_type, 'application/json') self.assertEqual(len(results), 20)
def test_contenttype(self): from osi.utilities.metrics import collect_contenttype_metrics from zope.interface import Interface from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummyContentTypeSearch, (Interface), ICatalogSearch) result = collect_contenttype_metrics(None, 1985, 1) self.assertEqual( { 'blog': { 'created': 1, 'total': 2 }, 'comment': { 'created': 1, 'total': 2 }, 'event': { 'created': 1, 'total': 2 }, 'file': { 'created': 1, 'total': 2 }, 'folder': { 'created': 1, 'total': 2 }, 'wiki': { 'created': 1, 'total': 2 } }, result)
def test_profile(self): from osi.utilities.metrics import collect_profile_metrics from zope.interface import Interface from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummyProfileSearch, (Interface), ICatalogSearch) dummy_users = DummyUsers() site = karltesting.DummyModel() site.users = dummy_users result = collect_profile_metrics(site, 1985, 1) self.assertEqual( { 'biff': { 'created': 1, 'is_staff': False, 'total': 2 }, 'george': { 'created': 1, 'is_staff': True, 'total': 2 } }, result)
def test_user_metrics(self): from osi.utilities.metrics import collect_user_metrics from zope.interface import Interface from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummyUserSearch, (Interface), ICatalogSearch) dummy_users = DummyUsers() site = karltesting.DummyModel() site.users = dummy_users result = collect_user_metrics(site, 1985, 1, DummyWorkflow) self.assertEqual( { 'created': { 'active': 2, 'affiliate': 2, 'core_office': 0, 'former': 0, 'national_foundation': 1, 'staff': 1, 'total': 3 }, 'total': { 'active': 3, 'affiliate': 2, 'core_office': 1, 'former': 1, 'national_foundation': 1, 'staff': 1, 'total': 4 } }, result)
def _registerLayoutProvider(self, **kw): from karl.testing import registerAdapter from zope.interface import Interface from karl.views.interfaces import ILayoutProvider registerAdapter(DummyLayoutProvider, (Interface, Interface), ILayoutProvider)
def test_known_kind_no_text_term(self): from webob.multidict import MultiDict from karl.models.interfaces import IGroupSearchFactory from repoze.lemonade.testing import registerContentFactory from zope.interface import Interface content = DummyCommunityContent() def search_factory(*arg, **kw): return DummySearchFactory(content) search_factory.icon = 'foo.jpg' search_factory.advanced_search = True karltesting.registerUtility(search_factory, IGroupSearchFactory, name='People') context = testing.DummyModel() context.catalog = {} context['profiles'] = profiles = testing.DummyModel() profiles['tweedle dee'] = testing.DummyModel(title='Tweedle Dee') request = testing.DummyRequest(params=MultiDict({'kind': 'People'})) request.layout_manager = mock.Mock() from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay registerContentFactory(DummyContent, IDummyContent) karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result['terms'], ['People']) self.assertEqual(len(result['results']), 1)
def setUp(self): cleanUp() from datetime import datetime site = DummyModel() self.site = site profiles = site['profiles'] = DummyModel() site['bigendians'] = c = DummyModel() c.title = 'Big Endians' c.modified = datetime(2009, 12, 23, 12, 31) c.creator = 'chucknorris' site['littleendians'] = c = DummyModel() c.title = 'Little Endians' c.modified = datetime(2009, 12, 26, 3, 31) c.creator = 'geekbill' p = profiles['chucknorris'] = karltesting.DummyProfile() p.title = 'Chuck Norris' p = profiles['geekbill'] = karltesting.DummyProfile() p.title = 'Bill Haverchuck' from karl.models.interfaces import ICatalogSearch from zope.interface import Interface search = DummyCatalogSearch() def dummy_search_factory(context): return search karltesting.registerAdapter(dummy_search_factory, Interface, ICatalogSearch) self.search = search from karl.views.admin import delete_content_view self.fut = delete_content_view
def test_no_creator(self): from webob.multidict import MultiDict context = testing.DummyModel() context.catalog = {} context['profiles'] = testing.DummyModel() request = testing.DummyRequest(params=MultiDict({'body':'yo'})) from zope.interface import Interface from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay from repoze.lemonade.testing import registerContentFactory registerContentFactory(DummyContent, IDummyContent) class LocalDummyContent(testing.DummyModel): implements(IDummyContent) import datetime title = 'Dummy Content' modified = datetime.datetime(2010, 5, 12, 2, 42) class LocalDummySearch(DummySearch): content = LocalDummyContent() karltesting.registerAdapter(LocalDummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result['terms'], ['yo']) self.assertEqual(len(result['results']), 1)
def test_handle_submit_success(self): self._register() from zope.interface import directlyProvides from karl.models.interfaces import ISite from karl.models.interfaces import ICommunity from repoze.lemonade.interfaces import IContentFactory context = testing.DummyModel() directlyProvides(context, ISite) tags = context.tags = testing.DummyModel() _tagged = [] def _update(item, user, tags): _tagged.append((item, user, tags)) tags.update = _update karltesting.registerDummySecurityPolicy('userid') workflow = self._registerDummyWorkflow() karltesting.registerAdapter(lambda *arg: DummyCommunity, (ICommunity,), IContentFactory) dummy_tool_factory = DummyToolFactory() self._registerAddables([{'name':'blog', 'title':'blog', 'component':dummy_tool_factory}]) context.users = karltesting.DummyUsers({}) context.catalog = karltesting.DummyCatalog({1:'/foo'}) request = testing.DummyRequest() controller = self._makeOne(context, request) converted = {'title':'Thetitle yo', 'description':'thedescription', 'text':'thetext', 'tools': ['blog'], 'security_state': 'private', 'tags': ['foo'], 'default_tool': 'blog', } result = controller.handle_submit(converted) rl = 'http://example.com/thetitle-yo/members/add_existing.html' self.failUnless(result.location.startswith(rl)) community = context['thetitle-yo'] self.assertEqual(community.title, 'Thetitle yo') self.assertEqual(community.description, 'thedescription') self.assertEqual(community.text, 'thetext') self.assertEqual(community.default_tool, 'blog') self.assertEqual(community.creator, 'userid') self.assertEqual(community.modified_by, 'userid') self.assertEqual( context.users.added_groups, [('userid', 'moderators'), ('userid', 'members') ] ) self.assertEqual(dummy_tool_factory.added, True) self.assertEqual(len(_tagged), 1) self.assertEqual(_tagged[0][0], None) self.assertEqual(_tagged[0][1], 'userid') self.assertEqual(_tagged[0][2], ['foo']) self.assertEqual(workflow.transitioned[0]['to_state'], 'private') # try again w/ an invalid default_tool converted['title'] = 'Another title yo' converted['default_tool'] = 'wiki' result = controller.handle_submit(converted) community = context['another-title-yo'] self.failUnless(community.default_tool is None)
def test_with_parameter_withresults(self): from repoze.lemonade.testing import registerListItem from karl.models.interfaces import IGroupSearchFactory from karl.views.interfaces import ILiveSearchEntry def dummy_factory1(context, request, term): pass def dummy_factory2(context, request, term): def results(): return 1, [1], lambda x: testing.DummyModel(title='yo') return results dummy_factory1.livesearch_all = dummy_factory2.livesearch_all = True registerListItem(IGroupSearchFactory, dummy_factory1, 'dummy1', title='Dummy1', sort_key=1) registerListItem(IGroupSearchFactory, dummy_factory2, 'dummy2', title='Dummy2', sort_key=2) context = testing.DummyModel() request = testing.DummyRequest() request.params = { 'val': 'somesearch', } def dummy_adapter(context, request): return dict(title=context.title) karltesting.registerAdapter(dummy_adapter, (testing.DummyModel, testing.DummyRequest), ILiveSearchEntry) results = self._callFUT(context, request) self.assertEqual(len(results), 1) self.assertEqual(results[0]['title'], 'yo')
def test_with_parameter_withresults(self): def dummy_factory1(context, request, term): pass def dummy_factory2(context, request, term): def results(): return 1, [1], lambda x: testing.DummyModel(title='yo') return results dummy_factory1.livesearch = dummy_factory2.livesearch = True from repoze.lemonade.testing import registerListItem from karl.models.interfaces import IGroupSearchFactory registerListItem(IGroupSearchFactory, dummy_factory1, 'dummy1', title='Dummy1', sort_key=1) registerListItem(IGroupSearchFactory, dummy_factory2, 'dummy2', title='Dummy2', sort_key=2) context = testing.DummyModel() request = testing.DummyRequest() request.params = { 'val': 'somesearch', } def dummy_adapter(context, request): return dict(title=context.title) from karl.views.interfaces import ILiveSearchEntry karltesting.registerAdapter(dummy_adapter, (testing.DummyModel, testing.DummyRequest), ILiveSearchEntry) response = self._callFUT(context, request) self.assertEqual(response.status, '200 OK') from simplejson import loads results = loads(response.body) self.assertEqual(len(results), 1) self.assertEqual(results[0]['title'], 'yo') self.assertEqual(response.content_type, 'application/json')
def test_creator_field(self): from zope.interface import Interface from zope.interface import implements from karl.models.interfaces import ICatalogSearch from karl.models.interfaces import IProfile searched_for = {} class Profile: implements(IProfile) profile = Profile() profile.__name__ = 'admin' class ProfileSearch: def __init__(self, context): pass def __call__(self, **kw): searched_for.update(kw) return 1, [1], lambda x: profile karltesting.registerAdapter(ProfileSearch, (Interface), ICatalogSearch) query, terms = self._callFUT({'creator': 'Ad'}) self.assertEquals(searched_for, {'texts': 'Ad', 'interfaces': [IProfile]}) self.assertEqual(query['creator'], {'query': ['admin'], 'operator': 'or'}) self.assertEqual(terms, ['Ad'])
def test_known_since(self): from webob.multidict import MultiDict context = testing.DummyModel() context.catalog = {} context['profiles'] = profiles = testing.DummyModel() profiles['tweedle dee'] = testing.DummyModel(title='Tweedle Dee') request = testing.DummyRequest(params=MultiDict({ 'body': 'yo', 'since': 'week' })) request.layout_manager = mock.Mock() from zope.interface import Interface from karl.content.interfaces import IBlogEntry from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay from repoze.lemonade.testing import registerContentFactory registerContentFactory(DummyContent, IDummyContent) registerContentFactory(DummyContent, IBlogEntry) karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result['terms'], ['yo', 'Past week']) self.assertEqual(len(result['results']), 1)
def test_no_creator(self): from webob.multidict import MultiDict context = testing.DummyModel() context.catalog = {} context['profiles'] = profiles = testing.DummyModel() request = testing.DummyRequest(params=MultiDict({'body': 'yo'})) request.layout_manager = mock.Mock() from zope.interface import Interface from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay from repoze.lemonade.testing import registerContentFactory registerContentFactory(DummyContent, IDummyContent) class LocalDummyContent(testing.DummyModel): implements(IDummyContent) import datetime title = 'Dummy Content' modified = datetime.datetime(2010, 5, 12, 2, 42) class LocalDummySearch(DummySearch): content = LocalDummyContent() karltesting.registerAdapter(LocalDummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result['terms'], ['yo']) self.assertEqual(len(result['results']), 1)
def test_with_parameter_withresults(self): from repoze.lemonade.testing import registerListItem from karl.models.interfaces import IGroupSearchFactory from karl.views.interfaces import ILiveSearchEntry def dummy_factory1(context, request, term): pass def dummy_factory2(context, request, term): def results(): return 1, [1], lambda x: testing.DummyModel(title='yo') return results dummy_factory1.livesearch = dummy_factory2.livesearch = True dummy_factory1.livesearch_all = dummy_factory2.livesearch_all = True registerListItem(IGroupSearchFactory, dummy_factory1, 'dummy1', title='Dummy1', sort_key=1) registerListItem(IGroupSearchFactory, dummy_factory2, 'dummy2', title='Dummy2', sort_key=2) context = testing.DummyModel() request = testing.DummyRequest() request.params = { 'val': 'somesearch', } def dummy_adapter(context, request): return dict(title=context.title) karltesting.registerAdapter(dummy_adapter, (testing.DummyModel, testing.DummyRequest), ILiveSearchEntry) results = self._callFUT(context, request) self.assertEqual(len(results), 1) self.assertEqual(results[0]['title'], 'yo')
def test_known_kind_no_text_term(self): from webob.multidict import MultiDict from karl.models.interfaces import IGroupSearchFactory from repoze.lemonade.testing import registerContentFactory from zope.interface import Interface content = DummyCommunityContent() def search_factory(*arg, **kw): return DummySearchFactory(content) search_factory.icon = 'foo.jpg' search_factory.advanced_search = True karltesting.registerUtility( search_factory, IGroupSearchFactory, name='People') context = testing.DummyModel() context.catalog = {} context['profiles'] = profiles = testing.DummyModel() profiles['tweedle dee'] = testing.DummyModel(title='Tweedle Dee') request = testing.DummyRequest( params=MultiDict({'kind':'People'})) from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay registerContentFactory(DummyContent, IDummyContent) karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result['terms'], ['People']) self.assertEqual(len(result['results']), 1)
def test_community_search(self): context = testing.DummyModel() context.title = 'Citizens' context.catalog = {} context['profiles'] = profiles = testing.DummyModel() profiles['tweedle dee'] = testing.DummyModel(title='Tweedle Dee') from webob.multidict import MultiDict from karl.models.interfaces import ICommunity from zope.interface import directlyProvides directlyProvides(context, ICommunity) request = testing.DummyRequest(params=MultiDict({'body':'yo'})) from zope.interface import Interface from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay from repoze.lemonade.testing import registerContentFactory registerContentFactory(DummyContent, IDummyContent) karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) result = self._callFUT(context, request) self.assertEqual(result['community'], 'Citizens') self.assertEqual(result['terms'], ['yo']) self.assertEqual(len(result['results']), 1)
def _register(self): from zope.interface import Interface from karl.models.interfaces import ICommunityInfo from karl.models.interfaces import ICatalogSearch from karl.models.adapters import CatalogSearch karltesting.registerAdapter(DummyAdapter, (Interface, Interface), ICommunityInfo) karltesting.registerAdapter(CatalogSearch, (Interface), ICatalogSearch)
def test_without_kind_without_terms(self): from webob.multidict import MultiDict from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) request = testing.DummyRequest(params=MultiDict({})) context = testing.DummyModel() result = self._callFUT(context, request) self.assertEqual(result, (None, []))
def test_no_parameter(self): context = testing.DummyModel() request = testing.DummyRequest() from zope.interface import Interface from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) response = self._callFUT(context, request) self.assertEqual(response.status, '400 Bad Request')
def test_handle_submit_success(self): self._register() from zope.interface import directlyProvides from karl.models.interfaces import ISite from karl.models.interfaces import ICommunity from repoze.lemonade.interfaces import IContentFactory context = testing.DummyModel() directlyProvides(context, ISite) tags = context.tags = testing.DummyModel() _tagged = [] def _update(item, user, tags): _tagged.append((item, user, tags)) tags.update = _update karltesting.registerDummySecurityPolicy("userid") workflow = self._registerDummyWorkflow() karltesting.registerAdapter(lambda *arg: DummyCommunity, (ICommunity,), IContentFactory) dummy_tool_factory = DummyToolFactory() self._registerAddables([{"name": "blog", "title": "blog", "component": dummy_tool_factory}]) context.users = karltesting.DummyUsers({}) context.catalog = karltesting.DummyCatalog({1: "/foo"}) request = testing.DummyRequest() controller = self._makeOne(context, request) converted = { "title": "Thetitle yo", "description": "thedescription", "text": "thetext", "tools": ["blog"], "security_state": "private", "tags": ["foo"], "default_tool": "blog", } result = controller.handle_submit(converted) rl = "http://example.com/thetitle-yo/members/add_existing.html" self.failUnless(result.location.startswith(rl)) community = context["thetitle-yo"] self.assertEqual(community.title, "Thetitle yo") self.assertEqual(community.description, "thedescription") self.assertEqual(community.text, "thetext") self.assertEqual(community.default_tool, "blog") self.assertEqual(community.creator, "userid") self.assertEqual(community.modified_by, "userid") self.assertEqual(context.users.added_groups, [("userid", "moderators"), ("userid", "members")]) self.assertEqual(dummy_tool_factory.added, True) self.assertEqual(len(_tagged), 1) self.assertEqual(_tagged[0][0], None) self.assertEqual(_tagged[0][1], "userid") self.assertEqual(_tagged[0][2], ["foo"]) self.assertEqual(workflow.transitioned[0]["to_state"], "private") # try again w/ an invalid default_tool converted["title"] = "Another title yo" converted["default_tool"] = "wiki" result = controller.handle_submit(converted) community = context["another-title-yo"] self.failUnless(community.default_tool is None)
def test_it(self): from karl.models.interfaces import ITagQuery from zope.interface import Interface karltesting.registerAdapter(DummyTagQuery, (Interface, Interface), ITagQuery) request = testing.DummyRequest(params={'val':'ignored'}) context = testing.DummyModel() rows = self._callFUT(context, request) self.assertEqual(rows, [{"text": "foo"}, {"text": "bar"}])
def test_tag_users(self): from karl.models.interfaces import ITagQuery from zope.interface import Interface karltesting.registerAdapter(DummyTagQuery, (Interface, Interface), ITagQuery) context = testing.DummyModel() request = testing.DummyRequest() api = self._makeOne(context, request) self.assertEqual(api.tag_users, ['a'])
def test_it(self): from karl.models.interfaces import ITagQuery from zope.interface import Interface karltesting.registerAdapter(DummyTagQuery, (Interface, Interface), ITagQuery) request = testing.DummyRequest(params={'val': 'ignored'}) context = testing.DummyModel() rows = self._callFUT(context, request) self.assertEqual(rows, [{"text": "foo"}, {"text": "bar"}])
def test_no_searchterm(self): from webob.multidict import MultiDict context = testing.DummyModel() request = testing.DummyRequest(params=MultiDict()) from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummyEmptySearch, (Interface), ICatalogSearch) result = self._callFUT(context, request) self.assertEqual(result['terms'], [])
def _register(self): from zope.interface import Interface from karl.models.interfaces import ITagQuery from pyramid_formish import IFormishRenderer karltesting.registerAdapter(DummyTagQuery, (Interface, Interface), ITagQuery) def renderer(template, args): return '' karltesting.registerUtility(renderer, IFormishRenderer)
def _registerAddables(self, addables): from karl.views.interfaces import IToolAddables from zope.interface import Interface def tool_adapter(context, request): def adapter(): return addables return adapter karltesting.registerAdapter(tool_adapter, (Interface, Interface), IToolAddables)
def test_no_parameter(self): from zope.interface import Interface from karl.models.interfaces import ICatalogSearch context = testing.DummyModel() request = testing.DummyRequest() karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) response = self._callFUT(context, request) self.assertEqual(response.status, '400 Bad Request')
def _register(self): from zope.interface import Interface from karl.models.interfaces import ISQLCatalogSearch from karl.models.interfaces import IGridEntryInfo from karl.models.adapters import CatalogSearch karltesting.registerAdapter(DummyGridEntryAdapter, (Interface, Interface), IGridEntryInfo) karltesting.registerAdapter(CatalogSearch, (Interface), ISQLCatalogSearch)
def test_calendar_search_layout(self): root = testing.DummyModel() root.catalog = {} root['profiles'] = profiles = testing.DummyModel() profiles['tweedle dee'] = testing.DummyModel(title='Tweedle Dee') from webob.multidict import MultiDict from karl.models.interfaces import ICommunity from zope.interface import directlyProvides root['communities'] = testing.DummyModel() community = root['communities']['default'] = testing.DummyModel( title='citizens') office = root['offices'] = testing.DummyModel(title='all rights') directlyProvides(community, ICommunity) directlyProvides(office, ICommunity) request = testing.DummyRequest(params=MultiDict({'body': 'yo'})) request.layout_manager = mock.Mock() from zope.interface import Interface from karl.models.interfaces import ICatalogSearch from karl.views.interfaces import IAdvancedSearchResultsDisplay from repoze.lemonade.testing import registerContentFactory registerContentFactory(DummyContent, IDummyContent) karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchResultsDisplay, (Interface, Interface), IAdvancedSearchResultsDisplay) import karl.views.api save_community = karl.views.api.TemplateAPI.community_layout save_generic = karl.views.api.TemplateAPI.generic_layout try: karl.views.api.TemplateAPI.community_layout = 'COMMUNITY' karl.views.api.TemplateAPI.generic_layout = 'GENERIC' # not on community result = self._callFUT(root, request) self.assertEqual(result['community'], None) self.assertEqual(result['old_layout'], 'GENERIC') self.assertEqual(result['show_search_knobs'], False) # normal community result = self._callFUT(community, request) self.assertEqual(result['community'], 'citizens') self.assertEqual(result['old_layout'], 'COMMUNITY') self.assertEqual(result['show_search_knobs'], False) # office (generic layout, ie, wide here) result = self._callFUT(office, request) self.assertEqual(result['community'], 'all rights') self.assertEqual(result['old_layout'], 'GENERIC') self.assertEqual(result['show_search_knobs'], False) finally: karl.views.api.TemplateAPI.community_layout = save_community karl.views.api.TemplateAPI.generic_layout = save_generic
def _registerContextURL(self): # Technically this turns it into a kind of integration test, since # we end up also testing the OfflineContextURL, but in this case # I think testing this minor integration point is not a performance # hit and is somewhat useful. from karl.adapters.url import OfflineContextURL from pyramid.interfaces import IContextURL from karl.testing import registerAdapter from zope.interface import Interface registerAdapter(OfflineContextURL, (Interface, Interface), IContextURL)
def test_without_kind_with_path(self): from webob.multidict import MultiDict from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummySearch, (Interface), ICatalogSearch) request = testing.DummyRequest(params=MultiDict({'body': 'yo'})) root = testing.DummyModel() context = testing.DummyModel() root['foo'] = context result = self._callFUT(context, request) self.assertEqual(result[0]['total'], 1)
def test_bad_kind(self): from webob.multidict import MultiDict context = testing.DummyModel() request = testing.DummyRequest( params=MultiDict({'kind':'unknown', 'body':'yo'})) from zope.interface import Interface from karl.models.interfaces import ICatalogSearch from pyramid.httpexceptions import HTTPBadRequest karltesting.registerAdapter(DummyEmptySearch, (Interface), ICatalogSearch) self.assertRaises(HTTPBadRequest, self._callFUT, context, request)