def test_ticket_search_returns_data_only_for_the_requested_search_value(): TicketFactory() TicketFactory() ticket = TicketFactory() search = Search(search_term='_id', search_value=ticket._id) qs = search.search_tickets() assert len(qs) == 1 assert qs[0]._id == ticket._id assert qs[0].url == ticket.url assert qs[0].external_id == ticket.external_id assert qs[0].created_at == ticket.created_at assert qs[0].type == ticket.type assert qs[0].subject == ticket.subject assert qs[0].description == ticket.description assert qs[0].priority == ticket.priority assert qs[0].status == ticket.status assert qs[0].submitter_id == ticket.submitter_id assert qs[0].assignee_id == ticket.assignee_id assert qs[0].organization_id == ticket.organization_id assert qs[0].tags == ticket.tags assert qs[0].has_incidents == ticket.has_incidents assert qs[0].due_at == ticket.due_at assert qs[0].via == ticket.via
def test_user_search_returns_data_only_for_the_requested_search_value(): UserFactory() UserFactory() user = UserFactory() search = Search(search_term='_id', search_value=user._id) qs = search.search_users() assert len(qs) == 1 assert qs[0]._id == user._id assert qs[0].url == user.url assert qs[0].external_id == user.external_id assert qs[0].name == user.name assert qs[0].alias == user.alias assert qs[0].created_at == user.created_at assert qs[0].active == user.active assert qs[0].verified == user.verified assert qs[0].shared == user.shared assert qs[0].locale == user.locale assert qs[0].timezone == user.timezone assert qs[0].last_login_at == user.last_login_at assert qs[0].email == user.email assert qs[0].phone == user.phone assert qs[0].signature == user.signature assert qs[0].organization_id == user.organization_id assert qs[0].tags == user.tags assert qs[0].suspended == user.suspended assert qs[0].role == user.role assert qs[0].submitted_tickets.count() == 0 assert qs[0].assigned_tickets.count() == 0
def test_user_search_using_foreign_key_organization_id_as_search_term(): user = UserFactory() search = Search(search_term='organization_id', search_value=user.organization_id._id) qs = search.search_users() assert len(qs) == 1 assert qs[0].organization_id._id == user.organization_id._id
def test_ticket_search_is_case_insensitive(): TicketFactory(via='web') search = Search(search_term='via', search_value='WEB') qs = search.search_tickets() assert len(qs) == 1 assert qs[0].via == 'web'
def test_organization_search_returns_data_partially_matching_requested_search_value(): OrganizationFactory(details='MegaCorp') search = Search(search_term='details', search_value='corp') qs = search.search_organizations() assert len(qs) == 1 assert qs[0].details == 'MegaCorp'
def test_organization_search_for_a_character_field_lookup(): OrganizationFactory(name='testName') search = Search(search_term='name', search_value='testName') qs = search.search_organizations() assert len(qs) == 1 assert qs[0].name == 'testName'
def test_user_search_returns_data_partially_matching_requested_search_value(): UserFactory(role='admin') search = Search(search_term='role', search_value='adm') qs = search.search_users() assert len(qs) == 1 assert qs[0].role == 'admin'
def test_user_search_is_case_insensitive(): UserFactory(role='admin') search = Search(search_term='role', search_value='ADMIN') qs = search.search_users() assert len(qs) == 1 assert qs[0].role == 'admin'
def test_organization_search_for_a_boolean_field_lookup(): OrganizationFactory(shared_tickets='true') search = Search(search_term='shared_tickets', search_value='true') qs = search.search_organizations() assert len(qs) == 1 assert qs[0].shared_tickets == 'true'
def test_organization_search_retrieves_data_when_value_is_blank(): OrganizationFactory(name='') search = Search(search_term='name', search_value='') qs = search.search_organizations() assert len(qs) == 1 assert qs[0].name == ''
def test_organization_search_is_case_insensitive(): OrganizationFactory(details='MegaCorp') search = Search(search_term='details', search_value='megacorp') qs = search.search_organizations() assert len(qs) == 1 assert qs[0].details == 'MegaCorp'
def test_ticket_search_using_foreign_key_submitter_id_as_search_term(): ticket = TicketFactory() search = Search(search_term='submitter_id', search_value=ticket.submitter_id._id) qs = search.search_tickets() assert len(qs) == 1 assert qs[0].submitter_id._id == ticket.submitter_id._id
def test_ticket_search_returns_data_partially_matching_requested_search_value( ): TicketFactory(via='web') search = Search(search_term='via', search_value='we') qs = search.search_tickets() assert len(qs) == 1 assert qs[0].via == 'web'
def test_ticket_search_using_foreign_key_organization_id_as_search_term(): ticket = TicketFactory() search = Search(search_term='organization_id', search_value=ticket.organization_id._id) qs = search.search_tickets() assert len(qs) == 1 assert qs[0].organization_id._id == ticket.organization_id._id
def test_organization_search_for_a_list_field_lookup(): OrganizationFactory( domain_names='["kage.com", "ecratic.com", "endipin.com", "zentix.com"]' ) search = Search(search_term='domain_names', search_value='kage') qs = search.search_organizations() assert len(qs) == 1 assert qs[0].domain_names == '["kage.com", "ecratic.com", "endipin.com", "zentix.com"]'
def test_user_search_returns_all_data_matching_requested_search_value(): for _ in range(3): UserFactory(role='admin') search = Search(search_term='role', search_value='admin') qs = search.search_users() assert len(qs) == 3 assert qs[0].role == 'admin' assert qs[1].role == 'admin' assert qs[2].role == 'admin'
def test_user_search_returns_ticket_objects_assigned_to_user(): user = UserFactory() for _ in range(3): TicketFactory(assignee_id=user) search = Search(search_term='_id', search_value=user._id) qs = search.search_users() assert len(qs) == 1 assert qs[0]._id == user._id assert qs[0].assigned_tickets.count() == 3
def test_ticket_search_returns_all_data_matching_requested_search_value(): for _ in range(3): TicketFactory(via='web') search = Search(search_term='via', search_value='web') qs = search.search_tickets() assert len(qs) == 3 assert qs[0].via == 'web' assert qs[1].via == 'web' assert qs[2].via == 'web'
def test_user_search_does_not_return_tickets_when_no_tickets_are_submitted_by_user(): user = UserFactory() for _ in range(3): TicketFactory() search = Search(search_term='_id', search_value=user._id) qs = search.search_users() assert len(qs) == 1 assert qs[0]._id == user._id assert qs[0].submitted_tickets.count() == 0
def test_organization_search_returns_all_data_matching_requested_search_value(): for _ in range(3): OrganizationFactory(details='MegaCorp') search = Search(search_term='details', search_value='MegaCorp') qs = search.search_organizations() assert len(qs) == 3 assert qs[0].details == 'MegaCorp' assert qs[1].details == 'MegaCorp' assert qs[2].details == 'MegaCorp'
def test_organization_search_does_not_return_user_and_ticket_objects_when_not_linked(): organization = OrganizationFactory() for _ in range(2): UserFactory() for _ in range(3): TicketFactory() search = Search(search_term='_id', search_value=organization._id) qs = search.search_organizations() assert len(qs) == 1 assert qs[0]._id == organization._id assert qs[0].users.count() == 0 assert qs[0].tickets.count() == 0
def test_search_organizations(capsys): organization = OrganizationFactory() UserFactory(organization_id=organization) TicketFactory(organization_id=organization) controller = AppController() controller.search_term = '_id' controller.search_value = organization._id controller.search = Search(controller.search_term, controller.search_value) controller.search_organizations() captured = capsys.readouterr() assert ( f'Searching organizations for {controller.search_term} with a value of {controller.search_value}' ) in captured.out assert '_id' in captured.out assert 'url' in captured.out assert 'name' in captured.out assert 'domain_names' in captured.out assert 'created_at' in captured.out assert 'details' in captured.out assert 'shared_tickets' in captured.out assert 'tags' in captured.out assert 'user_id' in captured.out assert 'user_name' in captured.out assert 'ticket_id' in captured.out assert 'ticket_subject' in captured.out
def test_search_tickets(capsys): ticket = TicketFactory() controller = AppController() controller.search_term = '_id' controller.search_value = ticket._id controller.search = Search(controller.search_term, controller.search_value) controller.search_tickets() captured = capsys.readouterr() assert ( f'Searching tickets for {controller.search_term} with a value of {controller.search_value}' ) in captured.out assert '_id' in captured.out assert 'url' in captured.out assert 'external_id' in captured.out assert 'created_at' in captured.out assert 'type' in captured.out assert 'subject' in captured.out assert 'description' in captured.out assert 'priority' in captured.out assert 'status' in captured.out assert 'submitter_id' in captured.out assert 'submitter_name' in captured.out assert 'assignee_id' in captured.out assert 'assignee_name' in captured.out assert 'organization_id' in captured.out assert 'orgnaization_name' in captured.out assert 'tags' in captured.out assert 'has_incidents' in captured.out assert 'due_at' in captured.out assert 'via' in captured.out
def test_organization_search_returns_data_only_for_the_requested_search_value(): OrganizationFactory() OrganizationFactory() organization = OrganizationFactory() search = Search(search_term='_id', search_value=organization._id) qs = search.search_organizations() assert len(qs) == 1 assert qs[0]._id == organization._id assert qs[0].url == organization.url assert qs[0].external_id == organization.external_id assert qs[0].name == organization.name assert qs[0].domain_names == organization.domain_names assert qs[0].created_at == organization.created_at assert qs[0].details == organization.details assert qs[0].shared_tickets == organization.shared_tickets assert qs[0].tags == organization.tags
def test_search_organizations_for_invalid_search_term(capsys): controller = AppController() controller.search_term = 'unknown' controller.search_value = 1 controller.search = Search(controller.search_term, controller.search_value) controller.search_organizations() captured = capsys.readouterr() assert f'Invalid search term "{controller.search_term}"' in captured.out
def test_search_organizations_for_no_data(capsys): controller = AppController() controller.search_term = '_id' controller.search_value = 1 controller.search = Search(controller.search_term, controller.search_value) controller.search_organizations() captured = capsys.readouterr() assert ( f'No results found for search term {controller.search_term} ' f'and search value {controller.search_value}' ) in captured.out
def test_search_users(capsys): user = UserFactory() TicketFactory(assignee_id=user) TicketFactory(submitter_id=user) controller = AppController() controller.search_term = '_id' controller.search_value = user._id controller.search = Search(controller.search_term, controller.search_value) controller.search_users() captured = capsys.readouterr() assert ( f'Searching users for {controller.search_term} with a value of {controller.search_value}' ) in captured.out assert '_id' in captured.out assert 'url' in captured.out assert 'external_id' in captured.out assert 'name' in captured.out assert 'alias' in captured.out assert 'created_at' in captured.out assert 'active' in captured.out assert 'verified' in captured.out assert 'shared' in captured.out assert 'locale' in captured.out assert 'timezone' in captured.out assert 'last_login_at' in captured.out assert 'email' in captured.out assert 'phone' in captured.out assert 'signature' in captured.out assert 'organization_id' in captured.out assert 'orgnaization_name' in captured.out assert 'tags' in captured.out assert 'suspended' in captured.out assert 'role' in captured.out assert 'submitted_ticket_id' in captured.out assert 'submitted_ticket_subject' in captured.out assert 'assigned_ticket_id' in captured.out assert 'assigned_ticket_subject' in captured.out
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from users.views import Signup,Signin,Reset from musics.views import Musics,MusicOption from search.views import Search,SearchSetlist from comments.views import CommentMusic,CommentSetlist from collects.views import CollectMusic,CollectSetlist from setlists.views import SetlistOption,SetlistList,AlbumList from lrc.views import LrcUpload urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^users/signup', Signup.as_view()), url(r'^users/signin', Signin.as_view()), url(r'^users/resetpassword', Reset.as_view()), url(r'^musics/(?P<musicId>[0-9]+)$', MusicOption.as_view()), url(r'^musics$', Musics.as_view()), url(r'^musics/search$', Search.as_view()), url(r'^setlists/search$', SearchSetlist.as_view()), url(r'^musics/comments/(?P<musicId>[0-9]+)$', CommentMusic.as_view()), url(r'^setlists/comments/(?P<setlistId>[0-9]+)$', CommentSetlist.as_view()), url(r'^musics/collects/(?P<musicId>[0-9]+)$', CollectMusic.as_view()), url(r'^setlists/collects/(?P<musicId>[0-9]+)$', CollectSetlist.as_view()), url(r'^setlists$', SetlistList.as_view()), url(r'^albums$', AlbumList.as_view()), url(r'^setlists/(?P<setlistId>[0-9]+)$', SetlistOption.as_view()), url(r'^lrc', LrcUpload.as_view()), ]
def test_user_search_for_no_matching_data(): user = UserFactory() search = Search(search_term='_id', search_value=user._id+1) qs = search.search_users() assert len(qs) == 0
"""music_2 URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/3.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path, include from search.views import Index, Search, Good_luck urlpatterns = [ path('admin/', admin.site.urls), path('', Index.as_view(), name='index'), path('search/', Search.as_view(), name='search'), path('goodluck/', Good_luck.as_view(), name='goodluck'), ]
def get_object(self, request): """ For OPDS 1.1 We should handle a query for search terms and criteria provided either as opensearch or 'inline' query. OpenSearch defines fields: atom:author, atom:contributor (treated as translator), atom:title. Inline query provides author, title, categories (treated as book tags), description (treated as content search terms). if search terms are provided, we shall search for books according to Hint information (from author & contributror & title). but if search terms are empty, we should do a different search (perhaps for is_book=True) """ query = request.GET.get('q', '') inline_criteria = re.findall(self.INLINE_QUERY_RE, query) if inline_criteria: remains = re.sub(self.INLINE_QUERY_RE, '', query) remains = re.sub(r'[ \t]+', ' ', remains) def get_criteria(criteria, name): for c in criteria: for p in self.MATCHES[name]: if c[p]: if p % 2 == 0: return c[p].replace('+', ' ') return c[p] return None criteria = dict(map( lambda cn: (cn, get_criteria(inline_criteria, cn)), ['author', 'translator', 'title', 'categories', 'description', 'text'])) query = remains # empty query and text set case? log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) else: def remove_dump_data(val): """Some clients don't get opds placeholders and just send them.""" if self.ATOM_PLACEHOLDER.match(val): return '' return val criteria = dict([(cn, remove_dump_data(request.GET.get(cn, ''))) for cn in self.MATCHES.keys()]) # query is set above. log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) srch = Search() book_hit_filter = srch.index.Q(book_id__any=True) filters = [book_hit_filter] + [srch.index.Q( **{self.PARAMS_TO_FIELDS.get(cn, cn): criteria[cn]} ) for cn in self.MATCHES.keys() if cn in criteria if criteria[cn]] if query: q = srch.index.query( reduce(operator.or_, [srch.index.Q(**{self.PARAMS_TO_FIELDS.get(cn, cn): query}) for cn in self.MATCHES.keys()], srch.index.Q())) else: q = srch.index.query(srch.index.Q()) q = srch.apply_filters(q, filters).field_limit(score=True, fields=['book_id']) results = q.execute() book_scores = dict([(r['book_id'], r['score']) for r in results]) books = Book.objects.filter(id__in=set([r['book_id'] for r in results])) books = list(books) books.sort(reverse=True, key=lambda book: book_scores[book.id]) return books
def test_user_search_for_no_data(): search = Search(search_term='_id', search_value=1) qs = search.search_users() assert len(qs) == 0
from django.conf import settings from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() from pinax.apps.account.openid_consumer import PinaxConsumer from search.views import Search handler500 = "pinax.views.server_error" urlpatterns = patterns("", url(r"^$", Search.as_view(), name="home"), url(r"^admin/invite_user/$", "pinax.apps.signup_codes.views.admin_invite_user", name="admin_invite_user"), url(r"^admin/", include(admin.site.urls)), url(r"^about/", include("about.urls")), url(r"^account/", include("pinax.apps.account.urls")), url(r"^openid/", include(PinaxConsumer().urls)), url(r"^profiles/", include("idios.urls")), # url(r"^notices/", include("notification.urls")), url(r"^announcements/", include("announcements.urls")), url(r"^packages/", include("packages.urls")), url(r"^help/", include("helpdocs.urls")), url(r"^", include("search.urls")), )
from django.conf.urls import patterns, url from search.views import Search urlpatterns = patterns("", url(r"^$", Search.as_view(), name="search"), )