From 0f943ae5b9a9ebe1b01266b41ee5bcd45c2b6ebd Mon Sep 17 00:00:00 2001
From: Kar Rui Lau <karrui@open.gov.sg>
Date: Mon, 7 Oct 2024 11:49:31 +0800
Subject: [PATCH] test: add test cases for getPageById

---
 .../__tests__/resource.service.test.ts        | 104 +++++++++++++++++-
 1 file changed, 103 insertions(+), 1 deletion(-)

diff --git a/apps/studio/src/server/modules/resource/__tests__/resource.service.test.ts b/apps/studio/src/server/modules/resource/__tests__/resource.service.test.ts
index e473b9169b..af101106e0 100644
--- a/apps/studio/src/server/modules/resource/__tests__/resource.service.test.ts
+++ b/apps/studio/src/server/modules/resource/__tests__/resource.service.test.ts
@@ -6,7 +6,11 @@ import {
 
 import type { Resource } from "../../database"
 import { db } from "../../database"
-import { getFullPageById, getSiteResourceById } from "../resource.service"
+import {
+  getFullPageById,
+  getPageById,
+  getSiteResourceById,
+} from "../resource.service"
 
 describe("resource.service", () => {
   describe("getSiteResourceById", () => {
@@ -183,4 +187,102 @@ describe("resource.service", () => {
       expect(result).toBeUndefined()
     })
   })
+
+  describe("getPageById", () => {
+    it("should return the 'Page' resource with the given `id`", async () => {
+      // Arrange
+      const { site, page } = await setupPageResource({
+        resourceType: "Page",
+      })
+
+      // Act
+      const result = await getPageById(db, {
+        siteId: site.id,
+        resourceId: Number(page.id),
+      })
+
+      // Assert
+      expect(result).toMatchObject(page)
+    })
+
+    it("should return the 'RootPage' resource with the given `id`", async () => {
+      // Arrange
+      const { site, page: rootPage } = await setupPageResource({
+        resourceType: "RootPage",
+      })
+
+      // Act
+      const result = await getPageById(db, {
+        siteId: site.id,
+        resourceId: Number(rootPage.id),
+      })
+
+      // Assert
+      expect(result).toMatchObject(rootPage)
+    })
+
+    it("should return the 'CollectionPage' resource with the given `id`", async () => {
+      // Arrange
+      const { site, page: collectionPage } = await setupPageResource({
+        resourceType: "CollectionPage",
+      })
+
+      // Act
+      const result = await getPageById(db, {
+        siteId: site.id,
+        resourceId: Number(collectionPage.id),
+      })
+
+      // Assert
+      expect(result).toMatchObject(collectionPage)
+    })
+
+    it("should return undefined if resource type is not a supported type", async () => {
+      // Arrange
+      const { site, page } = await setupPageResource({
+        resourceType: "Folder",
+      })
+
+      // Act
+      const result = await getPageById(db, {
+        siteId: site.id,
+        resourceId: Number(page.id),
+      })
+
+      // Assert
+      expect(result).toBeUndefined()
+    })
+
+    it("should return undefined if no resource with the given `id` exists", async () => {
+      // Arrange
+      const { site } = await setupPageResource({
+        resourceType: "Page",
+      })
+
+      // Act
+      const result = await getPageById(db, {
+        siteId: site.id,
+        resourceId: 99999,
+      })
+
+      // Assert
+      expect(result).toBeUndefined()
+    })
+
+    it("should return undefined if the resource with the given `id` does not belong to the given `siteId`", async () => {
+      // Arrange
+      const { page } = await setupPageResource({
+        resourceType: "Page",
+      })
+
+      // Act
+      const result = await getPageById(db, {
+        siteId: 99999,
+        resourceId: Number(page.id),
+      })
+
+      // Assert
+      expect(result).toBeUndefined()
+    })
+  })
 })