@budibase/backend-core 2.9.19-alpha.0 → 2.9.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/dist/index.js +324 -266
  2. package/dist/index.js.map +4 -4
  3. package/dist/index.js.meta.json +1 -1
  4. package/dist/package.json +19 -4
  5. package/dist/plugins.js +1 -1
  6. package/dist/plugins.js.map +1 -1
  7. package/dist/plugins.js.meta.json +1 -1
  8. package/dist/src/security/permissions.d.ts +1 -1
  9. package/dist/tests.js +260 -222
  10. package/dist/tests.js.map +4 -4
  11. package/dist/tests.js.meta.json +1 -1
  12. package/package.json +19 -4
  13. package/__mocks__/aws-sdk.ts +0 -18
  14. package/dist/tsconfig.build.tsbuildinfo +0 -1
  15. package/jest-testcontainers-config.js +0 -8
  16. package/jest.config.ts +0 -35
  17. package/scripts/build.js +0 -6
  18. package/scripts/test.sh +0 -13
  19. package/src/accounts/accounts.ts +0 -82
  20. package/src/accounts/api.ts +0 -59
  21. package/src/accounts/index.ts +0 -1
  22. package/src/auth/auth.ts +0 -208
  23. package/src/auth/index.ts +0 -1
  24. package/src/auth/tests/auth.spec.ts +0 -14
  25. package/src/blacklist/blacklist.ts +0 -54
  26. package/src/blacklist/index.ts +0 -1
  27. package/src/blacklist/tests/blacklist.spec.ts +0 -46
  28. package/src/cache/appMetadata.ts +0 -88
  29. package/src/cache/base/index.ts +0 -92
  30. package/src/cache/generic.ts +0 -30
  31. package/src/cache/index.ts +0 -5
  32. package/src/cache/tests/writethrough.spec.ts +0 -138
  33. package/src/cache/user.ts +0 -69
  34. package/src/cache/writethrough.ts +0 -133
  35. package/src/configs/configs.ts +0 -257
  36. package/src/configs/index.ts +0 -1
  37. package/src/configs/tests/configs.spec.ts +0 -184
  38. package/src/constants/db.ts +0 -63
  39. package/src/constants/index.ts +0 -2
  40. package/src/constants/misc.ts +0 -50
  41. package/src/context/Context.ts +0 -14
  42. package/src/context/identity.ts +0 -58
  43. package/src/context/index.ts +0 -3
  44. package/src/context/mainContext.ts +0 -310
  45. package/src/context/tests/index.spec.ts +0 -147
  46. package/src/context/types.ts +0 -11
  47. package/src/db/Replication.ts +0 -84
  48. package/src/db/constants.ts +0 -10
  49. package/src/db/couch/DatabaseImpl.ts +0 -238
  50. package/src/db/couch/connections.ts +0 -77
  51. package/src/db/couch/index.ts +0 -5
  52. package/src/db/couch/pouchDB.ts +0 -97
  53. package/src/db/couch/pouchDump.ts +0 -0
  54. package/src/db/couch/utils.ts +0 -50
  55. package/src/db/db.ts +0 -39
  56. package/src/db/errors.ts +0 -14
  57. package/src/db/index.ts +0 -12
  58. package/src/db/lucene.ts +0 -732
  59. package/src/db/searchIndexes/index.ts +0 -1
  60. package/src/db/searchIndexes/searchIndexes.ts +0 -62
  61. package/src/db/tests/index.spec.js +0 -25
  62. package/src/db/tests/lucene.spec.ts +0 -298
  63. package/src/db/tests/pouch.spec.js +0 -62
  64. package/src/db/tests/utils.spec.ts +0 -63
  65. package/src/db/utils.ts +0 -207
  66. package/src/db/views.ts +0 -241
  67. package/src/docIds/conversions.ts +0 -59
  68. package/src/docIds/ids.ts +0 -113
  69. package/src/docIds/index.ts +0 -2
  70. package/src/docIds/newid.ts +0 -5
  71. package/src/docIds/params.ts +0 -174
  72. package/src/docUpdates/index.ts +0 -29
  73. package/src/environment.ts +0 -201
  74. package/src/errors/errors.ts +0 -119
  75. package/src/errors/index.ts +0 -1
  76. package/src/events/analytics.ts +0 -6
  77. package/src/events/asyncEvents/index.ts +0 -2
  78. package/src/events/asyncEvents/publisher.ts +0 -12
  79. package/src/events/asyncEvents/queue.ts +0 -22
  80. package/src/events/backfill.ts +0 -183
  81. package/src/events/documentId.ts +0 -56
  82. package/src/events/events.ts +0 -40
  83. package/src/events/identification.ts +0 -310
  84. package/src/events/index.ts +0 -14
  85. package/src/events/processors/AnalyticsProcessor.ts +0 -64
  86. package/src/events/processors/AuditLogsProcessor.ts +0 -93
  87. package/src/events/processors/LoggingProcessor.ts +0 -37
  88. package/src/events/processors/Processors.ts +0 -52
  89. package/src/events/processors/async/DocumentUpdateProcessor.ts +0 -43
  90. package/src/events/processors/index.ts +0 -19
  91. package/src/events/processors/posthog/PosthogProcessor.ts +0 -118
  92. package/src/events/processors/posthog/index.ts +0 -2
  93. package/src/events/processors/posthog/rateLimiting.ts +0 -106
  94. package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +0 -168
  95. package/src/events/processors/types.ts +0 -1
  96. package/src/events/publishers/account.ts +0 -35
  97. package/src/events/publishers/app.ts +0 -155
  98. package/src/events/publishers/auditLog.ts +0 -26
  99. package/src/events/publishers/auth.ts +0 -73
  100. package/src/events/publishers/automation.ts +0 -110
  101. package/src/events/publishers/backfill.ts +0 -74
  102. package/src/events/publishers/backup.ts +0 -42
  103. package/src/events/publishers/datasource.ts +0 -48
  104. package/src/events/publishers/email.ts +0 -17
  105. package/src/events/publishers/environmentVariable.ts +0 -38
  106. package/src/events/publishers/group.ts +0 -99
  107. package/src/events/publishers/index.ts +0 -24
  108. package/src/events/publishers/installation.ts +0 -38
  109. package/src/events/publishers/layout.ts +0 -26
  110. package/src/events/publishers/license.ts +0 -84
  111. package/src/events/publishers/org.ts +0 -37
  112. package/src/events/publishers/plugin.ts +0 -47
  113. package/src/events/publishers/query.ts +0 -88
  114. package/src/events/publishers/role.ts +0 -62
  115. package/src/events/publishers/rows.ts +0 -29
  116. package/src/events/publishers/screen.ts +0 -36
  117. package/src/events/publishers/serve.ts +0 -43
  118. package/src/events/publishers/table.ts +0 -70
  119. package/src/events/publishers/user.ts +0 -202
  120. package/src/events/publishers/view.ts +0 -107
  121. package/src/featureFlags/index.ts +0 -77
  122. package/src/featureFlags/tests/featureFlags.spec.ts +0 -85
  123. package/src/helpers.ts +0 -9
  124. package/src/index.ts +0 -53
  125. package/src/installation.ts +0 -107
  126. package/src/logging/alerts.ts +0 -26
  127. package/src/logging/correlation/correlation.ts +0 -13
  128. package/src/logging/correlation/index.ts +0 -1
  129. package/src/logging/correlation/middleware.ts +0 -17
  130. package/src/logging/index.ts +0 -4
  131. package/src/logging/pino/logger.ts +0 -232
  132. package/src/logging/pino/middleware.ts +0 -45
  133. package/src/logging/system.ts +0 -81
  134. package/src/logging/tests/system.spec.ts +0 -61
  135. package/src/middleware/adminOnly.ts +0 -9
  136. package/src/middleware/auditLog.ts +0 -6
  137. package/src/middleware/authenticated.ts +0 -193
  138. package/src/middleware/builderOnly.ts +0 -20
  139. package/src/middleware/builderOrAdmin.ts +0 -20
  140. package/src/middleware/csrf.ts +0 -81
  141. package/src/middleware/errorHandling.ts +0 -29
  142. package/src/middleware/index.ts +0 -21
  143. package/src/middleware/internalApi.ts +0 -23
  144. package/src/middleware/joi-validator.ts +0 -45
  145. package/src/middleware/matchers.ts +0 -47
  146. package/src/middleware/passport/datasource/google.ts +0 -95
  147. package/src/middleware/passport/local.ts +0 -54
  148. package/src/middleware/passport/sso/google.ts +0 -77
  149. package/src/middleware/passport/sso/oidc.ts +0 -154
  150. package/src/middleware/passport/sso/sso.ts +0 -165
  151. package/src/middleware/passport/sso/tests/google.spec.ts +0 -67
  152. package/src/middleware/passport/sso/tests/oidc.spec.ts +0 -152
  153. package/src/middleware/passport/sso/tests/sso.spec.ts +0 -197
  154. package/src/middleware/passport/utils.ts +0 -38
  155. package/src/middleware/querystringToBody.ts +0 -28
  156. package/src/middleware/tenancy.ts +0 -36
  157. package/src/middleware/tests/builder.spec.ts +0 -180
  158. package/src/middleware/tests/matchers.spec.ts +0 -134
  159. package/src/migrations/definitions.ts +0 -40
  160. package/src/migrations/index.ts +0 -2
  161. package/src/migrations/migrations.ts +0 -191
  162. package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +0 -11
  163. package/src/migrations/tests/migrations.spec.ts +0 -64
  164. package/src/objectStore/buckets/app.ts +0 -40
  165. package/src/objectStore/buckets/global.ts +0 -29
  166. package/src/objectStore/buckets/index.ts +0 -3
  167. package/src/objectStore/buckets/plugins.ts +0 -71
  168. package/src/objectStore/buckets/tests/app.spec.ts +0 -171
  169. package/src/objectStore/buckets/tests/global.spec.ts +0 -74
  170. package/src/objectStore/buckets/tests/plugins.spec.ts +0 -111
  171. package/src/objectStore/cloudfront.ts +0 -41
  172. package/src/objectStore/index.ts +0 -3
  173. package/src/objectStore/objectStore.ts +0 -440
  174. package/src/objectStore/utils.ts +0 -27
  175. package/src/platform/index.ts +0 -3
  176. package/src/platform/platformDb.ts +0 -6
  177. package/src/platform/tenants.ts +0 -101
  178. package/src/platform/tests/tenants.spec.ts +0 -26
  179. package/src/platform/users.ts +0 -90
  180. package/src/plugin/index.ts +0 -1
  181. package/src/plugin/tests/validation.spec.ts +0 -83
  182. package/src/plugin/utils.ts +0 -156
  183. package/src/queue/constants.ts +0 -6
  184. package/src/queue/inMemoryQueue.ts +0 -141
  185. package/src/queue/index.ts +0 -2
  186. package/src/queue/listeners.ts +0 -195
  187. package/src/queue/queue.ts +0 -54
  188. package/src/redis/index.ts +0 -6
  189. package/src/redis/init.ts +0 -86
  190. package/src/redis/redis.ts +0 -308
  191. package/src/redis/redlockImpl.ts +0 -139
  192. package/src/redis/utils.ts +0 -117
  193. package/src/security/encryption.ts +0 -179
  194. package/src/security/permissions.ts +0 -159
  195. package/src/security/roles.ts +0 -420
  196. package/src/security/sessions.ts +0 -120
  197. package/src/security/tests/encryption.spec.ts +0 -31
  198. package/src/security/tests/permissions.spec.ts +0 -145
  199. package/src/security/tests/sessions.spec.ts +0 -12
  200. package/src/tenancy/db.ts +0 -6
  201. package/src/tenancy/index.ts +0 -2
  202. package/src/tenancy/tenancy.ts +0 -140
  203. package/src/tenancy/tests/tenancy.spec.ts +0 -184
  204. package/src/timers/index.ts +0 -1
  205. package/src/timers/timers.ts +0 -22
  206. package/src/users/db.ts +0 -460
  207. package/src/users/events.ts +0 -176
  208. package/src/users/index.ts +0 -4
  209. package/src/users/lookup.ts +0 -102
  210. package/src/users/users.ts +0 -276
  211. package/src/users/utils.ts +0 -55
  212. package/src/utils/hashing.ts +0 -14
  213. package/src/utils/index.ts +0 -3
  214. package/src/utils/stringUtils.ts +0 -8
  215. package/src/utils/tests/utils.spec.ts +0 -191
  216. package/src/utils/utils.ts +0 -239
  217. package/tests/core/logging.ts +0 -34
  218. package/tests/core/utilities/index.ts +0 -6
  219. package/tests/core/utilities/jestUtils.ts +0 -30
  220. package/tests/core/utilities/mocks/alerts.ts +0 -3
  221. package/tests/core/utilities/mocks/date.ts +0 -2
  222. package/tests/core/utilities/mocks/events.ts +0 -131
  223. package/tests/core/utilities/mocks/fetch.ts +0 -17
  224. package/tests/core/utilities/mocks/index.ts +0 -10
  225. package/tests/core/utilities/mocks/licenses.ts +0 -107
  226. package/tests/core/utilities/mocks/posthog.ts +0 -7
  227. package/tests/core/utilities/structures/Chance.ts +0 -20
  228. package/tests/core/utilities/structures/accounts.ts +0 -115
  229. package/tests/core/utilities/structures/apps.ts +0 -21
  230. package/tests/core/utilities/structures/common.ts +0 -7
  231. package/tests/core/utilities/structures/db.ts +0 -12
  232. package/tests/core/utilities/structures/documents/index.ts +0 -1
  233. package/tests/core/utilities/structures/documents/platform/index.ts +0 -1
  234. package/tests/core/utilities/structures/documents/platform/installation.ts +0 -12
  235. package/tests/core/utilities/structures/generator.ts +0 -2
  236. package/tests/core/utilities/structures/index.ts +0 -15
  237. package/tests/core/utilities/structures/koa.ts +0 -16
  238. package/tests/core/utilities/structures/licenses.ts +0 -167
  239. package/tests/core/utilities/structures/plugins.ts +0 -19
  240. package/tests/core/utilities/structures/quotas.ts +0 -67
  241. package/tests/core/utilities/structures/scim.ts +0 -80
  242. package/tests/core/utilities/structures/shared.ts +0 -19
  243. package/tests/core/utilities/structures/sso.ts +0 -119
  244. package/tests/core/utilities/structures/tenants.ts +0 -5
  245. package/tests/core/utilities/structures/userGroups.ts +0 -10
  246. package/tests/core/utilities/structures/users.ts +0 -73
  247. package/tests/core/utilities/testContainerUtils.ts +0 -98
  248. package/tests/core/utilities/utils/index.ts +0 -1
  249. package/tests/core/utilities/utils/time.ts +0 -3
  250. package/tests/extra/DBTestConfiguration.ts +0 -36
  251. package/tests/extra/index.ts +0 -2
  252. package/tests/extra/testEnv.ts +0 -95
  253. package/tests/index.ts +0 -1
  254. package/tests/jestEnv.ts +0 -6
  255. package/tests/jestSetup.ts +0 -28
  256. package/tsconfig.build.json +0 -29
  257. package/tsconfig.json +0 -4
@@ -1 +0,0 @@
1
- export * from "./searchIndexes"
@@ -1,62 +0,0 @@
1
- import { User, SearchIndex } from "@budibase/types"
2
- import { getGlobalDB } from "../../context"
3
-
4
- export async function createUserIndex() {
5
- const db = getGlobalDB()
6
- let designDoc
7
- try {
8
- designDoc = await db.get<any>("_design/database")
9
- } catch (err: any) {
10
- if (err.status === 404) {
11
- designDoc = { _id: "_design/database" }
12
- }
13
- }
14
-
15
- const fn = function (user: User) {
16
- if (user._id && !user._id.startsWith("us_")) {
17
- return
18
- }
19
- const ignoredFields = [
20
- "_id",
21
- "_rev",
22
- "password",
23
- "account",
24
- "license",
25
- "budibaseAccess",
26
- "accountPortalAccess",
27
- "csrfToken",
28
- ]
29
-
30
- function idx(input: Record<string, any>, prev?: string) {
31
- for (let key of Object.keys(input)) {
32
- if (ignoredFields.includes(key)) {
33
- continue
34
- }
35
- let idxKey = prev != null ? `${prev}.${key}` : key
36
- if (typeof input[key] === "string") {
37
- // eslint-disable-next-line no-undef
38
- // @ts-ignore
39
- index(idxKey, input[key].toLowerCase(), { facet: true })
40
- } else if (typeof input[key] !== "object") {
41
- // eslint-disable-next-line no-undef
42
- // @ts-ignore
43
- index(idxKey, input[key], { facet: true })
44
- } else {
45
- idx(input[key], idxKey)
46
- }
47
- }
48
- }
49
- idx(user)
50
- }
51
-
52
- designDoc.indexes = {
53
- [SearchIndex.USER]: {
54
- index: fn.toString(),
55
- analyzer: {
56
- default: "keyword",
57
- name: "perfield",
58
- },
59
- },
60
- }
61
- await db.put(designDoc)
62
- }
@@ -1,25 +0,0 @@
1
- require("../../../tests")
2
- const { structures } = require("../../../tests")
3
- const { getDB } = require("../db")
4
-
5
- describe("db", () => {
6
- describe("getDB", () => {
7
- it("returns a db", async () => {
8
-
9
- const dbName = structures.db.id()
10
- const db = getDB(dbName)
11
- expect(db).toBeDefined()
12
- expect(db.name).toBe(dbName)
13
- })
14
-
15
- it("uses the custom put function", async () => {
16
- const db = getDB(structures.db.id())
17
- let doc = { _id: "test" }
18
- await db.put(doc)
19
- doc = await db.get(doc._id)
20
- expect(doc.createdAt).toBe(new Date().toISOString())
21
- expect(doc.updatedAt).toBe(new Date().toISOString())
22
- await db.destroy()
23
- })
24
- })
25
- })
@@ -1,298 +0,0 @@
1
- import { newid } from "../../docIds/newid"
2
- import { getDB } from "../db"
3
- import { Database } from "@budibase/types"
4
- import { QueryBuilder, paginatedSearch, fullSearch } from "../lucene"
5
-
6
- const INDEX_NAME = "main"
7
-
8
- const index = `function(doc) {
9
- let props = ["property", "number", "array"]
10
- for (let key of props) {
11
- if (Array.isArray(doc[key])) {
12
- for (let val of doc[key]) {
13
- index(key, val)
14
- }
15
- } else if (doc[key]) {
16
- index(key, doc[key])
17
- }
18
- }
19
- }`
20
-
21
- describe("lucene", () => {
22
- let db: Database, dbName: string
23
-
24
- beforeAll(async () => {
25
- dbName = `db-${newid()}`
26
- // create the DB for testing
27
- db = getDB(dbName)
28
- await db.put({ _id: newid(), property: "word", array: ["1", "4"] })
29
- await db.put({ _id: newid(), property: "word2", array: ["3", "1"] })
30
- await db.put({
31
- _id: newid(),
32
- property: "word3",
33
- number: 1,
34
- array: ["1", "2"],
35
- })
36
- })
37
-
38
- it("should be able to create a lucene index", async () => {
39
- const response = await db.put({
40
- _id: "_design/database",
41
- indexes: {
42
- [INDEX_NAME]: {
43
- index: index,
44
- analyzer: "standard",
45
- },
46
- },
47
- })
48
- expect(response.ok).toBe(true)
49
- })
50
-
51
- describe("query builder", () => {
52
- it("should be able to perform a basic query", async () => {
53
- const builder = new QueryBuilder(dbName, INDEX_NAME)
54
- builder.setSort("property")
55
- builder.setSortOrder("desc")
56
- builder.setSortType("string")
57
- const resp = await builder.run()
58
- expect(resp.rows.length).toBe(3)
59
- })
60
-
61
- it("should handle limits", async () => {
62
- const builder = new QueryBuilder(dbName, INDEX_NAME)
63
- builder.setLimit(1)
64
- const resp = await builder.run()
65
- expect(resp.rows.length).toBe(1)
66
- })
67
-
68
- it("should be able to perform a string search", async () => {
69
- const builder = new QueryBuilder(dbName, INDEX_NAME)
70
- builder.addString("property", "wo")
71
- const resp = await builder.run()
72
- expect(resp.rows.length).toBe(3)
73
- })
74
-
75
- it("should be able to perform a range search", async () => {
76
- const builder = new QueryBuilder(dbName, INDEX_NAME)
77
- builder.addRange("number", 0, 1)
78
- const resp = await builder.run()
79
- expect(resp.rows.length).toBe(1)
80
- })
81
-
82
- it("should be able to perform an equal search", async () => {
83
- const builder = new QueryBuilder(dbName, INDEX_NAME)
84
- builder.addEqual("property", "word2")
85
- const resp = await builder.run()
86
- expect(resp.rows.length).toBe(1)
87
- })
88
-
89
- it("should be able to perform a not equal search", async () => {
90
- const builder = new QueryBuilder(dbName, INDEX_NAME)
91
- builder.addNotEqual("property", "word2")
92
- const resp = await builder.run()
93
- expect(resp.rows.length).toBe(2)
94
- })
95
-
96
- it("should be able to perform an empty search", async () => {
97
- const builder = new QueryBuilder(dbName, INDEX_NAME)
98
- builder.addEmpty("number", true)
99
- const resp = await builder.run()
100
- expect(resp.rows.length).toBe(2)
101
- })
102
-
103
- it("should be able to perform a not empty search", async () => {
104
- const builder = new QueryBuilder(dbName, INDEX_NAME)
105
- builder.addNotEmpty("number", true)
106
- const resp = await builder.run()
107
- expect(resp.rows.length).toBe(1)
108
- })
109
-
110
- it("should be able to perform a one of search", async () => {
111
- const builder = new QueryBuilder(dbName, INDEX_NAME)
112
- builder.addOneOf("property", ["word", "word2"])
113
- const resp = await builder.run()
114
- expect(resp.rows.length).toBe(2)
115
- })
116
-
117
- it("should return all rows when doing a one of search against falsey value", async () => {
118
- const builder = new QueryBuilder(dbName, INDEX_NAME)
119
- builder.addOneOf("property", null)
120
- let resp = await builder.run()
121
- expect(resp.rows.length).toBe(3)
122
-
123
- builder.addOneOf("property", undefined)
124
- resp = await builder.run()
125
- expect(resp.rows.length).toBe(3)
126
-
127
- builder.addOneOf("property", "")
128
- resp = await builder.run()
129
- expect(resp.rows.length).toBe(3)
130
-
131
- builder.addOneOf("property", [])
132
- resp = await builder.run()
133
- expect(resp.rows.length).toBe(0)
134
- })
135
-
136
- it("should be able to perform a contains search", async () => {
137
- const builder = new QueryBuilder(dbName, INDEX_NAME)
138
- builder.addContains("property", ["word"])
139
- const resp = await builder.run()
140
- expect(resp.rows.length).toBe(1)
141
- })
142
-
143
- it("should be able to perform a not contains search", async () => {
144
- const builder = new QueryBuilder(dbName, INDEX_NAME)
145
- builder.addNotContains("property", ["word2"])
146
- const resp = await builder.run()
147
- expect(resp.rows.length).toBe(2)
148
- })
149
-
150
- it("should be able to perform an or not contains search", async () => {
151
- const builder = new QueryBuilder(dbName, INDEX_NAME)
152
- builder.addNotContains("array", ["1"])
153
- builder.addNotContains("array", ["2"])
154
- builder.setAllOr()
155
- const resp = await builder.run()
156
- expect(resp.rows.length).toBe(2)
157
- })
158
-
159
- describe("skip", () => {
160
- const skipDbName = `db-${newid()}`
161
- let docs: {
162
- _id: string
163
- property: string
164
- array: string[]
165
- }[]
166
-
167
- beforeAll(async () => {
168
- const db = getDB(skipDbName)
169
-
170
- docs = Array(QueryBuilder.maxLimit * 2.5)
171
- .fill(0)
172
- .map((_, i) => ({
173
- _id: i.toString().padStart(3, "0"),
174
- property: `value_${i.toString().padStart(3, "0")}`,
175
- array: [],
176
- }))
177
- await db.bulkDocs(docs)
178
-
179
- await db.put({
180
- _id: "_design/database",
181
- indexes: {
182
- [INDEX_NAME]: {
183
- index: index,
184
- analyzer: "standard",
185
- },
186
- },
187
- })
188
- })
189
-
190
- it("should be able to apply skip", async () => {
191
- const builder = new QueryBuilder(skipDbName, INDEX_NAME)
192
- const firstResponse = await builder.run()
193
- builder.setSkip(40)
194
- const secondResponse = await builder.run()
195
-
196
- // Return the default limit
197
- expect(firstResponse.rows.length).toBe(50)
198
- expect(secondResponse.rows.length).toBe(50)
199
-
200
- // Should have the expected overlap
201
- expect(firstResponse.rows.slice(40)).toEqual(
202
- secondResponse.rows.slice(0, 10)
203
- )
204
- })
205
-
206
- it("should handle limits", async () => {
207
- const builder = new QueryBuilder(skipDbName, INDEX_NAME)
208
- builder.setLimit(10)
209
- builder.setSkip(50)
210
- builder.setSort("_id")
211
-
212
- const resp = await builder.run()
213
- expect(resp.rows.length).toBe(10)
214
- expect(resp.rows).toEqual(
215
- docs.slice(50, 60).map(expect.objectContaining)
216
- )
217
- })
218
-
219
- it("should be able to skip searching through multiple responses", async () => {
220
- const builder = new QueryBuilder(skipDbName, INDEX_NAME)
221
- // Skipping 2 max limits plus a little bit more
222
- const skip = QueryBuilder.maxLimit * 2 + 37
223
- builder.setSkip(skip)
224
- builder.setSort("_id")
225
- const resp = await builder.run()
226
-
227
- expect(resp.rows.length).toBe(50)
228
- expect(resp.rows).toEqual(
229
- docs.slice(skip, skip + resp.rows.length).map(expect.objectContaining)
230
- )
231
- })
232
-
233
- it("should not return results if skipping all docs", async () => {
234
- const builder = new QueryBuilder(skipDbName, INDEX_NAME)
235
- // Skipping 2 max limits plus a little bit more
236
- const skip = docs.length + 1
237
- builder.setSkip(skip)
238
-
239
- const resp = await builder.run()
240
-
241
- expect(resp.rows.length).toBe(0)
242
- })
243
-
244
- it("skip should respect with filters", async () => {
245
- const builder = new QueryBuilder(skipDbName, INDEX_NAME)
246
- builder.setLimit(10)
247
- builder.setSkip(50)
248
- builder.addString("property", "value_1")
249
- builder.setSort("property")
250
-
251
- const resp = await builder.run()
252
- expect(resp.rows.length).toBe(10)
253
- expect(resp.rows).toEqual(
254
- docs.slice(150, 160).map(expect.objectContaining)
255
- )
256
- })
257
- })
258
- })
259
-
260
- describe("paginated search", () => {
261
- it("should be able to perform a paginated search", async () => {
262
- const page = await paginatedSearch(
263
- dbName,
264
- INDEX_NAME,
265
- {
266
- string: {
267
- property: "wo",
268
- },
269
- },
270
- {
271
- limit: 1,
272
- sort: "property",
273
- sortType: "string",
274
- sortOrder: "desc",
275
- }
276
- )
277
- expect(page.rows.length).toBe(1)
278
- expect(page.hasNextPage).toBe(true)
279
- expect(page.bookmark).toBeDefined()
280
- })
281
- })
282
-
283
- describe("full search", () => {
284
- it("should be able to perform a full search", async () => {
285
- const page = await fullSearch(
286
- dbName,
287
- INDEX_NAME,
288
- {
289
- string: {
290
- property: "wo",
291
- },
292
- },
293
- {}
294
- )
295
- expect(page.rows.length).toBe(3)
296
- })
297
- })
298
- })
@@ -1,62 +0,0 @@
1
- require("../../../tests")
2
- const getUrlInfo = require("../couch").getUrlInfo
3
-
4
- describe("pouch", () => {
5
- describe("Couch DB URL parsing", () => {
6
- it("should handle a null Couch DB URL", () => {
7
- const info = getUrlInfo(null)
8
- expect(info.url).toBeUndefined()
9
- expect(info.auth.username).toBeUndefined()
10
- })
11
- it("should be able to parse a basic Couch DB URL", () => {
12
- const info = getUrlInfo("http://host.com")
13
- expect(info.url).toBe("http://host.com")
14
- expect(info.auth.username).toBeUndefined()
15
- })
16
- it("should be able to parse a Couch DB basic URL with HTTPS", () => {
17
- const info = getUrlInfo("https://host.com")
18
- expect(info.url).toBe("https://host.com")
19
- expect(info.auth.username).toBeUndefined()
20
- })
21
- it("should be able to parse a basic Couch DB URL with a custom port", () => {
22
- const info = getUrlInfo("https://host.com:1234")
23
- expect(info.url).toBe("https://host.com:1234")
24
- expect(info.auth.username).toBeUndefined()
25
- })
26
- it("should be able to parse a Couch DB URL with auth", () => {
27
- const info = getUrlInfo("https://user:pass@host.com:1234")
28
- expect(info.url).toBe("https://host.com:1234")
29
- expect(info.auth.username).toBe("user")
30
- expect(info.auth.password).toBe("pass")
31
- })
32
- it("should be able to parse a Couch DB URL with auth and special chars", () => {
33
- const info = getUrlInfo("https://user:s:p@s://@://:d@;][~s@host.com:1234")
34
- expect(info.url).toBe("https://host.com:1234")
35
- expect(info.auth.username).toBe("user")
36
- expect(info.auth.password).toBe("s:p@s://@://:d@;][~s")
37
- })
38
- it("should be able to parse a Couch DB URL without a protocol", () => {
39
- const info = getUrlInfo("host.com:1234")
40
- expect(info.url).toBe("http://host.com:1234")
41
- expect(info.auth.username).toBeUndefined()
42
- })
43
- it("should be able to parse a Couch DB URL with auth and without a protocol", () => {
44
- const info = getUrlInfo("user:s:p@s://@://:d@;][~s@host.com:1234")
45
- expect(info.url).toBe("http://host.com:1234")
46
- expect(info.auth.username).toBe("user")
47
- expect(info.auth.password).toBe("s:p@s://@://:d@;][~s")
48
- })
49
- it("should be able to parse a Couch DB URL with only username auth", () => {
50
- const info = getUrlInfo("https://user@host.com:1234")
51
- expect(info.url).toBe("https://host.com:1234")
52
- expect(info.auth.username).toBe("user")
53
- expect(info.auth.password).toBeUndefined()
54
- })
55
- it("should be able to parse a Couch DB URL with only username auth and without a protocol", () => {
56
- const info = getUrlInfo("user@host.com:1234")
57
- expect(info.url).toBe("http://host.com:1234")
58
- expect(info.auth.username).toBe("user")
59
- expect(info.auth.password).toBeUndefined()
60
- })
61
- })
62
- })
@@ -1,63 +0,0 @@
1
- import {
2
- getDevelopmentAppID,
3
- getProdAppID,
4
- isDevAppID,
5
- isProdAppID,
6
- } from "../../docIds/conversions"
7
- import { generateAppID } from "../utils"
8
-
9
- describe("utils", () => {
10
- describe("generateAppID", () => {
11
- function getID() {
12
- const appId = generateAppID()
13
- const split = appId.split("_")
14
- const uuid = split[split.length - 1]
15
- const devAppId = `app_dev_${uuid}`
16
- return { appId, devAppId, split, uuid }
17
- }
18
-
19
- it("should be able to generate a new app ID", () => {
20
- expect(generateAppID().startsWith("app_")).toEqual(true)
21
- })
22
-
23
- it("should be able to convert a production app ID to development", () => {
24
- const { appId, uuid } = getID()
25
- expect(getDevelopmentAppID(appId)).toEqual(`app_dev_${uuid}`)
26
- })
27
-
28
- it("should be able to convert a development app ID to development", () => {
29
- const { devAppId, uuid } = getID()
30
- expect(getDevelopmentAppID(devAppId)).toEqual(`app_dev_${uuid}`)
31
- })
32
-
33
- it("should be able to convert a development ID to a production", () => {
34
- const { devAppId, uuid } = getID()
35
- expect(getProdAppID(devAppId)).toEqual(`app_${uuid}`)
36
- })
37
-
38
- it("should be able to convert a production ID to production", () => {
39
- const { appId, uuid } = getID()
40
- expect(getProdAppID(appId)).toEqual(`app_${uuid}`)
41
- })
42
-
43
- it("should be able to confirm dev app ID is development", () => {
44
- const { devAppId } = getID()
45
- expect(isDevAppID(devAppId)).toEqual(true)
46
- })
47
-
48
- it("should be able to confirm prod app ID is not development", () => {
49
- const { appId } = getID()
50
- expect(isDevAppID(appId)).toEqual(false)
51
- })
52
-
53
- it("should be able to confirm prod app ID is prod", () => {
54
- const { appId } = getID()
55
- expect(isProdAppID(appId)).toEqual(true)
56
- })
57
-
58
- it("should be able to confirm dev app ID is not prod", () => {
59
- const { devAppId } = getID()
60
- expect(isProdAppID(devAppId)).toEqual(false)
61
- })
62
- })
63
- })