Esempio n. 1
0
def test_api(client, api_url):
    PerimeterFactory(name='EPCI 1', scale=Perimeter.TYPES.epci)
    PerimeterFactory(name='Communes littorales', scale=Perimeter.TYPES.adhoc)

    res = client.get(api_url)
    assert res.status_code == 200
    content = json.loads(res.content.decode())
    assert content['count'] == 2 + 2  # already France & Outre-mer
Esempio n. 2
0
def test_api_with_q_filter(client, api_url):
    PerimeterFactory(name='EPCI 1', scale=Perimeter.SCALES.epci)
    PerimeterFactory(name='Communes littorales', scale=Perimeter.SCALES.adhoc)

    res = client.get(f'{api_url}?q=epci')
    assert res.status_code == 200
    content = json.loads(res.content.decode())
    assert content['count'] == 1
Esempio n. 3
0
def test_api_with_is_visible_to_users_filters(client, api_url):
    PerimeterFactory(name='EPCI 1', scale=Perimeter.TYPES.epci)
    PerimeterFactory(name='Communes littorales',
                     scale=Perimeter.TYPES.adhoc,
                     is_visible_to_users=False)

    # Only return Perimeters with is_visible_to_users=True
    res = client.get(f'{api_url}?is_visible_to_users=true')
    assert res.status_code == 200
    content = json.loads(res.content.decode())
    assert content['count'] == 1 + 2  # already France & Outre-mer

    # Return all Perimeters
    res = client.get(f'{api_url}?is_visible_to_users=false')
    assert res.status_code == 200
    content = json.loads(res.content.decode())
    assert content['count'] == 2 + 2  # already France & Outre-mer
Esempio n. 4
0
def test_attach_epci_perimeters(perimeters):
    """Attaching epci perimeters works as expected."""

    epci_1 = PerimeterFactory(name='EPCI 1', scale=Perimeter.TYPES.epci)
    perimeters['vic'].contained_in.add(epci_1)
    perimeters['herault'].contained_in.add(epci_1)

    epci_2 = PerimeterFactory(name='EPCI 2', scale=Perimeter.TYPES.epci)
    perimeters['rodez'].contained_in.add(epci_2)

    adhoc = PerimeterFactory(name='Syndicat mixte',
                             scale=Perimeter.TYPES.adhoc)

    attach_epci_perimeters(adhoc, [epci_1.name, epci_2.name])

    assert adhoc in perimeters['vic'].contained_in.all()
    assert adhoc in perimeters['herault'].contained_in.all()
    assert adhoc in perimeters['vic'].contained_in.all()
Esempio n. 5
0
def test_attach_perimeters_cleans_old_data(perimeters):
    """Attaching perimeters removes all other attachments."""

    adhoc = PerimeterFactory(name='Communes littorales',
                             scale=Perimeter.TYPES.adhoc)
    perimeters['rodez'].contained_in.add(adhoc)
    attach_perimeters(adhoc,
                      ['34333', '97209'])  # Vic-la-gardiole, Fort-de-France

    assert adhoc not in perimeters['rodez'].contained_in.all()
Esempio n. 6
0
def test_api_with_scale_filter(client, api_url):
    PerimeterFactory(name='EPCI 1', scale=Perimeter.SCALES.epci)
    PerimeterFactory(name='Communes littorales', scale=Perimeter.SCALES.adhoc)

    # Only return Perimeters with scale=epci
    res = client.get(f'{api_url}?scale=epci')
    assert res.status_code == 200
    content = json.loads(res.content.decode())
    assert content['count'] == 1

    # An empty scale returns all Perimeters
    res = client.get(f'{api_url}?scale=')
    assert res.status_code == 200
    content = json.loads(res.content.decode())
    assert content['count'] == 2 + 2

    # A wrong scale returns no results
    res = client.get(f'{api_url}?scale=coucou')
    assert res.status_code == 200
    content = json.loads(res.content.decode())
    assert content['count'] == 0
Esempio n. 7
0
def test_user_role_animator():
    """Users with 'animator_perimeter' filled are considered as local animators."""

    # user
    UserFactory(is_contributor=False)
    # local animator
    martinique = PerimeterFactory(name='Martinique',
                                  scale=Perimeter.SCALES.region)
    UserFactory(animator_perimeter=martinique)

    assert User.objects.count() == 2
    assert User.objects.animators().count() == 1
Esempio n. 8
0
def test_user_can_have_multiple_roles():
    """Roles are not exclusive. A user can have multiple roles."""

    multi_role_user = UserFactory(is_contributor=True)
    SearchPageFactory(administrator=multi_role_user)
    guadeloupe = PerimeterFactory(name='Guadeloupe',
                                  scale=Perimeter.SCALES.region)
    multi_role_user.animator_perimeter = guadeloupe
    multi_role_user.save()
    Token.objects.get_or_create(user=multi_role_user)

    assert User.objects.count() == 1
    assert User.objects.contributors().count() == 1
    assert User.objects.search_page_admins().count() == 1
    assert User.objects.animators().count() == 1
    assert User.objects.with_api_token().count() == 1
Esempio n. 9
0
def test_alert_perimeter(client, mailoutbox):
    """The search perimeter is displayed in the validation email."""

    perimeter = PerimeterFactory.create(name='Bretagne')
    perimeter_id = '{}-{}'.format(perimeter.id, perimeter.code)
    url = reverse('alert_create_view')
    res = client.post(url, data={
        'title': 'Test',
        'email': '*****@*****.**',
        'alert_frequency': 'daily',
        'querystring': 'text=Ademe&perimeter={}'.format(perimeter_id),
        'source': 'aides-territoires'
    })
    assert res.status_code == 302
    assert len(mailoutbox) == 1
    assert perimeter_id in Alert.objects.last().querystring
Esempio n. 10
0
def test_alert_from_search_page(client, mailoutbox):
    """The search perimeter is displayed in the validation email."""

    perimeter = PerimeterFactory.create(name='Bretagne')
    perimeter_id = '{}-{}'.format(perimeter.id, perimeter.code)
    page = SearchPageFactory(
        title='Minisite',
        search_querystring='perimeter={}'.format(perimeter_id))
    url = reverse('alert_create_view')
    res = client.post(url, data={
        'title': 'Test',
        'email': '*****@*****.**',
        'alert_frequency': 'daily',
        'querystring': '',
        'source': page.slug
    })
    assert res.status_code == 302
    assert len(mailoutbox) == 1
    assert perimeter_id in Alert.objects.last().querystring
Esempio n. 11
0
def test_attach_perimeters(perimeters):
    """Attaching perimeters works as expected."""

    adhoc = PerimeterFactory(name='Communes littorales',
                             scale=Perimeter.TYPES.adhoc)
    attach_perimeters(adhoc,
                      ['34333', '97209'])  # Vic-la-gardiole, Fort-de-France

    assert adhoc in perimeters['vic'].contained_in.all()
    assert adhoc in perimeters['herault'].contained_in.all()
    assert adhoc in perimeters['occitanie'].contained_in.all()
    assert adhoc in perimeters['métropole'].contained_in.all()
    assert adhoc in perimeters['outre-mer'].contained_in.all()

    # Make sure perimeter does not contain itself
    assert adhoc not in adhoc.contained_in.all()

    # Make sure france and europe are not contained in the adhoc perimeter
    assert adhoc not in perimeters['france'].contained_in.all()
    assert adhoc not in perimeters['europe'].contained_in.all()
Esempio n. 12
0
def test_alert_perimeter(client, mailoutbox):
    """The search perimeter is displayed in the validation email."""

    perimeter = PerimeterFactory.create(name='Bretagne')
    perimeter_id = '{}-{}'.format(perimeter.id, perimeter.code)
    url = reverse('alert_create_view')
    res = client.post(url,
                      data={
                          'title':
                          'Test',
                          'email':
                          '*****@*****.**',
                          'alert_frequency':
                          'daily',
                          'querystring':
                          'text=Ademe&perimeter={}'.format(perimeter_id),
                      })
    assert res.status_code == 302
    assert len(mailoutbox) == 1

    content = mailoutbox[0].body
    assert 'Bretagne (Région)' in content
Esempio n. 13
0
def perimeters():

    europe = PerimeterFactory(scale=Perimeter.TYPES.continent,
                              name='Europe',
                              code='EU')
    france = PerimeterFactory(scale=Perimeter.TYPES.country,
                              contained_in=[europe],
                              name='France',
                              code='FRA')
    metropole = PerimeterFactory(scale=Perimeter.TYPES.adhoc,
                                 contained_in=[europe, france],
                                 name='Métropole',
                                 code='FRA-MET')
    outre_mer = PerimeterFactory(scale=Perimeter.TYPES.adhoc,
                                 contained_in=[europe, france],
                                 name='Outre-mer',
                                 code='FRA-OM')
    rhonemed = PerimeterFactory(scale=Perimeter.TYPES.basin,
                                contained_in=[europe, france, metropole],
                                is_overseas=False,
                                name='Rhône-Méditerannée',
                                country='FRA',
                                code='FR000006')
    adour_garonne = PerimeterFactory(scale=Perimeter.TYPES.basin,
                                     contained_in=[europe, france, metropole],
                                     is_overseas=False,
                                     name='Adour-Garonne',
                                     code='FR000005')
    occitanie = PerimeterFactory(scale=Perimeter.TYPES.region,
                                 contained_in=[europe, france, metropole],
                                 is_overseas=False,
                                 name='Occitanie',
                                 code='76')
    herault = PerimeterFactory(
        scale=Perimeter.TYPES.department,
        contained_in=[europe, france, occitanie, metropole],
        is_overseas=False,
        name='Hérault',
        code='34',
        regions=['76'])
    montpellier = PerimeterFactory(
        scale=Perimeter.TYPES.commune,
        contained_in=[europe, france, occitanie, herault, rhonemed, metropole],
        is_overseas=False,
        name='Montpellier',
        code='34172',
        regions=['76'],
        departments=['34'],
        basin='FR000006')
    vic = PerimeterFactory(
        scale=Perimeter.TYPES.commune,
        contained_in=[europe, france, occitanie, herault, rhonemed, metropole],
        is_overseas=False,
        name='Vic-la-Gardiole',
        code='34333',
        regions=['76'],
        departments=['34'],
        basin='FR000006')
    aveyron = PerimeterFactory(
        scale=Perimeter.TYPES.department,
        contained_in=[europe, france, occitanie, metropole],
        is_overseas=False,
        name='Aveyron',
        code='12',
        regions=['76'])
    rodez = PerimeterFactory(scale=Perimeter.TYPES.commune,
                             contained_in=[
                                 europe, france, occitanie, aveyron,
                                 adour_garonne, metropole
                             ],
                             is_overseas=False,
                             name='Rodez',
                             code='12202',
                             regions=['76'],
                             departments=['12'],
                             basin='FR000005')
    normandie = PerimeterFactory(scale=Perimeter.TYPES.region,
                                 contained_in=[europe, france, metropole],
                                 is_overseas=False,
                                 name='Normandie',
                                 code='28')
    eure = PerimeterFactory(
        scale=Perimeter.TYPES.department,
        contained_in=[europe, france, normandie, metropole],
        is_overseas=False,
        name='Eure',
        code='28',
        regions=['28'])
    st_cyr = PerimeterFactory(
        scale=Perimeter.TYPES.commune,
        contained_in=[europe, france, normandie, eure, metropole],
        is_overseas=False,
        name='Saint-Cyr-la-Campagne',
        code='27529',
        regions=['28'],
        departments=['27'])
    fort_de_france = PerimeterFactory(scale=Perimeter.TYPES.commune,
                                      contained_in=[europe, france, outre_mer],
                                      is_overseas=True,
                                      name='Fort-de-France',
                                      code='97209',
                                      regions=['02'],
                                      departments=['972'])

    perimeters = {
        'europe': europe,
        'france': france,
        'métropole': metropole,
        'outre-mer': outre_mer,
        'occitanie': occitanie,
        'herault': herault,
        'montpellier': montpellier,
        'vic': vic,
        'aveyron': aveyron,
        'rodez': rodez,
        'normandie': normandie,
        'eure': eure,
        'st-cyr': st_cyr,
        'rhone-mediterannee': rhonemed,
        'adour-garonne': adour_garonne,
        'fort-de-france': fort_de_france,
    }
    return perimeters
Esempio n. 14
0
def perimeter():
    """Generates a valid Perimeter."""

    perimeter = PerimeterFactory()
    return perimeter
Esempio n. 15
0
def perimeters():
    perimeters = {
        'europe':
        PerimeterFactory(scale=Perimeter.TYPES.continent,
                         name='Europe',
                         code='EU'),
        'france':
        PerimeterFactory(scale=Perimeter.TYPES.country,
                         name='France',
                         code='FRA'),
        'occitanie':
        PerimeterFactory(scale=Perimeter.TYPES.region,
                         name='Occitanie',
                         code='76'),
        'herault':
        PerimeterFactory(scale=Perimeter.TYPES.department,
                         name='Hérault',
                         code='34',
                         regions=['76']),
        'montpellier':
        PerimeterFactory(scale=Perimeter.TYPES.commune,
                         name='Montpellier',
                         code='34172',
                         regions=['76'],
                         departments=['34'],
                         basin='FR000006'),
        'vic':
        PerimeterFactory(scale=Perimeter.TYPES.commune,
                         name='Vic-la-Gardiole',
                         code='34333',
                         regions=['76'],
                         departments=['34'],
                         basin='FR000006'),
        'aveyron':
        PerimeterFactory(scale=Perimeter.TYPES.department,
                         name='Aveyron',
                         code='12',
                         regions=['76']),
        'rodez':
        PerimeterFactory(scale=Perimeter.TYPES.commune,
                         name='Rodez',
                         code='12202',
                         regions=['76'],
                         departments=['12'],
                         basin='FR000005'),
        'normandie':
        PerimeterFactory(scale=Perimeter.TYPES.region,
                         name='Normandie',
                         code='28'),
        'eure':
        PerimeterFactory(scale=Perimeter.TYPES.department,
                         name='Eure',
                         code='28',
                         regions=['28']),
        'st-cyr':
        PerimeterFactory(scale=Perimeter.TYPES.commune,
                         name='Saint-Cyr-la-Campagne',
                         code='27529',
                         regions=['28'],
                         departments=['27']),
        'rhone-mediterannee':
        PerimeterFactory(scale=Perimeter.TYPES.basin,
                         name='Rhône-Méditerannée',
                         country='FRA',
                         code='FR000006'),
        'adour-garonne':
        PerimeterFactory(scale=Perimeter.TYPES.basin,
                         name='Adour-Garonne',
                         country='FRA',
                         code='FR000005'),
    }
    return perimeters