Пример #1
0
    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)
Пример #2
0
 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())
Пример #3
0
 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())
Пример #4
0
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)
Пример #5
0
 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,
     }
Пример #6
0
 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,
     }
Пример #7
0
def make_company_search_form(**kwargs):
    if pro.pro_version_enabled():
        return ProCompanySearchForm(MultiDict(kwargs))
    return CompanySearchForm(MultiDict(kwargs))
Пример #8
0
def kit():
    if pro.pro_version_enabled():
        return send_from_directory(current_app.static_folder, 'kit.pdf')
    abort(404)
Пример #9
0
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
Пример #10
0
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