Add singular descriptions for libraries

This lets us write nice interface copy like ‘Choose a local authority
from the local authorities library’.
This commit is contained in:
Chris Hill-Scott
2020-08-13 17:33:58 +01:00
parent 72f5dcb91f
commit 1c74d0798a
8 changed files with 37 additions and 17 deletions

View File

@@ -101,9 +101,10 @@ class BroadcastAreaLibrary(SerialisedModelCollection, SortableMixin, GetItemById
model = BroadcastArea
def __init__(self, row):
id, name, is_group = row
id, name, name_singular, is_group = row
self.id = id
self.name = name
self.name_singular = name_singular
self.is_group = bool(is_group)
self.items = BroadcastAreasRepository().get_all_areas_for_library(self.id)

View File

@@ -69,15 +69,20 @@ repo.delete_db()
repo.create_tables()
simple_datasets = [
("Countries", "ctry19cd", "ctry19nm"),
("Countries", "country", "ctry19cd", "ctry19nm"),
]
for dataset_name, id_field, name_field in simple_datasets:
for dataset_name, dataset_name_singular, id_field, name_field in simple_datasets:
filepath = package_path / "{}.geojson".format(dataset_name)
dataset_id = id_field[:-2]
dataset_geojson = geojson.loads(filepath.read_text())
repo.insert_broadcast_area_library(dataset_id, dataset_name, False)
repo.insert_broadcast_area_library(
dataset_id,
name=dataset_name,
name_singular=dataset_name_singular,
is_group=False,
)
for feature in dataset_geojson["features"]:
f_id = dataset_id + "-" + feature["properties"][id_field]
@@ -111,8 +116,14 @@ ward_code_to_la_id_mapping = {
}
dataset_name = "Local authorities"
dataset_name_singular = "local authority"
dataset_id = "wd20-lad20"
repo.insert_broadcast_area_library(dataset_id, dataset_name, True)
repo.insert_broadcast_area_library(
dataset_id,
name=dataset_name,
name_singular=dataset_name_singular,
is_group=True,
)
areas_to_add = []

View File

@@ -21,6 +21,7 @@ class BroadcastAreasRepository(object):
CREATE TABLE broadcast_area_libraries (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
name_singular TEXT NOT NULL,
is_group BOOLEAN NOT NULL
)""")
@@ -62,15 +63,15 @@ class BroadcastAreasRepository(object):
ON broadcast_areas (broadcast_area_library_group_id);
""")
def insert_broadcast_area_library(self, id, name, is_group):
def insert_broadcast_area_library(self, id, *, name, name_singular, is_group):
q = """
INSERT INTO broadcast_area_libraries (id, name, is_group)
VALUES (?, ?, ?)
INSERT INTO broadcast_area_libraries (id, name, name_singular, is_group)
VALUES (?, ?, ?, ?)
"""
with self.conn() as conn:
conn.execute(q, (id, name, is_group))
conn.execute(q, (id, name, name_singular, is_group))
def insert_broadcast_areas(self, areas):
@@ -106,9 +107,9 @@ class BroadcastAreasRepository(object):
return cursor.fetchall()
def get_libraries(self):
q = "SELECT id, name, is_group FROM broadcast_area_libraries"
q = "SELECT id, name, name_singular, is_group FROM broadcast_area_libraries"
results = self.query(q)
libraries = [(row[0], row[1], row[2]) for row in results]
libraries = [(row[0], row[1], row[2], row[3]) for row in results]
return sorted(libraries)
def get_library_description(self, library_id):

View File

@@ -126,6 +126,7 @@ def choose_broadcast_area(service_id, broadcast_message_id, library_slug):
search_form=SearchByNameForm(),
show_search_form=(len(library) > 7),
library=library,
page_title=f'Choose a {library.name_singular.lower()}',
broadcast_message=broadcast_message,
)
@@ -142,7 +143,7 @@ def choose_broadcast_area(service_id, broadcast_message_id, library_slug):
form=form,
search_form=SearchByNameForm(),
show_search_form=(len(form.areas.choices) > 7),
page_title=library.name,
page_title=f'Choose {library.name.lower()}',
broadcast_message=broadcast_message,
)

View File

@@ -4,13 +4,13 @@
{% extends "withnav_template.html" %}
{% block service_page_title %}
{{ library.name }}
{{ page_title }}
{% endblock %}
{% block maincolumn_content %}
{{ page_header(
library.name,
page_title,
back_link=url_for('.choose_broadcast_library', service_id=current_service.id, broadcast_message_id=broadcast_message.id),
)}}

View File

@@ -164,6 +164,6 @@ def test_repository_has_all_libraries():
assert len(libraries) == 2
assert [
'Countries',
'Local authorities',
] == [name for _, name, _is_group in libraries]
('Countries', 'country'),
('Local authorities', 'local authority'),
] == [(name, name_singular) for _, name, name_singular, _is_group in libraries]

View File

@@ -320,6 +320,9 @@ def test_choose_broadcast_area_page(
broadcast_message_id=fake_uuid,
library_slug='ctry19',
)
assert normalize_spaces(page.select_one('h1').text) == (
'Choose countries'
)
assert [
(
choice.select_one('input')['value'],
@@ -347,6 +350,9 @@ def test_choose_broadcast_area_page_for_area_with_sub_areas(
broadcast_message_id=fake_uuid,
library_slug='wd20-lad20',
)
assert normalize_spaces(page.select_one('h1').text) == (
'Choose a local authority'
)
partial_url_for = partial(
url_for,
'main.choose_broadcast_sub_area',