def test_searchReviewed(self, activeClient, baseProviderSearch): baseProviderSearch['reviewed_filter'] = True filters, sort = self.generateSearchFilters(baseProviderSearch) providers = Provider.search(filters, sort=sort) assert len(providers) == 2 assert providers[0].name == 'Douthit Electrical' assert providers[1].name == 'Preferred Electric Co'
def searchJSON(): form = ProviderSearchForm(request.args).populate_choices() del form.location page = request.args.get('page', 1, int) if form.validate() or request.args.get('page') is not None: location = session['location'] searchLocation = Location(location['source'], location['address'], location['coordinates']) searchLocation.setRangeCoordinates() reviewFilters = { "friends": form.friends_filter.data, "groups": form.groups_filter.data, "reviewed": form.reviewed_filter.data } filters = { "name": form.name.data, "category": Category.query.get(form.category.data), "location": searchLocation } sortCriteria = form.sort.data providers = Provider.search(filters, sortCriteria, reviewFilters) if sortCriteria == "distance": providers = sortByDistance(searchLocation.coordinates, providers) pagination = Pagination(providers, page, current_app.config.get('PER_PAGE')) providers = pagination.paginatedData providersDict = [provider._asdict() for provider in providers] return jsonify(providersDict, location)
def providerAutocomplete(): """Pulls list of providers matching input text.""" form = ProviderSearchForm(request.args) form.populate_choices() print(form.data) del form.sort if form.validate(): try: searchLocation = Location(form.location.data, form.manual_location.data, (form.gpsLat.data, form.gpsLong.data)) except AddressError: msg = {"status": "failed", "reason": "invalid address"} return jsonify(msg), 422 searchLocation.setRangeCoordinates() filters = { "name": form.name.data, "category": Category.query.get(form.category.data), "location": searchLocation } sortCriteria = "name" providers = Provider.search(filters, sortCriteria, limit=10) providers = [{ "id": provider.id, "name": provider.name, "line1": provider.line1, "city": provider.city, "state": provider.state_short } for provider in providers] return jsonify(providers) msg = {"status": "failed", "reason": "invalid form data"} return jsonify(msg), 422
def test_searchShortDistance(self, activeClient, baseProviderSearch): baseProviderSearch.update({"searchRange": 7}) filters, sort = self.generateSearchFilters(baseProviderSearch) providers = Provider.search(filters, sort) assert len(providers) == 2 assert providers[0].name == 'Douthit Electrical' assert providers[1].name == 'Preferred Electric Co'
def test_searchLimit(self, activeClient, baseProviderSearch): filters, sort = self.generateSearchFilters(baseProviderSearch) limit = 1 providers = Provider.search(filters, sort=sort, limit=limit) assert len(providers) == 1 assert providers[0].name == 'Douthit Electrical' assert providers[0].reviewAverage == (10 / 4) assert providers[0].reviewCount == 4 assert providers[0].reviewCost == (18 / 4)
def test_searchRatingSort(self, activeClient, baseProviderSearch): baseProviderSearch['sort'] = 'rating' filters, sort = self.generateSearchFilters(baseProviderSearch) providers = Provider.search(filters, sort) assert len(providers) == 3 assert providers[0].name == 'Preferred Electric Co' assert providers[1].name == 'Douthit Electrical' assert providers[2].name == 'Evers Electric' assert providers[1].categories == "Electrician,Plumber"
def test_searchName(self, activeClient, baseProviderSearch): baseProviderSearch['name'] = 'Evers Electric' filters, sort = self.generateSearchFilters(baseProviderSearch) providers = Provider.search(filters, sort) assert providers[0].name == 'Evers Electric' assert providers[0].website == 'www.everselectric.com/' assert providers[0].reviewAverage is None assert providers[0].reviewCount == 0 assert providers[0].reviewCost is None
def test_searchGroups(self, activeClient, baseProviderSearch): baseProviderSearch['groups_filter'] = True filters, sort = self.generateSearchFilters(baseProviderSearch) providers = Provider.search(filters, sort=sort) assert len(providers) == 1 assert providers[0].name == 'Douthit Electrical' assert providers[0].reviewAverage == 5 assert providers[0].reviewCount == 1 assert providers[0].reviewCost == 5 assert providers[0].categories == "Electrician,Plumber"
def test_searchFriendsOrGroups(self, activeClient, baseProviderSearch): baseProviderSearch.update({ "friends_filter": True, "groups_filter": True }) filters, sort = self.generateSearchFilters(baseProviderSearch) providers = Provider.search(filters, sort=sort) assert len(providers) == 1 assert providers[0].name == 'Douthit Electrical' assertEqualsTolerance(providers[0].reviewAverage, (7 / 3), 3) assert providers[0].reviewCount == 3 assert providers[0].reviewCost == 5 assert providers[0].categories == "Electrician,Plumber"
def test_searchNoName(self, activeClient, baseProviderSearch): # create filters, location, category filters, sort = self.generateSearchFilters(baseProviderSearch) providers = Provider.search(filters, sort) assert len(providers) == 3 assert providers[0].name == 'Douthit Electrical' assert providers[1].name == 'Evers Electric' assert providers[2].name == 'Preferred Electric Co' assert providers[0].reviewAverage == (10 / 4) assert providers[0].reviewCount == 4 assert providers[0].reviewCost == (18 / 4) assert providers[0].categories == "Electrician,Plumber"
def provider(name, id): """Generate provider profile page.""" form = ProviderFilterForm(request.args) filters = {"id": id, "name": name} try: provider = Provider.search(filters)[0] except IndexError: flash("Provider not found. Please try a different search.") return render_template('errors/404.html'), 404 if form.validate(): reviewFilter = { "friends_filter": form.friends_filter.data, "groups_filter": form.groups_filter.data } page = request.args.get('page', 1, int) return_code = 200 else: last = dict(parse.parse_qsl(parse.urlsplit(request.referrer).query)) filter_keys = ['friends_filter', 'groups_filter'] reviewFilter = {k: last.get(k) == 'y' for k in filter_keys} page = last.get('page', 1) return_code = 422 if provider.reviewCount > 0: reviews = Review.search(provider_id=provider.id, filter=reviewFilter) pagination = Pagination(reviews, page, current_app.config.get('PER_PAGE')) pag_args = {"name": name, "id": id} pag_urls = pagination.get_urls('main.provider', pag_args) reviews = pagination.paginatedData else: reviews = None pag_urls = None provider_json = simplejson.dumps(provider._asdict(), sort_keys=True) return render_template("provider_profile.html", title="Provider Profile", provider=provider, pag_urls=pag_urls, reviews=reviews, form=form, reviewFilter=reviewFilter, provider_json=provider_json), return_code
def search(): form = ProviderSearchForm(request.args) form.populate_choices() page = request.args.get('page', 1, int) form_dict = json.dumps(form.data) if form.validate() or request.args.get('page') is not None: try: searchLocation = Location(form.location.data, form.manual_location.data, (form.gpsLat.data, form.gpsLong.data)) except AddressError: flash("Invalid address submitted. Please re-enter and try again.") if form.manual_location.data not in [None, ""]: msg = "Invalid Address. Please updated." form.manual_location.errors.append(msg) return render_template("index.html", form_dict=form_dict, form=form, title="Search"), 422 searchLocation.setRangeCoordinates(form.searchRange.data) filters = { "name": form.name.data, "category": Category.query.get(form.category.data), "location": searchLocation, "friends": form.friends_filter.data, "groups": form.groups_filter.data, "reviewed": form.reviewed_filter.data } sortCriteria = form.sort.data providers = Provider.search(filters, sortCriteria) if providers == []: flash("No results found. Please try a different search.") providersDict = simplejson.dumps([], sort_keys=True) summary = None pag_urls = None locationDict = None else: summary = Review.summaryStatSearch(filters) if sortCriteria == "distance": providers = sortByDistance(searchLocation.coordinates, providers) pagination = Pagination(providers, page, current_app.config.get('PER_PAGE')) pag_urls = pagination.get_urls('main.search', request.args) providers = pagination.paginatedData providersDict = [provider._asdict() for provider in providers] providersDict = simplejson.dumps(providersDict, sort_keys=True) if session.get('location'): locationDict = session['location'] locationDict = simplejson.dumps(locationDict, sort_keys=True) else: locationDict = None filter_fields = [ form.reviewed_filter, form.friends_filter, form.groups_filter ] reviewFilter = {} for field in filter_fields: if field.data is True: reviewFilter[field.name] = 'y' form.initialize() return render_template("index.html", form=form, title="Search", providers=providers, pag_urls=pag_urls, form_dict=form_dict, reviewFilter=reviewFilter, locationDict=locationDict, providersDict=providersDict, summary=summary) return render_template("index.html", form=form, form_dict=form_dict, title="Search"), 422