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:
parent
c653d6a2c5
commit
41db775584
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue