def create_test_order(passenger=None): if not passenger: passenger = create_passenger() form = OrderForm(data=ORDER_DATA, passenger=passenger) order = form.save() order.passenger = passenger order.save() return order
def create(self, request, *args, **kwargs): api_user = kwargs["api_user"] request_data = request.data.get("request") if not request_data: return rc.BAD_REQUEST language_code = request_data.get("language_code") translation.activate(language_code) passenger = None phone_number = request_data.get("phone_number") login_token = request_data.get("login_token") try: if login_token: #TODO_WB: merge needed to make this work passenger = Passenger.objects.get(login_token=login_token) elif phone_number and not api_user.phone_validation_required: passenger = Passenger.objects.get(phone=phone_number) except Passenger.DoesNotExist: pass if not passenger: return rc.NOT_FOUND #TODO_WB: is this the right response order_data = {} for address_type in ('from', 'to'): for att, val in request_data[address_type].items(): order_data[address_type + "_" + att] = val or "" if not is_valid_address(order_data, address_type): res = rc.BAD_REQUEST res.write(" %s\n" % ErrorCodes.INVALID_ADDRESS) return res order_data[address_type + "_country"] = Country.get_id_by_code(order_data[address_type + "_country"]) order_data[address_type + "_city"] = City.get_id_by_name_and_country(order_data[address_type + "_city"], order_data[address_type + "_country"], add_if_not_found=True) order_form = OrderForm(data=order_data, passenger=passenger) if order_form.is_valid(): order = order_form.save() order.api_user = api_user order.passenger = passenger order.language_code = language_code order.save() book_order_async(order) log_event(EventType.ORDER_BOOKED, order=order) return rc.CREATED else: response = rc.BAD_REQUEST response.write(" %s\n" % order_form.errors.as_text()) return response
def test_required_fields(self): order_form = OrderForm() required_fields = [] for field_name in order_form.fields: if order_form.fields.get(field_name).required: required_fields.append(field_name) REQUIRED_FIELDS = [ "from_city", "from_country", "from_geohash", "from_lat", "from_lon", "from_raw", "from_street_address", "geocoded_from_raw", "to_city", "to_country", "to_geohash", "to_lat", "to_lon", "to_raw", "to_street_address", "geocoded_to_raw", ] self.assertTrue(REQUIRED_FIELDS.sort() == required_fields.sort(), "A required form field is missing or was added.")
def test_form_validation(self): bad_data = { "cross country order": {"from_country": u"1248"}, "same country but no service": {"from_country": u"1248", "to_country": u"1248"}, "no station in valid distance": {"from_lat": 33.239736, "from_lon": 35.654583, "to_lat": 29.550283, "to_lon": 34.914551}, } passenger = create_passenger() # good order form = OrderForm(data=ORDER_DATA, passenger=passenger) self.assertTrue(form.is_valid(), "Form should pass validation.") # bad orders for dict_name in bad_data: bad_order = ORDER_DATA.copy() bad_order.update(bad_data[dict_name]) form = OrderForm(data=bad_order, passenger=passenger) self.assertFalse(form.is_valid(), "Form should fail validation: %s" % dict_name)
def test_form_validation(self): bad_data = { "cross country order": { "from_country": u"1248" }, "same country but no service": { "from_country": u"1248", "to_country": u"1248" }, "no station in valid distance": { "from_lat": 33.239736, "from_lon": 35.654583, "to_lat": 29.550283, "to_lon": 34.914551 }, } passenger = create_passenger() # good order form = OrderForm(data=ORDER_DATA, passenger=passenger) self.assertTrue(form.is_valid(), "Form should pass validation.") # bad orders for dict_name in bad_data: bad_order = ORDER_DATA.copy() bad_order.update(bad_data[dict_name]) form = OrderForm(data=bad_order, passenger=passenger) self.assertFalse(form.is_valid(), "Form should fail validation: %s" % dict_name)
def passenger_home(request): if not request.mobile and CURRENT_PASSENGER_KEY in request.session: del request.session[CURRENT_PASSENGER_KEY] hidden_fields = HIDDEN_FIELDS form = OrderForm() not_a_user, not_a_passenger = NOT_A_USER, NOT_A_PASSENGER waze_token = settings.WAZE_API_TOKEN telmap_user = settings.TELMAP_API_USER telmap_password = settings.TELMAP_API_PASSWORD telmap_languages = 'he' if str( get_language_from_request(request)) == 'he' else 'en' country_code = settings.DEFAULT_COUNTRY_CODE service_cities = ", ".join( set([s.city.name for s in Station.objects.filter(show_on_list=True)])) passenger = Passenger.from_request(request) if not passenger and request.GET.get("show_login", False): show_login = True if passenger and passenger.business: PENDING = models.PENDING ASSIGNED = models.ASSIGNED ACCEPTED = models.ACCEPTED ORDER_FAILED = models.FAILED # groups together FAILED, ERROR and TIMED_OUT ORDER_MAX_WAIT_TIME = models.ORDER_MAX_WAIT_TIME FAILED_MSG = _(order_tracker.STATUS_MESSAGES[models.FAILED]) show_tracker = True channel_key = get_channel_key(Passenger.from_request(request), request.session.session_key) init_token = channel.create_channel(channel_key) init_tracker_history = [ simplejson.dumps(msg) for msg in order_tracker.get_tracker_history(passenger) ] return custom_render_to_response("passenger_home.html", locals(), context_instance=RequestContext(request))
def station_page(request, subdomain_name): station = get_object_or_404(models.Station, subdomain_name=subdomain_name) ua = request.META.get("HTTP_USER_AGENT", "").lower() if station.market_app_url and ua.find("android") > -1: ga_hit_page(request) return HttpResponseRedirect(station.market_app_url) elif station.itunes_app_url and ua.find("iphone") > -1: ga_hit_page(request) return HttpResponseRedirect(station.itunes_app_url) passenger = Passenger.from_request(request) if passenger and passenger.business: return station_business_page(request, subdomain_name) if not request.mobile and CURRENT_PASSENGER_KEY in request.session: del request.session[CURRENT_PASSENGER_KEY] page_specific_class = "station_page" hidden_fields = HIDDEN_FIELDS form = OrderForm() not_a_user, not_a_passenger = NOT_A_USER, NOT_A_PASSENGER waze_token = settings.WAZE_API_TOKEN telmap_user = settings.TELMAP_API_USER telmap_password = settings.TELMAP_API_PASSWORD telmap_languages = 'he' if str(get_language_from_request(request)) == 'he' else 'en' country_code = settings.DEFAULT_COUNTRY_CODE station_full_name = _("%s Taxi station") % station.name website_link = station.get_station_page_link() pretty_website_link = website_link.replace("http://", "") station_logo = blob_to_image_tag(station.logo) if not passenger and request.GET.get("show_login", False): show_login = True return custom_render_to_response("station_page.html", locals(), context_instance=RequestContext(request))
"").replace(",", "").strip() res = int(res) logging.info("fixed house number (%s): %s " % (res, getattr(order, "%s_raw" % order_type))) except AttributeError, ValueError: logging.warning("Could not fix missing house number: %s" % getattr(order, "%s_raw" % order_type)) res = None return res form_data = request.POST if passenger.business and request.POST.get("business_order"): form_data = get_business_order_form_data(request, passenger) form = OrderForm(data=form_data, passenger=passenger) if form.is_valid(): if passenger.orders.all()[:1]: last_order = passenger.orders.order_by("-create_date")[0] interval = BUSINESS_ORDERING_INTERVAL if passenger.business else ORDERING_INTERVAL if (utc_now() - last_order.create_date).seconds < interval: return error_response( _("Ordering is not allowed so soon after another order")) app_udid = request.POST.get("APP_UDID") installed_app = None if app_udid: # this came from a device that sends app specific id installed_app = InstalledApp.by_app_udid(app_udid) if not installed_app: return error_response(
try: city = getattr(order, "%s_city" % order_type).name res = res.replace(street, "").replace(city, "").replace(",", "").strip() res = int(res) logging.info("fixed house number (%s): %s " % (res, getattr(order, "%s_raw" % order_type))) except AttributeError, ValueError: logging.warning("Could not fix missing house number: %s" % getattr(order, "%s_raw" % order_type)) res = None return res form_data = request.POST if passenger.business and request.POST.get("business_order"): form_data = get_business_order_form_data(request, passenger) form = OrderForm(data=form_data, passenger=passenger) if form.is_valid(): if passenger.orders.all()[:1]: last_order = passenger.orders.order_by("-create_date")[0] interval = BUSINESS_ORDERING_INTERVAL if passenger.business else ORDERING_INTERVAL if (utc_now() - last_order.create_date).seconds < interval: return error_response(_("Ordering is not allowed so soon after another order")) app_udid = request.POST.get("APP_UDID") installed_app = None if app_udid: # this came from a device that sends app specific id installed_app = InstalledApp.by_app_udid(app_udid) if not installed_app: return error_response(_("Please register before attempting to order")) if installed_app.blocked: