use bulk cache in processOutputBBReferences
This commit is contained in:
parent
58d9d3e8e8
commit
ed830835a4
|
@ -42,26 +42,14 @@ export async function processOutputBBReferences(
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = []
|
const ids = value.split(",").filter(id => !!id)
|
||||||
|
|
||||||
const validIds = value.split(",").filter(id => !!id)
|
|
||||||
|
|
||||||
switch (subtype) {
|
switch (subtype) {
|
||||||
case FieldSubtype.USER:
|
case FieldSubtype.USER:
|
||||||
for (const id of validIds) {
|
const { users } = await cache.user.getUsers(ids)
|
||||||
try {
|
return users
|
||||||
const user = await cache.user.getUser(id)
|
|
||||||
if (user) {
|
|
||||||
result.push(user)
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// If user cannot be found, we just strip it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
default:
|
default:
|
||||||
throw utils.unreachable(subtype)
|
throw utils.unreachable(subtype)
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,39 +142,45 @@ describe("bbReferenceProcessor", () => {
|
||||||
describe("processOutputBBReferences", () => {
|
describe("processOutputBBReferences", () => {
|
||||||
describe("subtype user", () => {
|
describe("subtype user", () => {
|
||||||
it("fetches user given a valid string id", async () => {
|
it("fetches user given a valid string id", async () => {
|
||||||
const userId = generator.guid()
|
const user = _.sample(users)!
|
||||||
|
const userId = user._id!
|
||||||
|
|
||||||
const userFromCache = structures.users.user()
|
const result = await config.doInTenant(() =>
|
||||||
mockedCacheGetUser.mockResolvedValueOnce(userFromCache)
|
processOutputBBReferences(userId, FieldSubtype.USER)
|
||||||
|
|
||||||
const result = await processOutputBBReferences(
|
|
||||||
userId,
|
|
||||||
FieldSubtype.USER
|
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(result).toEqual([userFromCache])
|
expect(result).toEqual([
|
||||||
expect(mockedCacheGetUser).toBeCalledTimes(1)
|
{
|
||||||
expect(mockedCacheGetUser).toBeCalledWith(userId)
|
...user,
|
||||||
|
budibaseAccess: true,
|
||||||
|
_rev: expect.any(String),
|
||||||
|
},
|
||||||
|
])
|
||||||
|
expect(cacheGetUsersSpy).toBeCalledTimes(1)
|
||||||
|
expect(cacheGetUsersSpy).toBeCalledWith([userId])
|
||||||
})
|
})
|
||||||
|
|
||||||
it("fetches user given a valid string id csv", async () => {
|
it("fetches user given a valid string id csv", async () => {
|
||||||
const userId1 = generator.guid()
|
const [user1, user2] = _.sampleSize(users, 2)
|
||||||
const userId2 = generator.guid()
|
const userId1 = user1._id!
|
||||||
|
const userId2 = user2._id!
|
||||||
|
|
||||||
const userFromCache1 = structures.users.user({ _id: userId1 })
|
const result = await config.doInTenant(() =>
|
||||||
const userFromCache2 = structures.users.user({ _id: userId2 })
|
processOutputBBReferences(
|
||||||
mockedCacheGetUser.mockResolvedValueOnce(userFromCache1)
|
[userId1, userId2].join(","),
|
||||||
mockedCacheGetUser.mockResolvedValueOnce(userFromCache2)
|
FieldSubtype.USER
|
||||||
|
)
|
||||||
const result = await processOutputBBReferences(
|
|
||||||
[userId1, userId2].join(","),
|
|
||||||
FieldSubtype.USER
|
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(result).toEqual([userFromCache1, userFromCache2])
|
expect(result).toEqual(
|
||||||
expect(mockedCacheGetUser).toBeCalledTimes(2)
|
[user1, user2].map(u => ({
|
||||||
expect(mockedCacheGetUser).toBeCalledWith(userId1)
|
...u,
|
||||||
expect(mockedCacheGetUser).toBeCalledWith(userId2)
|
budibaseAccess: true,
|
||||||
|
_rev: expect.any(String),
|
||||||
|
}))
|
||||||
|
)
|
||||||
|
expect(cacheGetUsersSpy).toBeCalledTimes(1)
|
||||||
|
expect(cacheGetUsersSpy).toBeCalledWith([userId1, userId2])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue