def test_enable_disable_pro_version_view(self): """ Test that the Pro Version is correctly enabled/disabled. """ # Create a user. user_pro = User.create(email='*****@*****.**', gender='male', first_name='John', last_name='Doe') next_url_without_domain = '/entreprises/metz-57000/boucherie?sort=score&d=10&h=1&p=0&f_a=0' next_url_with_domain = 'http://labonneboite.pole-emploi.fr' + next_url_without_domain url = self.url_for('user.pro_version', **{'next': next_url_without_domain}) with self.test_request_context: # Log the user in. self.login(user_pro) self.assertTrue(pro.user_is_pro()) self.assertFalse(pro.pro_version_enabled()) with self.app.session_transaction() as sess: self.assertNotIn(pro.PRO_VERSION_SESSION_KEY, sess) # Enable pro version. rv = self.app.get(url) self.assertEqual(rv.status_code, 302) self.assertEqual(rv.location, next_url_with_domain) # It is unclear what is the root cause of the following test # failure. The session object manipulated in the # pro_version_enabled function is different from the session # provided by the self.app.session_transaction context manager, but # I don't know why. # self.assertTrue(pro.pro_version_enabled()) with self.app.session_transaction() as sess: self.assertIn(pro.PRO_VERSION_SESSION_KEY, sess) self.assertEqual(True, sess[pro.PRO_VERSION_SESSION_KEY]) # Disable pro version. rv = self.app.get(url) self.assertEqual(rv.status_code, 302) self.assertEqual(rv.location, next_url_with_domain) self.assertFalse(pro.pro_version_enabled()) with self.app.session_transaction() as sess: self.assertNotIn(pro.PRO_VERSION_SESSION_KEY, sess)
def assert_pro_version_is_not_enabled(self): """ Utility method to assert pro version is not visible. """ with self.test_request_context(headers=self.headers): self.assertFalse(pro.user_is_pro()) self.assertFalse(pro.pro_version_enabled())
def login_as_pro(self): user_pro = User.create(email='*****@*****.**', gender='male', first_name='John', last_name='Doe') self.login(user_pro) self.assertTrue(pro.user_is_pro()) self.assertFalse(pro.pro_version_enabled())
def kit(page='index.html'): # only if pro version is activated if pro.pro_version_enabled(): page = page.replace('%20', ' ') if page.endswith('.html'): return render_template(FOLDER_NAME + '/' + page) PRO_STATIC_FOLDER = os.path.join(current_app.root_path, FOLDER_NAME) return send_from_directory(PRO_STATIC_FOLDER, page) abort(404)
def inject_dict_for_all_templates(): return { 'memo_url': settings.MEMO_URL, 'user_is_pro': pro.user_is_pro(), 'pro_version_enabled': pro.pro_version_enabled(), 'last_data_deploy_date': Office.get_date_of_last_data_deploy(), 'google_site_verification_code': settings.GOOGLE_SITE_VERIFICATION_CODE, 'login_url': auth_utils.login_url, 'jepostule_globally_enabled': settings.JEPOSTULE_QUOTA > 0, 'tag_manager_url': settings.TAG_MANAGER_URL, }
def inject_dict_for_all_templates(): return { 'hotjar_tag': hotjar.get_hotjar_tag(), 'memo_js_url': settings.MEMO_JS_URL, 'user_is_pro': pro.user_is_pro(), 'pro_version_enabled': pro.pro_version_enabled(), 'last_data_deploy_date': Office.get_date_of_last_data_deploy(), 'google_analytics_id': settings.GOOGLE_ANALYTICS_ID, 'seo_google_analytics_id': settings.SEO_GOOGLE_ANALYTICS_ID, 'enable_google_optimize': settings.ENABLE_GOOGLE_OPTIMIZE, 'google_optimize_id': settings.GOOGLE_OPTIMIZE_ID, 'tilkee_enabled': settings.TILKEE_ENABLED, 'google_site_verification_code': settings.GOOGLE_SITE_VERIFICATION_CODE, 'login_url': auth_utils.login_url, 'jepostule_globally_enabled': settings.JEPOSTULE_QUOTA > 0, 'enable_isochrones': settings.ENABLE_ISOCHRONES, }
def make_company_search_form(**kwargs): if pro.pro_version_enabled(): return ProCompanySearchForm(MultiDict(kwargs)) return CompanySearchForm(MultiDict(kwargs))
def kit(): if pro.pro_version_enabled(): return send_from_directory(current_app.static_folder, 'kit.pdf') abort(404)
def get_parameters(args): kwargs = {} for param, field_name in PARAMETER_FIELD_MAPPING.items(): kwargs[field_name] = args.get(param, '') try: kwargs['distance'] = int(kwargs.get('distance')) except ValueError: kwargs['distance'] = settings.DISTANCE_FILTER_DEFAULT kwargs['travel_mode'] = kwargs.get('travel_mode') if kwargs['travel_mode'] not in maps_constants.TRAVEL_MODES: kwargs['travel_mode'] = maps_constants.DEFAULT_TRAVEL_MODE try: kwargs['duration'] = int(kwargs.get('duration')) if kwargs[ 'duration'] not in maps_constants.ISOCHRONE_DURATIONS_MINUTES: kwargs['duration'] = None except (ValueError, TypeError): kwargs['duration'] = None try: kwargs['headcount'] = int(kwargs.get('headcount')) except ValueError: kwargs['headcount'] = settings.HEADCOUNT_FILTER_DEFAULT try: kwargs['from_number'] = int(kwargs.get('from_number')) except ValueError: kwargs['from_number'] = 1 try: kwargs['to_number'] = int(kwargs.get('to_number')) except ValueError: kwargs['to_number'] = kwargs[ 'from_number'] + pagination.OFFICES_PER_PAGE - 1 # Fix pagination when needed if not kwargs['from_number'] >= 1: kwargs['from_number'] = 1 current_page_size = kwargs['to_number'] - kwargs['from_number'] + 1 if current_page_size <= 0: # this may happen when a 'out of bound' page is requested kwargs['to_number'] = kwargs[ 'from_number'] + pagination.OFFICES_PER_PAGE - 1 if current_page_size > pagination.OFFICES_MAXIMUM_PAGE_SIZE: kwargs['to_number'] = kwargs[ 'from_number'] + pagination.OFFICES_MAXIMUM_PAGE_SIZE - 1 # Fallback to default sorting. if kwargs.get('sort') not in sorting.SORT_FILTERS: kwargs['sort'] = sorting.SORT_FILTER_DEFAULT try: kwargs['public'] = int(kwargs.get('public')) except (ValueError, TypeError): kwargs['public'] = 0 if kwargs['public'] not in search_util.PUBLIC_CHOICES: kwargs['public'] = search_util.PUBLIC_ALL # ensure PRO filters are never used in the public version if not pro.pro_version_enabled(): del kwargs['public'] return kwargs
def get_parameters(args): kwargs = {} for param, field_name in PARAMETER_FIELD_MAPPING.items(): kwargs[field_name] = args.get(param, '') try: kwargs['distance'] = int(kwargs.get('distance')) except ValueError: kwargs['distance'] = settings.DISTANCE_FILTER_DEFAULT kwargs['travel_mode'] = kwargs.get('travel_mode') if kwargs['travel_mode'] not in maps_constants.TRAVEL_MODES: kwargs['travel_mode'] = maps_constants.DEFAULT_TRAVEL_MODE try: kwargs['duration'] = int(kwargs.get('duration')) if kwargs[ 'duration'] not in maps_constants.ISOCHRONE_DURATIONS_MINUTES: kwargs['duration'] = None except (ValueError, TypeError): kwargs['duration'] = None try: kwargs['headcount'] = int(kwargs.get('headcount')) except ValueError: kwargs['headcount'] = settings.HEADCOUNT_FILTER_DEFAULT try: kwargs['from_number'] = int(kwargs.get('from_number')) except ValueError: kwargs['from_number'] = 1 try: kwargs['to_number'] = int(kwargs.get('to_number')) except ValueError: kwargs['to_number'] = kwargs[ 'from_number'] + pagination.OFFICES_PER_PAGE - 1 # Fix pagination when needed if not kwargs['from_number'] >= 1: kwargs['from_number'] = 1 current_page_size = kwargs['to_number'] - kwargs['from_number'] + 1 if current_page_size <= 0: # this may happen when a 'out of bound' page is requested kwargs['to_number'] = kwargs[ 'from_number'] + pagination.OFFICES_PER_PAGE - 1 if current_page_size > pagination.OFFICES_MAXIMUM_PAGE_SIZE: kwargs['to_number'] = kwargs[ 'from_number'] + pagination.OFFICES_MAXIMUM_PAGE_SIZE - 1 # Fallback to default sorting. if kwargs.get('sort') not in sorting.SORT_FILTERS: kwargs['sort'] = sorting.SORT_FILTER_DEFAULT # prevent sorting by distance for departments if kwargs.get( 'sort') == sorting.SORT_FILTER_DISTANCE and 'departments' in args: kwargs['sort'] = sorting.SORT_FILTER_SCORE # from value in GET to enum # audience filter defaults to ALL audience_str = kwargs.get('audience') if audience_str.isdigit(): kwargs['audience'] = get_enum_from_value(AudienceFilter, int(audience_str), AudienceFilter.ALL) else: kwargs['audience'] = AudienceFilter.ALL # ensure PRO filters are never used in the public version if not pro.pro_version_enabled(): kwargs['audience'] = AudienceFilter.ALL return kwargs