Commit Graph

4392 Commits

Author SHA1 Message Date
Chris Hill-Scott
e49693281a Right-align reply link in conversation view
So that it lines up with the outbpund messages.

Also the ‘send’ button is usually right-aligned when using Whatsapp,
iMessage, etc.
2017-10-24 12:00:51 +01:00
Rebecca Law
e1ca1c02b2 Merge pull request #1568 from alphagov/improve-platform-admin
Improve the performance of /platform-admin
2017-10-24 11:51:25 +01:00
Rebecca Law
aaeec3f7ac Remove the extra function - oops 2017-10-24 11:35:30 +01:00
Chris Hill-Scott
9ca41157bf Merge pull request #1569 from alphagov/pyup-update-notifications-python-client-4.4.0-to-4.5.0
Update notifications-python-client to 4.5.0
2017-10-24 11:22:48 +01:00
Chris Hill-Scott
3d3206c61a Merge pull request #1578 from alphagov/pyup-update-pyexcel-io-0.5.2-to-0.5.3
Update pyexcel-io to 0.5.3
2017-10-24 11:22:06 +01:00
Chris Hill-Scott
57a6614625 Merge pull request #1576 from alphagov/pyup-update-pyexcel-xlsx-0.5.1-to-0.5.2
Update pyexcel-xlsx to 0.5.2
2017-10-24 11:21:57 +01:00
pyup-bot
fdef6bfc73 Update pyexcel-io from 0.5.2 to 0.5.3 2017-10-24 11:04:20 +01:00
Chris Hill-Scott
ed53812b96 Merge pull request #1570 from alphagov/pyup-update-pyexcel-0.5.5-to-0.5.6
Update pyexcel to 0.5.6
2017-10-24 11:03:10 +01:00
pyup-bot
c49d8b8507 Update pyexcel-xlsx from 0.5.1 to 0.5.2 2017-10-24 11:02:14 +01:00
Chris Hill-Scott
0368c1bdef Merge pull request #1572 from alphagov/pyup-update-pyexcel-xls-0.5.1-to-0.5.2
Update pyexcel-xls to 0.5.2
2017-10-24 11:01:50 +01:00
Chris Hill-Scott
c50d5191c3 Merge pull request #1574 from alphagov/pyup-update-pyexcel-ods3-0.5.1-to-0.5.2
Update pyexcel-ods3 to 0.5.2
2017-10-24 11:00:55 +01:00
pyup-bot
626c6469ee Update pyexcel-ods3 from 0.5.1 to 0.5.2 2017-10-23 19:02:35 +01:00
pyup-bot
45468a4513 Update pyexcel-xls from 0.5.1 to 0.5.2 2017-10-23 19:02:27 +01:00
pyup-bot
94224f71ba Update pyexcel from 0.5.5 to 0.5.6 2017-10-23 18:17:29 +01:00
pyup-bot
e7a3772c47 Update notifications-python-client from 4.4.0 to 4.5.0 2017-10-23 17:47:28 +01:00
Rebecca Law
7f8e935b44 Improve the performance of /platform-admin
Using a new endpoint in API to get the aggregate platform admin stats.

Relies on https://github.com/alphagov/notifications-api/pull/1332
2017-10-23 15:08:08 +01:00
Chris Hill-Scott
5998b34f20 Merge pull request #1567 from alphagov/pyup-update-flake8-3.4.1-to-3.5.0
Update flake8 to 3.5.0
2017-10-23 13:56:52 +01:00
pyup-bot
7aa6dc3d8a Update flake8 from 3.4.1 to 3.5.0 2017-10-23 13:15:27 +01:00
Sakis
f1a6937b76 Merge pull request #1556 from alphagov/temporary-syslog-drain
Add syslog drain service to preview and staging
2017-10-23 11:44:15 +01:00
Rebecca Law
65d02bb9ba Merge pull request #1566 from alphagov/gov-wales-domain
Add gov.wales domain
2017-10-23 11:23:09 +01:00
Rebecca Law
b07c4caa8f Add gov.wales domain 2017-10-23 11:19:08 +01:00
Chris Hill-Scott
2166939640 Merge pull request #1565 from alphagov/pyup-update-pyexcel-xlsx-0.5.0.1-to-0.5.1
Update pyexcel-xlsx to 0.5.1
2017-10-20 11:27:03 +01:00
pyup-bot
1615688c47 Update pyexcel-xlsx from 0.5.0.1 to 0.5.1 2017-10-20 11:20:19 +01:00
Chris Hill-Scott
0813406de6 Merge pull request #1563 from alphagov/pyup-update-pyexcel-xls-0.5.0-to-0.5.1
Update pyexcel-xls to 0.5.1
2017-10-20 11:20:01 +01:00
Chris Hill-Scott
84e74873cd Merge pull request #1562 from alphagov/pyup-update-pyexcel-0.5.4-to-0.5.5
Update pyexcel to 0.5.5
2017-10-20 11:19:56 +01:00
pyup-bot
87400796e0 Update pyexcel-xls from 0.5.0 to 0.5.1 2017-10-20 11:12:15 +01:00
pyup-bot
26e66fddb3 Update pyexcel from 0.5.4 to 0.5.5 2017-10-20 11:12:03 +01:00
Chris Hill-Scott
11173dbda1 Merge pull request #1555 from alphagov/add-flake8
Add flake8 linting to project
2017-10-20 11:11:42 +01:00
Chris Hill-Scott
dd4c99199e Merge pull request #1558 from alphagov/pyup-update-pyexcel-io-0.5.1-to-0.5.2
Update pyexcel-io to 0.5.2
2017-10-20 11:11:28 +01:00
Chris Hill-Scott
07aba1047f Merge pull request #1561 from alphagov/pyup-update-pyexcel-ods3-0.5.0-to-0.5.1
Update pyexcel-ods3 to 0.5.1
2017-10-20 11:11:16 +01:00
Chris Hill-Scott
1530613fb4 Remove references to pycodestyle
We’re using flake8 now instead.
2017-10-20 11:02:39 +01:00
Chris Hill-Scott
2cecadfcbc Add flake8 linting to project
The GDS Way™[1] recommends using Flake8 to lint Python projects.

This commit takes the Flake8 config from Digital Marketplace API[2] and
removes the bits we don’t need.

It changes the `max_complexity` setting to 14, which is the most complex
code we have in this repo currently (we shouldn’t be writing code _more_
complex than what we already have).

This commit also fixes the errors found by Flake8, which includes 6(!)
tests which were never getting run because they had the same names as
existing tests.

Here is a full list of the errors that were found and fixed:
```
./app/__init__.py:2:1: F401 're' imported but unused
./app/__init__.py:4:1: F401 'json' imported but unused
./app/__init__.py:8:1: F401 'dateutil' imported but unused
./app/__init__.py:11:1: F401 'flask.escape' imported but unused
./app/__init__.py:41:1: F401 'app.proxy_fix' imported but unused
./app/__init__.py:129:5: F821 undefined name 'proxy_fix'
./app/__init__.py:221:19: F821 undefined name 'highlight'
./app/__init__.py:221:35: F821 undefined name 'JavascriptLexer'
./app/__init__.py:221:54: F821 undefined name 'HtmlFormatter'
./app/config.py:2:1: F401 'datetime.timedelta' imported but unused
./app/event_handlers.py:2:1: F401 'flask_login.current_user' imported but unused
./app/utils.py:11:1: F401 'dateutil.parser' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.two_factor' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.notifications' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.add_service' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.forgot_password' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.inbound_number' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.styleguide' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.organisations' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.letter_jobs' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.verify' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.conversation' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.api_keys' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.send' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.dashboard' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.jobs' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.manage_users' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.sign_in' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.sign_out' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.code_not_received' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.invites' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.platform_admin' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.providers' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.service_settings' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.index' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.new_password' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.user_profile' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.feedback' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.choose_service' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.templates' imported but unused
./app/main/__init__.py:5:1: F401 'app.main.views.register' imported but unused
./app/main/forms.py:12:1: F401 'wtforms.SelectField' imported but unused
./app/main/views/api_keys.py:37:29: E241 multiple spaces after ':'
./app/main/views/feedback.py:3:1: F401 'flask.flash' imported but unused
./app/main/views/feedback.py:122:17: E123 closing bracket does not match indentation of opening bracket's line
./app/main/views/inbound_number.py:1:1: F401 'flask.url_for' imported but unused
./app/main/views/inbound_number.py:1:1: F401 'flask.session' imported but unused
./app/main/views/inbound_number.py:1:1: F401 'flask.redirect' imported but unused
./app/main/views/inbound_number.py:1:1: F401 'flask.request' imported but unused
./app/main/views/inbound_number.py:13:1: F401 'flask.jsonify' imported but unused
./app/main/views/jobs.py:31:1: F401 'app.utils.get_template' imported but unused
./app/main/views/letter_jobs.py:1:1: F401 'datetime' imported but unused
./app/main/views/letter_jobs.py:6:1: F401 'app.format_datetime_24h' imported but unused
./app/main/views/manage_users.py:111:9: E123 closing bracket does not match indentation of opening bracket's line
./app/main/views/notifications.py:121:5: F841 local variable 'status_args' is assigned to but never used
./app/main/views/organisations.py:1:1: F401 'flask.request' imported but unused
./app/main/views/service_settings.py:77:9: E123 closing bracket does not match indentation of opening bracket's line
./app/main/views/service_settings.py:82:9: E123 closing bracket does not match indentation of opening bracket's line
./app/main/views/service_settings.py:420:13: E123 closing bracket does not match indentation of opening bracket's line
./app/main/views/sign_in.py:12:1: F401 'flask_login.confirm_login' imported but unused
./app/main/views/sign_in.py:17:1: F401 'app.service_api_client' imported but unused
./app/main/views/sign_in.py:62:13: E123 closing bracket does not match indentation of opening bracket's line
./app/main/views/templates.py:4:1: F401 'flask.json' imported but unused
./app/main/views/templates.py:17:1: F401 'notifications_utils.formatters.escape_html' imported but unused
./app/main/views/templates.py:23:1: F401 'app.utils.get_help_argument' imported but unused
./app/main/views/templates.py:64:13: E123 closing bracket does not match indentation of opening bracket's line
./app/notify_client/service_api_client.py:6:1: F401 '.notification_api_client' imported but unused
./app/notify_client/user_api_client.py:1:1: F401 'uuid' imported but unused
./app/notify_client/user_api_client.py:3:1: F401 'flask.session' imported but unused
./tests/__init__.py:1:1: F401 'csv' imported but unused
./tests/app/main/test_asset_fingerprinter.py:2:1: F401 'os' imported but unused
./tests/app/main/test_asset_fingerprinter.py:4:1: F401 'unittest.mock' imported but unused
./tests/app/main/test_asset_fingerprinter.py:98:9: F841 local variable 'string_with_unicode_character' is assigned to but never used
./tests/app/main/test_errorhandlers.py:2:1: F401 'flask.url_for' imported but unused
./tests/app/main/test_permissions.py:26:13: F841 local variable 'response' is assigned to but never used
./tests/app/main/test_placeholder_form.py:3:1: F401 'wtforms.Label' imported but unused
./tests/app/main/test_placeholder_form.py:11:10: F841 local variable 'req' is assigned to but never used
./tests/app/main/test_two_factor_form.py:10:67: F841 local variable 'req' is assigned to but never used
./tests/app/main/test_two_factor_form.py:23:65: F841 local variable 'req' is assigned to but never used
./tests/app/main/test_two_factor_form.py:37:48: F841 local variable 'req' is assigned to but never used
./tests/app/main/test_two_factor_form.py:51:67: F841 local variable 'req' is assigned to but never used
./tests/app/main/test_two_factor_form.py:65:67: F841 local variable 'req' is assigned to but never used
./tests/app/main/views/test_accept_invite.py:356:5: F841 local variable 'element' is assigned to but never used
./tests/app/main/views/test_activity.py:11:1: F811 redefinition of unused 'mock_get_notifications' from line 11
./tests/app/main/views/test_activity.py:18:1: F401 'datetime.datetime' imported but unused
./tests/app/main/views/test_activity.py:102:5: F841 local variable 'content' is assigned to but never used
./tests/app/main/views/test_activity.py:104:5: F841 local variable 'notification' is assigned to but never used
./tests/app/main/views/test_activity.py:337:5: F841 local variable '_notifications_mock' is assigned to but never used
./tests/app/main/views/test_activity.py:373:13: E126 continuation line over-indented for hanging indent
./tests/app/main/views/test_activity.py:378:9: E121 continuation line under-indented for hanging indent
./tests/app/main/views/test_activity.py:404:13: E126 continuation line over-indented for hanging indent
./tests/app/main/views/test_activity.py:407:9: E121 continuation line under-indented for hanging indent
./tests/app/main/views/test_api_keys.py:354:5: F841 local variable 'response' is assigned to but never used
./tests/app/main/views/test_conversation.py:5:1: F401 'bs4.BeautifulSoup' imported but unused
./tests/app/main/views/test_conversation.py:198:5: F841 local variable 'mock_get_inbound_sms' is assigned to but never used
./tests/app/main/views/test_dashboard.py:53:5: F841 local variable 'mock_template_stats' is assigned to but never used
./tests/app/main/views/test_dashboard.py:72:5: F841 local variable 'mock_template_stats' is assigned to but never used
./tests/app/main/views/test_jobs.py:2:1: F401 'uuid' imported but unused
./tests/app/main/views/test_jobs.py:3:1: F401 'urllib.parse.urlparse' imported but unused
./tests/app/main/views/test_jobs.py:3:1: F401 'urllib.parse.quote' imported but unused
./tests/app/main/views/test_jobs.py:3:1: F401 'urllib.parse.parse_qs' imported but unused
./tests/app/main/views/test_jobs.py:9:1: F401 'app.main.views.jobs.get_status_filters' imported but unused
./tests/app/main/views/test_jobs.py:10:1: F401 'tests.notification_json' imported but unused
./tests/app/main/views/test_letters.py:6:1: F401 'tests.service_json' imported but unused
./tests/app/main/views/test_notifications.py:5:1: F401 'app.utils.REQUESTED_STATUSES' imported but unused
./tests/app/main/views/test_notifications.py:5:1: F401 'app.utils.DELIVERED_STATUSES' imported but unused
./tests/app/main/views/test_notifications.py:5:1: F401 'app.utils.SENDING_STATUSES' imported but unused
./tests/app/main/views/test_notifications.py:5:1: F401 'app.utils.FAILURE_STATUSES' imported but unused
./tests/app/main/views/test_platform_admin.py:242:13: E126 continuation line over-indented for hanging indent
./tests/app/main/views/test_platform_admin.py:247:13: E126 continuation line over-indented for hanging indent
./tests/app/main/views/test_send.py:3:1: F401 'unittest.mock.Mock' imported but unused
./tests/app/main/views/test_send.py:18:1: F811 redefinition of unused 'mock_get_service' from line 18
./tests/app/main/views/test_send.py:18:1: F401 'tests.conftest.multiple_letter_contact_blocks' imported but unused
./tests/app/main/views/test_send.py:18:1: F401 'tests.conftest.no_sms_senders' imported but unused
./tests/app/main/views/test_send.py:18:1: F401 'tests.conftest.multiple_sms_senders' imported but unused
./tests/app/main/views/test_send.py:18:1: F401 'tests.conftest.no_letter_contact_blocks' imported but unused
./tests/app/main/views/test_send.py:102:5: F841 local variable 'response' is assigned to but never used
./tests/app/main/views/test_send.py:870:5: F841 local variable 'response' is assigned to but never used
./tests/app/main/views/test_send.py:1367:5: F841 local variable 'service_id' is assigned to but never used
./tests/app/main/views/test_send.py:1451:13: E126 continuation line over-indented for hanging indent
./tests/app/main/views/test_send.py:1620:80: E226 missing whitespace around arithmetic operator
./tests/app/main/views/test_send.py:1909:13: E126 continuation line over-indented for hanging indent
./tests/app/main/views/test_send.py:1912:9: E121 continuation line under-indented for hanging indent
./tests/app/main/views/test_service_settings.py:13:1: F811 redefinition of unused 'no_reply_to_email_addresses' from line 13
./tests/app/main/views/test_service_settings.py:13:1: F401 'tests.conftest.single_reply_to_email_address' imported but unused
./tests/app/main/views/test_service_settings.py:28:5: E123 closing bracket does not match indentation of opening bracket's line
./tests/app/main/views/test_service_settings.py:104:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:166:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:186:5: F841 local variable 'mocked_get_fn' is assigned to but never used
./tests/app/main/views/test_service_settings.py:217:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:237:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:257:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:307:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:340:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:466:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:555:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:615:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:719:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:874:5: F841 local variable 'page' is assigned to but never used
./tests/app/main/views/test_service_settings.py:902:5: F841 local variable 'page' is assigned to but never used
./tests/app/main/views/test_service_settings.py:954:5: F841 local variable 'page' is assigned to but never used
./tests/app/main/views/test_service_settings.py:986:5: F841 local variable 'page' is assigned to but never used
./tests/app/main/views/test_service_settings.py:1101:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1121:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1271:1: F811 redefinition of unused 'test_set_letter_contact_block_saves' from line 1189
./tests/app/main/views/test_service_settings.py:1433:5: F841 local variable 'page' is assigned to but never used
./tests/app/main/views/test_service_settings.py:1495:5: F841 local variable 'mocked_get_fn' is assigned to but never used
./tests/app/main/views/test_service_settings.py:1540:5: F841 local variable 'mocked_get_fn' is assigned to but never used
./tests/app/main/views/test_service_settings.py:1570:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1589:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1621:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1641:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1658:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1676:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1697:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1759:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_service_settings.py:1775:1: F811 redefinition of unused 'single_reply_to_email_address' from line 13
./tests/app/main/views/test_templates.py:3:1: F401 'uuid' imported but unused
./tests/app/main/views/test_templates.py:11:1: F401 'tests.conftest.mock_get_user' imported but unused
./tests/app/main/views/test_templates.py:514:1: F811 redefinition of unused 'mock_get_user' from line 11
./tests/app/main/views/test_templates.py:672:1: F811 redefinition of unused 'mock_get_user' from line 11
./tests/app/main/views/test_templates.py:795:1: F811 redefinition of unused 'mock_get_user' from line 11
./tests/app/main/views/test_templates.py:835:1: F811 redefinition of unused 'mock_get_user' from line 11
./tests/app/main/views/test_two_factor.py:67:13: E126 continuation line over-indented for hanging indent
./tests/app/notify_client/test_notification_client.py:79:5: F841 local variable 'mock_post' is assigned to but never used
```

1. https://gds-way.cloudapps.digital/manuals/programming-languages/python/linting.html#how-to-use-flake8
2. d5ab8afef4/.flake8
2017-10-20 11:02:39 +01:00
pyup-bot
6727ae67bc Update pyexcel-ods3 from 0.5.0 to 0.5.1 2017-10-20 08:32:29 +01:00
pyup-bot
2961aebf24 Update pyexcel-io from 0.5.1 to 0.5.2 2017-10-20 07:47:28 +01:00
Athanasios Voutsadakis
8a9f73445c Add syslog drain service to preview and staging
This should and will be moved back to manifest-base.yml when
it is configured for production usage.
2017-10-19 16:49:04 +01:00
Chris Hill-Scott
02216b106e Merge pull request #1552 from alphagov/moar-cores
Use more processors when running tests
2017-10-19 11:34:40 +01:00
Chris Hill-Scott
5fe3bfc550 Merge pull request #1547 from alphagov/download-inbound
Let users download a CSV of inbound messages
2017-10-18 17:27:54 +01:00
Pete Herlihy
9544709caa Merge pull request #1554 from alphagov/int-sms-guidance
Explained 'Sent internationally' on the using notify page
2017-10-18 15:42:12 +01:00
Pete Herlihy
a12a51e022 Explained 'Sent internationally' on the using notify page 2017-10-18 14:39:41 +01:00
Chris Hill-Scott
093352c097 Merge pull request #1551 from alphagov/89-90
Changed to 90 live services for DVSA Driving Test
2017-10-18 12:34:14 +01:00
Chris Hill-Scott
3c89b8c266 Merge pull request #1553 from alphagov/hide-delete-link
Hide ‘delete’ link if template’s already deleted
2017-10-18 12:34:07 +01:00
Chris Hill-Scott
4582e95576 Merge pull request #1550 from alphagov/focus-fix
Fix invisible focused item text
2017-10-18 12:34:02 +01:00
Chris Hill-Scott
3810f9ae1b Merge pull request #1549 from alphagov/show-reply-address
Show email reply to address if one’s been selected
2017-10-18 12:33:52 +01:00
Chris Hill-Scott
1ae068d96e Merge pull request #1540 from alphagov/reply-inbound
Let users reply to an inbound message with an existing template
2017-10-18 12:33:42 +01:00
Chris Hill-Scott
60a3ad72f9 Hide ‘delete’ link if template’s already deleted 2017-10-18 11:36:26 +01:00
Chris Hill-Scott
eb2eea2e0b Use more processors when running tests
Back on my old 2013 Macbook Pro, 2 was the optimum number of cores for the fastest test runs. Which is why I chose `-n2` when I originally introduced this flag (see 9ced677ec7).

Now I have a faster Macbook (same as every other developer), which has more cores to take advantage of.

We also use 4 cores when running the API tests.

Cores | Time taken to run tests
--- | ---
1 | 28.31s
2 | 18.15s
3 | 14.33s
4 | 12.32s
5 | 12.98s
6 | 13.49s
8 | 15.37s
2017-10-18 11:15:09 +01:00
Pete Herlihy
fd8db31317 Changed to 90 live services for DVSA Driving Test 2017-10-18 10:29:05 +01:00
Chris Hill-Scott
c096397390 Truncate inbound message content
Inbound text messages can run over multiple lines. This makes the page
harder to scan. Your phone, and the outbound messages page, only show
the first line of the text message, and truncate the rest with an
ellipsis.

This commit does the same for inbound text messages.

It also stops the timestamp for the inbound messages being squashed and
wrapping over multiple lines, which looks messy.

We couldn’t do this before, because it would have stopped people from
being able to copy/paste the full message content from this page.
2017-10-18 10:27:57 +01:00
Chris Hill-Scott
c9b2211bd3 Let users download a CSV of inbound messages
In user research, we’ve seen users copy/pasting the contents of the
inbound SMS page into a spreadsheet, in order to keep a record of the
messages they receive. They even went as far as to write a macro which
fixed the errors caused by copying and pasting.

It would be much easier if we just gave them the data already in a
spreadsheet format. Which is what this commit does.

One caveat is that, because spreadsheets can contain executable code (ie
formulas), and because we’re populating the spreadsheet with
user-submitted data (albeit via SMS) we need to be careful about
injection attacks.

The details of how these attacks work are detailed here (interesting
reading): http://georgemauer.net/2017/10/07/csv-injection.html

The mitigation is to not allow characters which initialise a formula
at the start of the cell.
2017-10-18 10:27:37 +01:00
Chris Hill-Scott
ad8a35b045 Merge pull request #1545 from alphagov/digit-spacing
Add some letter spacing to textboxes that accept digits
2017-10-17 17:07:05 +01:00