diff --git a/app/assets/images/dashed-border-govuk-blue.svg b/app/assets/images/dashed-border-govuk-blue.svg new file mode 100644 index 000000000..3c9d9f1db --- /dev/null +++ b/app/assets/images/dashed-border-govuk-blue.svg @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/app/assets/stylesheets/components/area-list.scss b/app/assets/stylesheets/components/area-list.scss index d347af7fc..66769111b 100644 --- a/app/assets/stylesheets/components/area-list.scss +++ b/app/assets/stylesheets/components/area-list.scss @@ -1,6 +1,6 @@ .area-list { - display: inline-block; + display: inline; &-item { @@ -94,27 +94,37 @@ content: ""; display: block; position: absolute; - top: 0; - left: 0; - width: govuk-spacing(7); - height: govuk-spacing(7); + top: 3px; + left: govuk-spacing(1); + width: govuk-spacing(6); + height: govuk-spacing(6); box-sizing: border-box; margin-right: govuk-spacing(1); + transform: rotate(45deg); } &--certain { &:before { - border: 4px solid rgba($white, 0.1); - background: rgba($govuk-blue, 0.6); - box-shadow: inset 0 0 0 2px $black; + border: 2px solid $black; + background: $light-blue-50; } } &--likely { &:before { padding: 1px; - border: 2px solid $govuk-blue; - background: rgba($govuk-blue, 0.2); + border: 2px dashed $govuk-blue; + border-image: file-url('dashed-border-govuk-blue.svg') 4 round; + background: $light-blue-25; + } + } + + &--phone-estimate { + padding-left: govuk-spacing(1); + margin-right: 0; + float: right; + &:before { + display: none; } } diff --git a/app/models/broadcast_message.py b/app/models/broadcast_message.py index 87b431b37..c5951b152 100644 --- a/app/models/broadcast_message.py +++ b/app/models/broadcast_message.py @@ -128,7 +128,7 @@ class BroadcastMessage(JSONModel): def count_of_phones(self): return round_to_significant_figures( sum(area.count_of_phones for area in self.areas), - 2 + 1 ) @property @@ -136,7 +136,7 @@ class BroadcastMessage(JSONModel): area_estimate = self.simple_polygons.estimated_area bleed_area_estimate = self.simple_polygons.bleed.estimated_area - area_estimate return round_to_significant_figures( - self.count_of_phones * bleed_area_estimate / area_estimate, + self.count_of_phones + (self.count_of_phones * bleed_area_estimate / area_estimate), 1 ) diff --git a/app/templates/views/broadcast/macros/area-map.html b/app/templates/views/broadcast/macros/area-map.html index 53a991dc9..32b0ce8ee 100644 --- a/app/templates/views/broadcast/macros/area-map.html +++ b/app/templates/views/broadcast/macros/area-map.html @@ -7,7 +7,7 @@ Will get the - alert ({{ broadcast_message.count_of_phones|format_thousands }} phones) + alert
  • @@ -18,7 +18,13 @@ the alert - ({{ broadcast_message.count_of_phones_likely|format_thousands }} phones) +
  • +
  • + {% if broadcast_message.count_of_phones == broadcast_message.count_of_phones_likely %} + {{ broadcast_message.count_of_phones|format_thousands }} phones estimated + {% else %} + {{ broadcast_message.count_of_phones|format_thousands }} to {{ broadcast_message.count_of_phones_likely|format_thousands }} phones + {% endif %}
  • {% endmacro %} diff --git a/app/templates/views/broadcast/partials/area-map-javascripts.html b/app/templates/views/broadcast/partials/area-map-javascripts.html index 6111f6be2..b557e9445 100644 --- a/app/templates/views/broadcast/partials/area-map-javascripts.html +++ b/app/templates/views/broadcast/partials/area-map-javascripts.html @@ -5,23 +5,13 @@ {% for polygon in broadcast_message.simple_polygons.bleed.as_coordinate_pairs_lat_long %} polygons.push( L.polygon({{polygon}}, { - opacity: 0.8, - color: '#005ea5', // $light-blue - fillColor: '#005ea5', // $light-blue + opacity: 1, + color: '#005ea5', + fillColor: '#2B8CC4', fillOpacity: 0.15, - weight: 2 - }) - ); - {% endfor %} - - {% for polygon in broadcast_message.simple_polygons.as_coordinate_pairs_lat_long %} - polygons.push( - L.polygon({{polygon}}, { - opacity: 0.3, - color: '#005ea5', // $black - fillColor: '#005ea5', // $light-blue - fillOpacity: 0.3, - weight: 1 + weight: 2, + dashArray: [6, 7], + lineCap: 'butt' }) ); {% endfor %} @@ -29,8 +19,9 @@ {% for polygon in broadcast_message.polygons.as_coordinate_pairs_lat_long %} polygons.push( L.polygon({{polygon}}, { - color: '#0b0b0c', // $black - fillOpacity: 0, + color: '#0b0b0c', + fillColor: '#005ea5', + fillOpacity: 0.3, weight: 2 }) ); diff --git a/tests/app/main/views/test_broadcast.py b/tests/app/main/views/test_broadcast.py index b17f5c93e..35963b642 100644 --- a/tests/app/main/views/test_broadcast.py +++ b/tests/app/main/views/test_broadcast.py @@ -368,13 +368,57 @@ def test_broadcast_page( ), +@pytest.mark.parametrize('areas_selected, areas_listed, estimates', ( + ([ + 'ctry19-E92000001', + 'ctry19-S92000003', + ], [ + 'England remove', + 'Scotland remove', + ], [ + 'An area of 176,714.9 square miles Will get the alert', + 'An extra area of 3,052.8 square miles is Likely to get the alert', + '40,000,000 phones estimated', + ]), + ([ + 'wd20-E05003224', + 'wd20-E05003225', + 'wd20-E05003227', + 'wd20-E05003228', + 'wd20-E05003229', + ], [ + 'Penrith Carleton remove', + 'Penrith East remove', + 'Penrith Pategill remove', + 'Penrith South remove', + 'Penrith West remove', + ], [ + 'An area of 6.3 square miles Will get the alert', + 'An extra area of 14.4 square miles is Likely to get the alert', + '9,000 to 30,000 phones', + ]), +)) def test_preview_broadcast_areas_page( + mocker, client_request, service_one, fake_uuid, - mock_get_draft_broadcast_message, + areas_selected, + areas_listed, + estimates, ): service_one['permissions'] += ['broadcast'] + mocker.patch( + 'app.broadcast_message_api_client.get_broadcast_message', + return_value=broadcast_message_json( + id_=fake_uuid, + template_id=fake_uuid, + created_by_id=fake_uuid, + service_id=SERVICE_ONE_ID, + status='draft', + areas=areas_selected, + ), + ) page = client_request.get( '.preview_broadcast_areas', service_id=SERVICE_ONE_ID, @@ -384,20 +428,14 @@ def test_preview_broadcast_areas_page( assert [ normalize_spaces(item.text) for item in page.select('ul.area-list li.area-list-item') - ] == [ - 'England remove', - 'Scotland remove', - ] + ] == areas_listed assert len(page.select('#map')) == 1 assert [ normalize_spaces(item.text) for item in page.select('ul li.area-key') - ] == [ - 'An area of 176,714.9 square miles Will get the alert (44,000,000 phones)', - 'An extra area of 3,052.8 square miles is Likely to get the alert (800,000 phones)', - ] + ] == estimates @pytest.mark.parametrize('areas, expected_list', (