diff --git a/README.md b/README.md index b8cd421c0..79a376436 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Our other repositories are: ### Common dev work - [Local setup](#local-setup) -- [Testing](./docs/testing.md) +- [Testing](./docs/testing.md), both automated and manual - [Deploying](./docs/deploying.md) - [Running one-off tasks](./docs/one-off-tasks.md) diff --git a/app/commands.py b/app/commands.py index ff95887e6..0f4e94ed3 100644 --- a/app/commands.py +++ b/app/commands.py @@ -340,33 +340,6 @@ def update_jobs_archived_flag(start_date, end_date): current_app.logger.info('Total archived jobs = {}'.format(total_updated)) -# @notify_command(name='update-emails-to-remove-gsi') -# @click.option('-s', '--service_id', required=True, help="service id. Update all user.email_address to remove .gsi") -# @statsd(namespace="tasks") -# def update_emails_to_remove_gsi(service_id): -# users_to_update = """SELECT u.id user_id, u.name, email_address, s.id, s.name -# FROM users u -# JOIN user_to_service us on (u.id = us.user_id) -# JOIN services s on (s.id = us.service_id) -# WHERE s.id = :service_id -# AND u.email_address ilike ('%.gsi.gov.uk%') -# """ -# results = db.session.execute(users_to_update, {'service_id': service_id}) -# print("Updating {} users.".format(results.rowcount)) - -# for user in results: -# print('User with id {} updated'.format(user.user_id)) - -# update_stmt = """ -# UPDATE users -# SET email_address = replace(replace(email_address, '.gsi.gov.uk', '.gov.uk'), '.GSI.GOV.UK', '.GOV.UK'), -# updated_at = now() -# WHERE id = :user_id -# """ -# db.session.execute(update_stmt, {'user_id': str(user.user_id)}) -# db.session.commit() - - @notify_command(name='replay-daily-sorted-count-files') @click.option('-f', '--file_extension', required=False, help="File extension to search for, defaults to rs.txt") @statsd(namespace="tasks") diff --git a/docs/one-off-tasks.md b/docs/one-off-tasks.md index a337eaf01..d107ea849 100644 --- a/docs/one-off-tasks.md +++ b/docs/one-off-tasks.md @@ -2,14 +2,18 @@ For these, we're using Flask commands, which live in [`/app/commands.py`](../app/commands.py). -This includes things that might be one-time operations! Using a command allows the operation to be tested, -both with `pytest` and with trial runs. +This includes things that might be one-time operations! If we're running it on production, it should be a Flask +command Using a command allows the operation to be tested, both with `pytest` and with trial runs in staging. + +To see information about available commands, you can get a list with: + +`pipenv run flask command` + +Appending `--help` to any command will give you more information about parameters. To run a command on cloud.gov, use this format: -``` -cf run-task CLOUD-GOV-APP --commmand "YOUR COMMAND HERE" --name YOUR-COMMAND -``` +`cf run-task CLOUD-GOV-APP --commmand "YOUR COMMAND HERE" --name YOUR-COMMAND` [Here's more documentation](https://docs.cloudfoundry.org/devguide/using-tasks.html) about Cloud Foundry tasks. diff --git a/docs/testing.md b/docs/testing.md index 90c5bdb2d..ad6c7e62e 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -23,6 +23,14 @@ We're using GitHub Actions. See [/.github](../.github/) for the configuration. In addition to commit-triggered scans, the `daily_checks.yml` workflow runs the relevant dependency audits, static scan, and/or dynamic scans at 10am UTC each day. Developers will be notified of failures in daily scans by GitHub notifications. +## Manual testing + +If you're checking out the system locally, you may want to create a user quickly. + +`pipenv run flask command create-test-user` + +This will run an interactive prompt to create a user, and then mark that user as active. *Use a real mobile number* if you want to log in, as the SMS auth code will be sent here. + ## To run a local OWASP scan 1. Run `make run-flask` from within the dev container.