Serialize the value provided by ara_record
We need to serialize the value provided by ara_record since the values can be structured data such as lists, dicts or json. Editorial note: the value field in ARA 0.x was already serialized so this is considered a bug fix. Change-Id: I9beea4a755db077806952d3fdf7cbb04aaad3209
This commit is contained in:
parent
1039878100
commit
6519a91289
@ -1,4 +1,4 @@
|
||||
# Generated by Django 2.1.4 on 2018-12-18 19:29
|
||||
# Generated by Django 2.1.5 on 2019-01-10 22:42
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
@ -107,7 +107,7 @@ class Migration(migrations.Migration):
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('updated', models.DateTimeField(auto_now=True)),
|
||||
('key', models.CharField(max_length=255)),
|
||||
('value', models.TextField(blank=True, null=True)),
|
||||
('value', models.BinaryField(max_length=4294967295)),
|
||||
('type', models.CharField(max_length=255)),
|
||||
('playbook', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='records', to='api.Playbook')),
|
||||
],
|
||||
|
@ -140,7 +140,7 @@ class Record(Base):
|
||||
unique_together = ("key", "playbook")
|
||||
|
||||
key = models.CharField(max_length=255)
|
||||
value = models.TextField(null=True, blank=True)
|
||||
value = models.BinaryField(max_length=(2 ** 32) - 1)
|
||||
type = models.CharField(max_length=255)
|
||||
playbook = models.ForeignKey(Playbook, on_delete=models.CASCADE, related_name="records")
|
||||
|
||||
|
@ -203,6 +203,11 @@ class RecordSerializer(serializers.ModelSerializer):
|
||||
model = models.Record
|
||||
fields = "__all__"
|
||||
|
||||
value = CompressedObjectField(
|
||||
default=zlib.compress(json.dumps("").encode("utf8")),
|
||||
help_text="A string, list, dict, json or other formatted data",
|
||||
)
|
||||
|
||||
|
||||
class StatsSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
|
@ -27,6 +27,7 @@ PLAYBOOK_ARGUMENTS = {"ansible_version": "2.5.5", "inventory": "/etc/ansible/hos
|
||||
RESULT_CONTENTS = {"results": [{"msg": "something happened"}]}
|
||||
LABEL_DESCRIPTION = "label description"
|
||||
TASK_TAGS = ["always", "never"]
|
||||
RECORD_LIST = ["one", "two", "three"]
|
||||
|
||||
|
||||
class PlaybookFactory(factory.DjangoModelFactory):
|
||||
@ -116,8 +117,8 @@ class RecordFactory(factory.DjangoModelFactory):
|
||||
model = models.Record
|
||||
|
||||
key = "record-key"
|
||||
value = "some-value"
|
||||
type = "text"
|
||||
value = utils.compressed_obj(RECORD_LIST)
|
||||
type = "list"
|
||||
playbook = factory.SubFactory(PlaybookFactory)
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from ara.api import models, serializers
|
||||
from ara.api.tests import factories
|
||||
from ara.api.tests import factories, utils
|
||||
|
||||
|
||||
class RecordTestCase(APITestCase):
|
||||
@ -29,14 +29,14 @@ class RecordTestCase(APITestCase):
|
||||
def test_record_serializer(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
serializer = serializers.RecordSerializer(
|
||||
data={"key": "test", "value": "value", "type": "text", "playbook": playbook.id}
|
||||
data={"key": "test", "value": factories.RECORD_LIST, "type": "list", "playbook": playbook.id}
|
||||
)
|
||||
serializer.is_valid()
|
||||
record = serializer.save()
|
||||
record.refresh_from_db()
|
||||
self.assertEqual(record.key, "test")
|
||||
self.assertEqual(record.value, "value")
|
||||
self.assertEqual(record.type, "text")
|
||||
self.assertEqual(record.value, utils.compressed_obj(factories.RECORD_LIST))
|
||||
self.assertEqual(record.type, "list")
|
||||
|
||||
def test_get_no_records(self):
|
||||
request = self.client.get("/api/v1/records")
|
||||
@ -55,7 +55,7 @@ class RecordTestCase(APITestCase):
|
||||
self.assertEqual(204, request.status_code)
|
||||
self.assertEqual(0, models.Record.objects.all().count())
|
||||
|
||||
def test_create_record(self):
|
||||
def test_create_text_record(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
self.assertEqual(0, models.Record.objects.count())
|
||||
request = self.client.post(
|
||||
@ -64,6 +64,50 @@ class RecordTestCase(APITestCase):
|
||||
self.assertEqual(201, request.status_code)
|
||||
self.assertEqual(1, models.Record.objects.count())
|
||||
|
||||
def test_create_list_record(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
self.assertEqual(0, models.Record.objects.count())
|
||||
test_list = factories.RECORD_LIST
|
||||
request = self.client.post(
|
||||
"/api/v1/records", {"key": "listrecord", "value": test_list, "type": "list", "playbook": playbook.id}
|
||||
)
|
||||
self.assertEqual(201, request.status_code)
|
||||
self.assertEqual(1, models.Record.objects.count())
|
||||
self.assertEqual(test_list, request.data["value"])
|
||||
|
||||
def test_create_dict_record(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
self.assertEqual(0, models.Record.objects.count())
|
||||
test_dict = {"a": "dictionary"}
|
||||
request = self.client.post(
|
||||
"/api/v1/records", {"key": "dictrecord", "value": test_dict, "type": "dict", "playbook": playbook.id}
|
||||
)
|
||||
self.assertEqual(201, request.status_code)
|
||||
self.assertEqual(1, models.Record.objects.count())
|
||||
self.assertEqual(test_dict, request.data["value"])
|
||||
|
||||
def test_create_json_record(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
self.assertEqual(0, models.Record.objects.count())
|
||||
test_json = '{"a": "dictionary"}'
|
||||
request = self.client.post(
|
||||
"/api/v1/records", {"key": "dictrecord", "value": test_json, "type": "json", "playbook": playbook.id}
|
||||
)
|
||||
self.assertEqual(201, request.status_code)
|
||||
self.assertEqual(1, models.Record.objects.count())
|
||||
self.assertEqual(test_json, request.data["value"])
|
||||
|
||||
def test_create_url_record(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
self.assertEqual(0, models.Record.objects.count())
|
||||
test_url = "https://ara.recordsansible.org"
|
||||
request = self.client.post(
|
||||
"/api/v1/records", {"key": "dictrecord", "value": test_url, "type": "url", "playbook": playbook.id}
|
||||
)
|
||||
self.assertEqual(201, request.status_code)
|
||||
self.assertEqual(1, models.Record.objects.count())
|
||||
self.assertEqual(test_url, request.data["value"])
|
||||
|
||||
def test_partial_update_record(self):
|
||||
record = factories.RecordFactory()
|
||||
self.assertNotEqual("update", record.key)
|
||||
|
Loading…
x
Reference in New Issue
Block a user