From 9b8be34364c9f7755ffe9bed379801d4d92f3969 Mon Sep 17 00:00:00 2001 From: Paul Paterson Date: Wed, 3 Apr 2024 16:13:12 -0400 Subject: [PATCH] Add ttl as public field for Document --- __tests__/integration/doc.test.ts | 16 ++++++++++++++-- __tests__/unit/doc.test.ts | 18 ++++++++++++++++++ src/values/doc.ts | 7 ++++--- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/__tests__/integration/doc.test.ts b/__tests__/integration/doc.test.ts index 9dae4dce..b6df40d1 100644 --- a/__tests__/integration/doc.test.ts +++ b/__tests__/integration/doc.test.ts @@ -138,11 +138,23 @@ describe("querying for doc types", () => { expect(result.data.module).toBeInstanceOf(Module); expect(result.data.document).toBeInstanceOf(Document); expect(result.data.document.documentReference).toBeInstanceOf( - DocumentReference + DocumentReference, ); expect(result.data.document.namedDocumentReference).toBeInstanceOf( - NamedDocumentReference + NamedDocumentReference, ); expect(result.data.namedDocument).toBeInstanceOf(NamedDocument); }); + + it("can set and read ttl", async () => { + const queryBuilder = fql`${testDoc}`; + const result = await client.query(queryBuilder); + + expect(result.data.ttl).toBeUndefined(); + + const queryBuilderUpdate = fql`${testDoc}.update({ ttl: Time.now().add(1, "day") })`; + const resultUpdate = await client.query(queryBuilderUpdate); + + expect(resultUpdate.data.ttl).toBeInstanceOf(TimeStub); + }); }); diff --git a/__tests__/unit/doc.test.ts b/__tests__/unit/doc.test.ts index 0684b9c7..9593b648 100644 --- a/__tests__/unit/doc.test.ts +++ b/__tests__/unit/doc.test.ts @@ -38,6 +38,24 @@ describe("Document", () => { expect(doc.ts.isoString).toBe("2023-10-16T00:00:00Z"); }); + it("can access ttl", () => { + const doc = new Document({ + coll: new Module("User"), + id: "1234", + ts: TimeStub.from("2023-03-09T00:00:00Z"), + }); + + const doc_w_ttl = new Document({ + coll: new Module("User"), + id: "1234", + ts: TimeStub.from("2023-03-09T00:00:00Z"), + ttl: TimeStub.from("2023-03-10T00:00:00Z"), + }); + + expect(doc.ttl).toBeUndefined(); + expect(doc_w_ttl.ttl).toBeInstanceOf(TimeStub); + }); + it("can access user data", () => { const doc = new Document({ coll: new Module("User"), diff --git a/src/values/doc.ts b/src/values/doc.ts index 1fd93221..0301d7ea 100644 --- a/src/values/doc.ts +++ b/src/values/doc.ts @@ -60,6 +60,7 @@ export class DocumentReference { */ export class Document extends DocumentReference { readonly ts: TimeStub; + readonly ttl?: TimeStub; constructor(obj: { coll: Module | string; @@ -73,8 +74,8 @@ export class Document extends DocumentReference { Object.assign(this, rest); } - toObject(): { coll: Module; id: string; ts: TimeStub } { - return { ...this } as { coll: Module; id: string; ts: TimeStub }; + toObject(): { coll: Module; id: string; ts: TimeStub; ttl?: TimeStub } { + return { ...this }; } } @@ -146,7 +147,7 @@ export class NamedDocumentReference { * ``` */ export class NamedDocument< - T extends QueryValueObject = Record + T extends QueryValueObject = Record, > extends NamedDocumentReference { readonly ts: TimeStub; readonly data: T;