Implement API for ARA records

This adds the API support for implementing records in ARA that are meant
to be used by the ara_record and ara_read modules.

Change-Id: I162de3859ec05fb51d190753fe073c48ed6f8823
This commit is contained in:
David Moreau Simard 2018-10-02 14:44:07 -05:00
parent c653d6a2c5
commit 41db775584
No known key found for this signature in database
GPG Key ID: CBEB466764A9E621
5 changed files with 95 additions and 0 deletions

View File

@ -199,6 +199,12 @@ class TaskSerializer(DurationSerializer):
)
class RecordSerializer(serializers.ModelSerializer):
class Meta:
model = models.Record
fields = "__all__"
class StatsSerializer(serializers.ModelSerializer):
class Meta:
model = models.Stats

View File

@ -107,6 +107,16 @@ class ResultFactory(factory.DjangoModelFactory):
task = factory.SubFactory(TaskFactory)
class RecordFactory(factory.DjangoModelFactory):
class Meta:
model = models.Record
key = "record-key"
value = "some-value"
type = "text"
playbook = factory.SubFactory(PlaybookFactory)
class StatsFactory(factory.DjangoModelFactory):
class Meta:
model = models.Stats

View File

@ -0,0 +1,73 @@
# Copyright (c) 2018 Red Hat, Inc.
#
# This file is part of ARA Records Ansible.
#
# ARA is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ARA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with ARA. If not, see <http://www.gnu.org/licenses/>.
from rest_framework.test import APITestCase
from ara.api import models, serializers
from ara.api.tests import factories
class RecordTestCase(APITestCase):
def test_record_factory(self):
record = factories.RecordFactory(key="test")
self.assertEqual(record.key, "test")
def test_record_serializer(self):
playbook = factories.PlaybookFactory()
serializer = serializers.RecordSerializer(
data={"key": "test", "value": "value", "type": "text", "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")
def test_get_no_records(self):
request = self.client.get("/api/v1/records")
self.assertEqual(0, len(request.data["results"]))
def test_get_record(self):
record = factories.RecordFactory()
request = self.client.get("/api/v1/records")
self.assertEqual(1, len(request.data["results"]))
self.assertEqual(record.key, request.data["results"][0]["key"])
def test_delete_record(self):
record = factories.RecordFactory()
self.assertEqual(1, models.Record.objects.all().count())
request = self.client.delete("/api/v1/records/%s" % record.id)
self.assertEqual(204, request.status_code)
self.assertEqual(0, models.Record.objects.all().count())
def test_create_record(self):
playbook = factories.PlaybookFactory()
self.assertEqual(0, models.Record.objects.count())
request = self.client.post(
"/api/v1/records", {"key": "test", "value": "value", "type": "text", "playbook": playbook.id}
)
self.assertEqual(201, request.status_code)
self.assertEqual(1, models.Record.objects.count())
def test_partial_update_record(self):
record = factories.RecordFactory()
self.assertNotEqual("update", record.key)
request = self.client.patch("/api/v1/records/%s" % record.id, {"key": "update"})
self.assertEqual(200, request.status_code)
record_updated = models.Record.objects.get(id=record.id)
self.assertEqual("update", record_updated.key)

View File

@ -26,6 +26,7 @@ router.register("tasks", views.TaskViewSet, base_name="task")
router.register("hosts", views.HostViewSet, base_name="host")
router.register("results", views.ResultViewSet, base_name="result")
router.register("files", views.FileViewSet, base_name="file")
router.register("records", views.RecordViewSet, base_name="record")
router.register("stats", views.StatsViewSet, base_name="stats")
playbook_routes = router.register("playbooks", views.PlaybookViewSet, base_name="playbook")

View File

@ -67,6 +67,11 @@ class FileViewSet(viewsets.ModelViewSet):
serializer_class = serializers.FileSerializer
class RecordViewSet(viewsets.ModelViewSet):
queryset = models.Record.objects.all()
serializer_class = serializers.RecordSerializer
class StatsViewSet(viewsets.ModelViewSet):
queryset = models.Stats.objects.all()
serializer_class = serializers.StatsSerializer