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
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
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
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()
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()
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
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
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
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
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
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()
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
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
def perimeter(): """Generates a valid Perimeter.""" perimeter = PerimeterFactory() return perimeter
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