Added an endpoint that returns all letter jobs, ordered by created_at desc.

This commit is contained in:
Rebecca Law
2017-04-07 11:50:56 +01:00
parent 61d228e797
commit f7ab49246a
4 changed files with 35 additions and 4 deletions

View File

@@ -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()

View File

@@ -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

View File

@@ -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):

View File

@@ -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]