Browse Source

feat(api): expose RRset created field

Peter Thomassen 6 years ago
parent
commit
48e33e3549
5 changed files with 28 additions and 2 deletions
  1. 1 1
      api/desecapi/serializers.py
  2. 11 0
      api/desecapi/tests/test_rrsets.py
  3. 7 0
      docs/rrsets.rst
  4. 4 0
      test/e2e/run_tests
  5. 5 1
      test/e2e/schemas.js

+ 1 - 1
api/desecapi/serializers.py

@@ -204,7 +204,7 @@ class RRsetSerializer(ConditionalExistenceModelSerializer):
 
     class Meta:
         model = models.RRset
-        fields = ('domain', 'subname', 'name', 'records', 'ttl', 'type',)
+        fields = ('created', 'domain', 'subname', 'name', 'records', 'ttl', 'type',)
         extra_kwargs = {
             'subname': {'required': False, 'default': NonBulkOnlyDefault('')}
         }

+ 11 - 0
api/desecapi/tests/test_rrsets.py

@@ -332,6 +332,16 @@ class AuthenticatedRRSetTestCase(AuthenticatedRRSetBaseTestCase):
         self.assertStatus(response, status.HTTP_400_BAD_REQUEST)
         self.assertEquals(response.data['type'][0].code, 'read-only-on-update')
 
+        # Changing "created" is no-op
+        response = self.client.get(url)
+        data = response.data
+        created = data['created']
+        data['created'] = '2019-07-19T17:22:49.575717Z'
+        response = self.client.patch(url, data)
+        self.assertStatus(response, status.HTTP_200_OK)
+        response = self.client.put(url, data)
+        self.assertStatus(response, status.HTTP_200_OK)
+
         # Check that nothing changed
         response = self.client.get(url)
         self.assertStatus(response, status.HTTP_200_OK)
@@ -340,6 +350,7 @@ class AuthenticatedRRSetTestCase(AuthenticatedRRSetBaseTestCase):
         self.assertEqual(response.data['name'], 'test.' + self.my_rr_set_domain.name + '.')
         self.assertEqual(response.data['subname'], 'test')
         self.assertEqual(response.data['type'], 'A')
+        self.assertEqual(response.data['created'], created)
 
         # This is expected to work, but the fields are ignored
         data = {'records': ['3.2.3.4'], 'name': 'example.com.', 'domain': 'example.com'}

+ 7 - 0
docs/rrsets.rst

@@ -32,6 +32,7 @@ RRset Field Reference
 A JSON object representing an RRset has the following structure::
 
     {
+        "created": "2019-09-18T16:32:16.510368Z",
         "domain": "example.com",
         "subname": "www",
         "name": "www.example.com.",
@@ -45,6 +46,12 @@ A JSON object representing an RRset has the following structure::
 
 Field details:
 
+``created``
+    :Access mode: read-only
+
+    Timestamp of RRset creation, in ISO 8601 format (e.g.
+    ``2019-09-18T16:32:16.510368Z``).
+
 ``domain``
     :Access mode: read-only
 

+ 4 - 0
test/e2e/run_tests

@@ -0,0 +1,4 @@
+#!/bin/bash
+for collection in collections/*.json; do
+	newman run $collection --insecure --global-var desecstack_domain=$DESECSTACK_DOMAIN
+done

+ 5 - 1
test/e2e/schemas.js

@@ -59,6 +59,10 @@ exports.domain = {
 
 exports.rrset = {
     properties: {
+        created: {
+            type: "string",
+            format: "date-time"
+        },
         domain: { type: "string" },
         subname: { type: "string" },
         name: { type: "string" },
@@ -73,7 +77,7 @@ exports.rrset = {
         },
         type: { type: "string" },
     },
-    required: ["domain", "subname", "name", "records", "ttl", "type"]
+    required: ["created", "domain", "subname", "name", "records", "ttl", "type"]
 };
 
 exports.rrsets = {