From f7ab49246a30b15f331eb762061f3b99591a4410 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Fri, 7 Apr 2017 11:50:56 +0100 Subject: [PATCH] Added an endpoint that returns all letter jobs, ordered by created_at desc. --- app/dao/jobs_dao.py | 10 +++++++++- app/letters/send_letter_jobs.py | 13 +++++++++++-- app/schemas.py | 2 ++ tests/app/letters/test_send_letter_jobs.py | 14 +++++++++++++- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/app/dao/jobs_dao.py b/app/dao/jobs_dao.py index 73efc7192..a2b2390b0 100644 --- a/app/dao/jobs_dao.py +++ b/app/dao/jobs_dao.py @@ -8,8 +8,10 @@ from app.dao import days_ago from app.models import (Job, Notification, NotificationHistory, + Template, JOB_STATUS_SCHEDULED, - JOB_STATUS_PENDING) + JOB_STATUS_PENDING, + LETTER_TYPE) from app.statsd_decorators import statsd @@ -126,3 +128,9 @@ def dao_get_jobs_older_than_limited_by(older_than=7, limit_days=2): cast(Job.created_at, sql_date) < days_ago(older_than), cast(Job.created_at, sql_date) >= days_ago(older_than + limit_days) ).order_by(desc(Job.created_at)).all() + + +def dao_get_all_letter_jobs(): + return db.session.query(Job).join(Job.template).filter( + Template.template_type == LETTER_TYPE + ).order_by(desc(Job.created_at)).all() diff --git a/app/letters/send_letter_jobs.py b/app/letters/send_letter_jobs.py index ff9d2bc80..806689567 100644 --- a/app/letters/send_letter_jobs.py +++ b/app/letters/send_letter_jobs.py @@ -1,8 +1,9 @@ -from flask import Blueprint -from flask import current_app +from flask import Blueprint, jsonify from flask import request from app import notify_celery +from app.dao.jobs_dao import dao_get_all_letter_jobs +from app.schemas import job_schema from app.v2.errors import register_errors from app.letters.letter_schemas import letter_job_ids from app.schema_validation import validate @@ -17,3 +18,11 @@ def send_letter_jobs(): notify_celery.send_task(name="send-files-to-dvla", args=(job_ids['job_ids'],), queue="process-ftp") return "Task created to send files to DVLA" + + +@letter_job.route('/letter-jobs', methods=['GET']) +def get_letter_jobs(): + letter_jobs = dao_get_all_letter_jobs() + data = job_schema.dump(letter_jobs, many=True).data + + return jsonify(data=data), 200 diff --git a/app/schemas.py b/app/schemas.py index 8c76b99a4..8ed2eb498 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -283,6 +283,8 @@ class JobSchema(BaseSchema): job_status = field_for(models.JobStatus, 'name', required=False) scheduled_for = fields.DateTime() + service_name = fields.Nested(ServiceSchema, attribute="service", dump_to="service_name", only=["name"], + dump_only=True) @validates('scheduled_for') def validate_scheduled_for(self, value): diff --git a/tests/app/letters/test_send_letter_jobs.py b/tests/app/letters/test_send_letter_jobs.py index 42874dd78..0f66c0b01 100644 --- a/tests/app/letters/test_send_letter_jobs.py +++ b/tests/app/letters/test_send_letter_jobs.py @@ -1,8 +1,8 @@ import uuid -from flask import current_app from flask import json +from app.schemas import job_schema from tests import create_authorization_header @@ -40,3 +40,15 @@ def test_send_letter_jobs_throws_validation_error(client, mocker): assert response.status_code == 400 assert not mock_celery.called + + +def test_send_letter_jobs_throws_validation_error(client, sample_letter_job): + auth_header = create_authorization_header() + response = client.get( + path='/letter-jobs', + headers=[('Content-Type', 'application/json'), auth_header]) + + assert response.status_code == 200 + json_resp = json.loads(response.get_data(as_text=True)) + assert len(json_resp['data']) == 0 + assert job_schema.dumps(sample_letter_job) == json_resp['data'][0]