model: change play.completed to play.status

We want a bit more granularity regarding the status of the
plays, "completed" is not enough.
In 0.x, the status was inferred at runtime. We'll set it so we don't
need to compute it every time.

Change-Id: I0184aab6cf1f839165fdcfdab4b7f567ec44442e
This commit is contained in:
David Moreau Simard 2018-11-14 14:36:12 -05:00
parent 8f4e1ac20d
commit 2fc776a95f
No known key found for this signature in database
GPG Key ID: CBEB466764A9E621
4 changed files with 21 additions and 6 deletions

View File

@ -1,4 +1,4 @@
# Generated by Django 2.1.2 on 2018-10-16 00:43
# Generated by Django 2.1.3 on 2018-11-14 19:34
from django.db import migrations, models
import django.db.models.deletion
@ -75,7 +75,7 @@ class Migration(migrations.Migration):
('ended', models.DateTimeField(blank=True, null=True)),
('name', models.CharField(blank=True, max_length=255, null=True)),
('uuid', models.UUIDField()),
('completed', models.BooleanField(default=False)),
('status', models.CharField(choices=[('unknown', 'unknown'), ('running', 'running'), ('completed', 'completed')], default='unknown', max_length=25)),
],
options={
'db_table': 'plays',

View File

@ -156,9 +156,15 @@ class Play(Duration):
class Meta:
db_table = "plays"
# A play in ARA can be running (in progress) or completed (regardless of success or failure)
UNKNOWN = "unknown"
RUNNING = "running"
COMPLETED = "completed"
STATUS = ((UNKNOWN, "unknown"), (RUNNING, "running"), (COMPLETED, "completed"))
name = models.CharField(max_length=255, blank=True, null=True)
uuid = models.UUIDField()
completed = models.BooleanField(default=False)
status = models.CharField(max_length=25, choices=STATUS, default=UNKNOWN)
playbook = models.ForeignKey(Playbook, on_delete=models.CASCADE, related_name="plays")
def __str__(self):

View File

@ -69,7 +69,7 @@ class PlayFactory(factory.DjangoModelFactory):
model = models.Play
name = "test play"
completed = True
status = "running"
uuid = "5c5f67b9-e63c-6297-80da-000000000005"
playbook = factory.SubFactory(PlaybookFactory)

View File

@ -34,7 +34,7 @@ class PlayTestCase(APITestCase):
serializer = serializers.PlaySerializer(
data={
"name": "serializer",
"completed": True,
"status": "completed",
"uuid": "5c5f67b9-e63c-6297-80da-000000000005",
"playbook": playbook.id,
}
@ -43,6 +43,7 @@ class PlayTestCase(APITestCase):
play = serializer.save()
play.refresh_from_db()
self.assertEqual(play.name, "serializer")
self.assertEqual(play.status, "completed")
def test_get_no_plays(self):
request = self.client.get("/api/v1/plays")
@ -68,7 +69,7 @@ class PlayTestCase(APITestCase):
"/api/v1/plays",
{
"name": "create",
"completed": False,
"status": "running",
"uuid": "5c5f67b9-e63c-6297-80da-000000000005",
"playbook": playbook.id,
},
@ -109,3 +110,11 @@ class PlayTestCase(APITestCase):
play = factories.PlayFactory(started=started, ended=ended)
request = self.client.get("/api/v1/plays/%s" % play.id)
self.assertEqual(request.data["duration"], datetime.timedelta(0, 3600))
def test_update_wrong_play_status(self):
play = factories.PlayFactory()
self.assertNotEqual("wrong", play.status)
request = self.client.patch("/api/v1/plays/%s" % play.id, {"status": "wrong"})
self.assertEqual(400, request.status_code)
play_updated = models.Play.objects.get(id=play.id)
self.assertNotEqual("wrong", play_updated.status)