Update request status based on batch status
This commit is contained in:
parent
b492e133c6
commit
f3d77ef7d9
|
@ -0,0 +1,20 @@
|
||||||
|
# Generated by Django 2.0.2 on 2018-02-20 22:48
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('requests', '__first__'),
|
||||||
|
('music', '0021_populate_batch_status'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='importbatch',
|
||||||
|
name='import_request',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='import_batches', to='requests.ImportRequest'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -466,3 +466,26 @@ class ImportJob(models.Model):
|
||||||
@receiver(post_save, sender=ImportJob)
|
@receiver(post_save, sender=ImportJob)
|
||||||
def update_batch_status(sender, instance, **kwargs):
|
def update_batch_status(sender, instance, **kwargs):
|
||||||
instance.batch.update_status()
|
instance.batch.update_status()
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(post_save, sender=ImportBatch)
|
||||||
|
def update_request_status(sender, instance, created, **kwargs):
|
||||||
|
update_fields = kwargs.get('update_fields', []) or []
|
||||||
|
if not instance.import_request:
|
||||||
|
return
|
||||||
|
|
||||||
|
if not created and not 'status' in update_fields:
|
||||||
|
return
|
||||||
|
|
||||||
|
r_status = instance.import_request.status
|
||||||
|
status = instance.status
|
||||||
|
|
||||||
|
if status == 'pending' and r_status == 'pending':
|
||||||
|
# let's mark the request as accepted since we started an import
|
||||||
|
instance.import_request.status = 'accepted'
|
||||||
|
return instance.import_request.save(update_fields=['status'])
|
||||||
|
|
||||||
|
if status == 'finished' and r_status == 'accepted':
|
||||||
|
# let's mark the request as imported since the import is over
|
||||||
|
instance.import_request.status = 'imported'
|
||||||
|
return instance.import_request.save(update_fields=['status'])
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from django.forms import ValidationError
|
||||||
|
|
||||||
|
|
||||||
|
def test_can_bind_import_batch_to_request(factories):
|
||||||
|
request = factories['requests.ImportRequest']()
|
||||||
|
|
||||||
|
assert request.status == 'pending'
|
||||||
|
|
||||||
|
# when we create the import, we consider the request as accepted
|
||||||
|
batch = factories['music.ImportBatch'](import_request=request)
|
||||||
|
request.refresh_from_db()
|
||||||
|
|
||||||
|
assert request.status == 'accepted'
|
||||||
|
|
||||||
|
# now, the batch is finished, therefore the request status should be
|
||||||
|
# imported
|
||||||
|
batch.status = 'finished'
|
||||||
|
batch.save(update_fields=['status'])
|
||||||
|
request.refresh_from_db()
|
||||||
|
|
||||||
|
assert request.status == 'imported'
|
Loading…
Reference in New Issue