don't create job if template has been archived

This commit is contained in:
Leo Hemsted
2016-05-23 15:44:56 +01:00
parent c87cce3c91
commit 7801efd5ca
3 changed files with 43 additions and 1 deletions

View File

@@ -16,7 +16,7 @@ from app.dao.services_dao import (
from app.dao.templates_dao import (dao_get_template_by_id)
from app.schemas import job_schema
from app.schemas import job_schema, unarchived_template_schema
from app.celery.tasks import process_job
@@ -52,6 +52,12 @@ def create_job(service_id):
"service": service_id
})
template = dao_get_template_by_id(data['template'])
errors = unarchived_template_schema.validate({'archived': template.archived})
if errors:
return jsonify(result='error', message=errors), 400
data.update({"template_version": template.version})
job, errors = job_schema.load(data)
if errors:

View File

@@ -381,6 +381,15 @@ class WeekAggregateNotificationStatisticsSchema(ma.Schema):
_validate_positive_number(value)
class UnarchivedTemplateSchema(BaseSchema):
archived = fields.Boolean(required=True)
@validates_schema
def validate_archived(self, data):
if data['archived']:
raise ValidationError('Template has been deleted', 'template')
user_schema = UserSchema()
user_schema_load_json = UserSchema(load_json=True)
service_schema = ServiceSchema()
@@ -413,3 +422,4 @@ from_to_date_schema = FromToDateSchema()
provider_details_schema = ProviderDetailsSchema()
week_aggregate_notification_statistics_schema = WeekAggregateNotificationStatisticsSchema()
day_schema = DaySchema()
unarchived_template_schema = UnarchivedTemplateSchema()

View File

@@ -4,6 +4,7 @@ import app.celery.tasks
from tests import create_authorization_header
from tests.app.conftest import sample_job as create_job
from app.dao.templates_dao import dao_update_template
def test_get_jobs(notify_api, notify_db, notify_db_session, sample_template):
@@ -178,6 +179,31 @@ def test_create_job_returns_404_if_missing_service(notify_api, sample_template,
assert resp_json['message'] == 'No result found'
def test_create_job_returns_400_if_archived_template(notify_api, sample_template, mocker):
with notify_api.test_request_context():
with notify_api.test_client() as client:
mocker.patch('app.celery.tasks.process_job.apply_async')
sample_template.archived = True
dao_update_template(sample_template)
data = {
'template': str(sample_template.id)
}
path = '/service/{}/job'.format(sample_template.service.id)
auth_header = create_authorization_header(service_id=sample_template.service.id)
headers = [('Content-Type', 'application/json'), auth_header]
response = client.post(
path,
data=json.dumps(data),
headers=headers)
resp_json = json.loads(response.get_data(as_text=True))
assert response.status_code == 400
app.celery.tasks.process_job.apply_async.assert_not_called()
assert resp_json['result'] == 'error'
assert 'Template has been deleted' in resp_json['message']['template']
def _setup_jobs(notify_db, notify_db_session, template, number_of_jobs=5):
for i in range(number_of_jobs):
create_job(