def test_search_in_description(self): # HACK - D.A. - 2015-03-09 # This test is based on a bug which does NOT return results found # at root of a workspace (eg a folder) uapi = UserApi(None) groups = [GroupApi(None).get_one(Group.TIM_USER), GroupApi(None).get_one(Group.TIM_MANAGER), GroupApi(None).get_one(Group.TIM_ADMIN)] user = uapi.create_user(email='this.is@user', groups=groups, save_now=True) workspace = WorkspaceApi(user).create_workspace('test workspace', save_now=True) api = ContentApi(user) a = api.create(ContentType.Folder, workspace, None, 'this is randomized folder', True) p = api.create(ContentType.Page, workspace, a, 'this is dummy label content', True) with new_revision(p): p.description = 'This is some amazing test' api.save(p) original_id = p.content_id res = api.search(['dummy']) eq_(1, len(res.all())) item = res.all()[0] eq_(original_id, item.content_id)
def test_search_in_description(self): # HACK - D.A. - 2015-03-09 # This test is based on a bug which does NOT return results found # at root of a workspace (eg a folder) uapi = UserApi(None) groups = [ GroupApi(None).get_one(Group.TIM_USER), GroupApi(None).get_one(Group.TIM_MANAGER), GroupApi(None).get_one(Group.TIM_ADMIN) ] user = uapi.create_user(email='this.is@user', groups=groups, save_now=True) workspace = WorkspaceApi(user).create_workspace('test workspace', save_now=True) api = ContentApi(user) a = api.create(ContentType.Folder, workspace, None, 'this is randomized folder', True) p = api.create(ContentType.Page, workspace, a, 'this is dummy label content', True) with new_revision(p): p.description = 'This is some amazing test' api.save(p) original_id = p.content_id res = api.search(['dummy']) eq_(1, len(res.all())) item = res.all()[0] eq_(original_id, item.content_id)
def test_search_in_label_or_description(self): # HACK - D.A. - 2015-03-09 # This test is based on a bug which does NOT return results found # at root of a workspace (eg a folder) uapi = UserApi(None) groups = [GroupApi(None).get_one(Group.TIM_USER), GroupApi(None).get_one(Group.TIM_MANAGER), GroupApi(None).get_one(Group.TIM_ADMIN)] user = uapi.create_user(email='this.is@user', groups=groups, save_now=True) workspace = WorkspaceApi(user).create_workspace('test workspace', save_now=True) api = ContentApi(user) a = api.create(ContentType.Folder, workspace, None, 'this is randomized folder', True) p1 = api.create(ContentType.Page, workspace, a, 'this is dummy label content', True) p2 = api.create(ContentType.Page, workspace, a, 'Hey ! Jon !', True) with new_revision(p1): p1.description = 'This is some amazing test' with new_revision(p2): p2.description = 'What\'s up ?' api.save(p1) api.save(p2) id1 = p1.content_id id2 = p2.content_id eq_(1, DBSession.query(Workspace).filter(Workspace.label == 'test workspace').count()) eq_(1, DBSession.query(ContentRevisionRO).filter(ContentRevisionRO.label == 'this is randomized folder').count()) eq_(2, DBSession.query(ContentRevisionRO).filter(ContentRevisionRO.label == 'this is dummy label content').count()) eq_(1, DBSession.query(ContentRevisionRO).filter(ContentRevisionRO.description == 'This is some amazing test').count()) eq_(2, DBSession.query(ContentRevisionRO).filter(ContentRevisionRO.label == 'Hey ! Jon !').count()) eq_(1, DBSession.query(ContentRevisionRO).filter(ContentRevisionRO.description == 'What\'s up ?').count()) res = api.search(['dummy', 'jon']) eq_(2, len(res.all())) eq_(True, id1 in [o.content_id for o in res.all()]) eq_(True, id2 in [o.content_id for o in res.all()])
def test_unit__search_exclude_content_under_deleted_or_archived_parents__ok( self): admin = DBSession.query(User).filter( User.email == '*****@*****.**').one() workspace = self._create_workspace_and_test('workspace_1', admin) folder_1 = self._create_content_and_test('folder_1', workspace=workspace, type=ContentType.Folder) folder_2 = self._create_content_and_test('folder_2', workspace=workspace, type=ContentType.Folder) page_1 = self._create_content_and_test('foo', workspace=workspace, type=ContentType.Page, parent=folder_1) page_2 = self._create_content_and_test('bar', workspace=workspace, type=ContentType.Page, parent=folder_2) api = ContentApi(admin) foo_result = api.search(['foo']).all() eq_(1, len(foo_result)) ok_(page_1 in foo_result) bar_result = api.search(['bar']).all() eq_(1, len(bar_result)) ok_(page_2 in bar_result) with new_revision(folder_1): api.delete(folder_1) with new_revision(folder_2): api.archive(folder_2) # Actually ContentApi.search don't filter it foo_result = api.search(['foo']).all() eq_(1, len(foo_result)) ok_(page_1 in foo_result) bar_result = api.search(['bar']).all() eq_(1, len(bar_result)) ok_(page_2 in bar_result) # ContentApi offer exclude_unavailable method to do it foo_result = api.search(['foo']).all() api.exclude_unavailable(foo_result) eq_(0, len(foo_result)) bar_result = api.search(['bar']).all() api.exclude_unavailable(bar_result) eq_(0, len(bar_result))
def search(self, keywords = ''): from tracim.lib.content import ContentApi user = tmpl_context.current_user api = ContentApi(user) items = [] keyword_list = api.get_keywords(keywords) result = api.search(keyword_list) if result: items = result.limit(ContentApi.SEARCH_DEFAULT_RESULT_NB).all() current_user_content = Context(CTX.CURRENT_USER).toDict(user) fake_api = Context(CTX.CURRENT_USER).toDict({'current_user': current_user_content}) search_results = Context(CTX.SEARCH).toDict(items, 'results', 'result_nb') search_results.keywords = keyword_list return DictLikeClass(fake_api=fake_api, search=search_results)
def search(self, keywords = ''): from tracim.lib.content import ContentApi user = tmpl_context.current_user api = ContentApi(user) items = [] keyword_list = api.get_keywords(keywords) result = api.search(keyword_list) if result: items = result.limit(ContentApi.SEARCH_DEFAULT_RESULT_NB).all() api.exclude_unavailable(items) current_user_content = Context(CTX.CURRENT_USER).toDict(user) fake_api = Context(CTX.CURRENT_USER).toDict({'current_user': current_user_content}) search_results = Context(CTX.SEARCH).toDict(items, 'results', 'result_nb') search_results.keywords = keyword_list return DictLikeClass(fake_api=fake_api, search=search_results)
def test_unit__search_exclude_content_under_deleted_or_archived_parents__ok(self): admin = DBSession.query(User).filter(User.email == '*****@*****.**').one() workspace = self._create_workspace_and_test('workspace_1', admin) folder_1 = self._create_content_and_test('folder_1', workspace=workspace, type=ContentType.Folder) folder_2 = self._create_content_and_test('folder_2', workspace=workspace, type=ContentType.Folder) page_1 = self._create_content_and_test('foo', workspace=workspace, type=ContentType.Page, parent=folder_1) page_2 = self._create_content_and_test('bar', workspace=workspace, type=ContentType.Page, parent=folder_2) api = ContentApi(admin) foo_result = api.search(['foo']).all() eq_(1, len(foo_result)) ok_(page_1 in foo_result) bar_result = api.search(['bar']).all() eq_(1, len(bar_result)) ok_(page_2 in bar_result) with new_revision(folder_1): api.delete(folder_1) with new_revision(folder_2): api.archive(folder_2) # Actually ContentApi.search don't filter it foo_result = api.search(['foo']).all() eq_(1, len(foo_result)) ok_(page_1 in foo_result) bar_result = api.search(['bar']).all() eq_(1, len(bar_result)) ok_(page_2 in bar_result) # ContentApi offer exclude_unavailable method to do it foo_result = api.search(['foo']).all() api.exclude_unavailable(foo_result) eq_(0, len(foo_result)) bar_result = api.search(['bar']).all() api.exclude_unavailable(bar_result) eq_(0, len(bar_result))
def test_search_in_label_or_description(self): # HACK - D.A. - 2015-03-09 # This test is based on a bug which does NOT return results found # at root of a workspace (eg a folder) uapi = UserApi(None) groups = [ GroupApi(None).get_one(Group.TIM_USER), GroupApi(None).get_one(Group.TIM_MANAGER), GroupApi(None).get_one(Group.TIM_ADMIN) ] user = uapi.create_user(email='this.is@user', groups=groups, save_now=True) workspace = WorkspaceApi(user).create_workspace('test workspace', save_now=True) api = ContentApi(user) a = api.create(ContentType.Folder, workspace, None, 'this is randomized folder', True) p1 = api.create(ContentType.Page, workspace, a, 'this is dummy label content', True) p2 = api.create(ContentType.Page, workspace, a, 'Hey ! Jon !', True) with new_revision(p1): p1.description = 'This is some amazing test' with new_revision(p2): p2.description = 'What\'s up ?' api.save(p1) api.save(p2) id1 = p1.content_id id2 = p2.content_id eq_( 1, DBSession.query(Workspace).filter( Workspace.label == 'test workspace').count()) eq_( 1, DBSession.query(ContentRevisionRO).filter( ContentRevisionRO.label == 'this is randomized folder').count()) eq_( 2, DBSession.query(ContentRevisionRO).filter( ContentRevisionRO.label == 'this is dummy label content').count()) eq_( 1, DBSession.query(ContentRevisionRO).filter( ContentRevisionRO.description == 'This is some amazing test').count()) eq_( 2, DBSession.query(ContentRevisionRO).filter( ContentRevisionRO.label == 'Hey ! Jon !').count()) eq_( 1, DBSession.query(ContentRevisionRO).filter( ContentRevisionRO.description == 'What\'s up ?').count()) res = api.search(['dummy', 'jon']) eq_(2, len(res.all())) eq_(True, id1 in [o.content_id for o in res.all()]) eq_(True, id2 in [o.content_id for o in res.all()])