db_test.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. import { assertEquals, assertExists } from "@std/assert";
  2. import { del, find, insert, update } from "utils/db.ts";
  3. const TEST_DB_PATH = "data/test_postdown.db";
  4. function cleanup() {
  5. try {
  6. Deno.removeSync(TEST_DB_PATH);
  7. } catch {
  8. // File may not exist
  9. }
  10. }
  11. Deno.test("db - insert and find a User", () => {
  12. cleanup();
  13. try {
  14. const result = insert("User", {
  15. name: "testuser",
  16. email: "test@example.com",
  17. password: "hashedpassword",
  18. }, TEST_DB_PATH);
  19. assertEquals(result.length, 1);
  20. assertExists(result[0]["id"]);
  21. const found = find("User", { email: "test@example.com" }, ["name", "email"], undefined, TEST_DB_PATH);
  22. assertEquals(found.length, 1);
  23. assertEquals(found[0]["name"], "testuser");
  24. assertEquals(found[0]["email"], "test@example.com");
  25. } finally {
  26. cleanup();
  27. }
  28. });
  29. Deno.test("db - find with no results returns empty array", () => {
  30. cleanup();
  31. try {
  32. const found = find("User", { email: "nonexistent@example.com" }, ["id"], undefined, TEST_DB_PATH);
  33. assertEquals(found.length, 0);
  34. } finally {
  35. cleanup();
  36. }
  37. });
  38. Deno.test("db - find with targetKeys returns only specified columns", () => {
  39. cleanup();
  40. try {
  41. insert("User", {
  42. name: "testuser",
  43. email: "test@example.com",
  44. password: "hashedpassword",
  45. }, TEST_DB_PATH);
  46. const found = find("User", { email: "test@example.com" }, ["name"], undefined, TEST_DB_PATH);
  47. assertEquals(found.length, 1);
  48. assertEquals(Object.keys(found[0]).length, 1);
  49. assertEquals(found[0]["name"], "testuser");
  50. } finally {
  51. cleanup();
  52. }
  53. });
  54. Deno.test("db - find with limit", () => {
  55. cleanup();
  56. try {
  57. insert("User", {
  58. name: "user1",
  59. email: "user1@example.com",
  60. password: "pass1",
  61. }, TEST_DB_PATH);
  62. insert("User", {
  63. name: "user2",
  64. email: "user2@example.com",
  65. password: "pass2",
  66. }, TEST_DB_PATH);
  67. const found = find("User", { name: "user1" }, ["id"], 1, TEST_DB_PATH);
  68. assertEquals(found.length, 1);
  69. } finally {
  70. cleanup();
  71. }
  72. });
  73. Deno.test("db - update a User record", () => {
  74. cleanup();
  75. try {
  76. const inserted = insert("User", {
  77. name: "oldname",
  78. email: "test@example.com",
  79. password: "hashedpassword",
  80. }, TEST_DB_PATH);
  81. const userId = inserted[0]["id"] as string | number;
  82. const result = update("User", userId, { name: "newname" }, TEST_DB_PATH);
  83. assertEquals(result.length, 1);
  84. const found = find("User", { id: userId }, ["name"], undefined, TEST_DB_PATH);
  85. assertEquals(found[0]["name"], "newname");
  86. } finally {
  87. cleanup();
  88. }
  89. });
  90. Deno.test("db - delete a User record", () => {
  91. cleanup();
  92. try {
  93. const inserted = insert("User", {
  94. name: "deleteme",
  95. email: "delete@example.com",
  96. password: "hashedpassword",
  97. }, TEST_DB_PATH);
  98. const userId = inserted[0]["id"] as string | number;
  99. const result = del("User", { id: userId }, TEST_DB_PATH);
  100. assertEquals(result, true);
  101. const found = find("User", { id: userId }, ["id"], undefined, TEST_DB_PATH);
  102. assertEquals(found.length, 0);
  103. } finally {
  104. cleanup();
  105. }
  106. });
  107. Deno.test("db - insert and find a Post", () => {
  108. cleanup();
  109. try {
  110. const result = insert("Post", {
  111. id: "abc123",
  112. title: "Test Post",
  113. content: "# Hello World",
  114. user_id: 1,
  115. shared: 0,
  116. }, TEST_DB_PATH);
  117. assertEquals(result.length, 1);
  118. assertEquals(result[0]["id"], "abc123");
  119. const found = find("Post", { id: "abc123" }, ["title", "content"], undefined, TEST_DB_PATH);
  120. assertEquals(found.length, 1);
  121. assertEquals(found[0]["title"], "Test Post");
  122. assertEquals(found[0]["content"], "# Hello World");
  123. } finally {
  124. cleanup();
  125. }
  126. });
  127. Deno.test("db - insert and find a Token", () => {
  128. cleanup();
  129. try {
  130. const result = insert("Token", {
  131. token: "test-token-123",
  132. user_id: 1,
  133. }, TEST_DB_PATH);
  134. assertEquals(result.length, 1);
  135. const found = find("Token", { token: "test-token-123" }, ["user_id"], undefined, TEST_DB_PATH);
  136. assertEquals(found.length, 1);
  137. assertEquals(found[0]["user_id"], 1);
  138. } finally {
  139. cleanup();
  140. }
  141. });
  142. Deno.test("db - update Post shared status", () => {
  143. cleanup();
  144. try {
  145. insert("Post", {
  146. id: "share-test",
  147. title: "Share Test",
  148. content: "content",
  149. user_id: 1,
  150. shared: 0,
  151. }, TEST_DB_PATH);
  152. update("Post", "share-test", { shared: 1 }, TEST_DB_PATH);
  153. const found = find("Post", { id: "share-test" }, ["shared"], undefined, TEST_DB_PATH);
  154. assertEquals(found[0]["shared"], 1);
  155. } finally {
  156. cleanup();
  157. }
  158. });
  159. Deno.test("db - del returns true on non-existent record", () => {
  160. cleanup();
  161. try {
  162. const result = del("User", { id: 99999 }, TEST_DB_PATH);
  163. assertEquals(result, true);
  164. } finally {
  165. cleanup();
  166. }
  167. });
  168. Deno.test("db - insert duplicate name returns empty array", () => {
  169. cleanup();
  170. try {
  171. insert("User", {
  172. name: "dupuser",
  173. email: "first@example.com",
  174. password: "pass1",
  175. }, TEST_DB_PATH);
  176. const result = insert("User", {
  177. name: "dupuser",
  178. email: "second@example.com",
  179. password: "pass2",
  180. }, TEST_DB_PATH);
  181. assertEquals(result.length, 0);
  182. } finally {
  183. cleanup();
  184. }
  185. });