Flesh out MongoDB query tests a bit more.
This commit is contained in:
parent
7a012f1f4b
commit
4d1b13f754
|
@ -5,6 +5,8 @@ import { MongoClient, type Collection } from "mongodb"
|
||||||
|
|
||||||
jest.unmock("mongodb")
|
jest.unmock("mongodb")
|
||||||
|
|
||||||
|
const collection = "test_collection"
|
||||||
|
|
||||||
describe("/queries", () => {
|
describe("/queries", () => {
|
||||||
let config = setup.getConfig()
|
let config = setup.getConfig()
|
||||||
let datasource: Datasource
|
let datasource: Datasource
|
||||||
|
@ -20,7 +22,15 @@ describe("/queries", () => {
|
||||||
transformer: "return data",
|
transformer: "return data",
|
||||||
readable: true,
|
readable: true,
|
||||||
}
|
}
|
||||||
return await config.api.query.create({ ...defaultQuery, ...query })
|
const combinedQuery = { ...defaultQuery, ...query }
|
||||||
|
if (
|
||||||
|
combinedQuery.fields &&
|
||||||
|
combinedQuery.fields.extra &&
|
||||||
|
!combinedQuery.fields.extra.collection
|
||||||
|
) {
|
||||||
|
combinedQuery.fields.extra.collection = collection
|
||||||
|
}
|
||||||
|
return await config.api.query.create(combinedQuery)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function withClient(
|
async function withClient(
|
||||||
|
@ -37,7 +47,6 @@ describe("/queries", () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function withCollection(
|
async function withCollection(
|
||||||
collection: string,
|
|
||||||
callback: (collection: Collection) => Promise<void>
|
callback: (collection: Collection) => Promise<void>
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
await withClient(async client => {
|
await withClient(async client => {
|
||||||
|
@ -61,7 +70,7 @@ describe("/queries", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await withCollection("test_table", async collection => {
|
await withCollection(async collection => {
|
||||||
await collection.insertMany([
|
await collection.insertMany([
|
||||||
{ name: "one" },
|
{ name: "one" },
|
||||||
{ name: "two" },
|
{ name: "two" },
|
||||||
|
@ -73,18 +82,17 @@ describe("/queries", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await withCollection("test_table", async collection => {
|
await withCollection(async collection => {
|
||||||
await collection.drop()
|
await collection.drop()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should execute a query", async () => {
|
it("should execute a count query", async () => {
|
||||||
const query = await createQuery({
|
const query = await createQuery({
|
||||||
fields: {
|
fields: {
|
||||||
json: "{}",
|
json: {},
|
||||||
extra: {
|
extra: {
|
||||||
actionType: "count",
|
actionType: "count",
|
||||||
collection: "test_table",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -94,13 +102,12 @@ describe("/queries", () => {
|
||||||
expect(result.data).toEqual([{ value: 5 }])
|
expect(result.data).toEqual([{ value: 5 }])
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should execute a query with a transformer", async () => {
|
it("should execute a count query with a transformer", async () => {
|
||||||
const query = await createQuery({
|
const query = await createQuery({
|
||||||
fields: {
|
fields: {
|
||||||
json: "{}",
|
json: {},
|
||||||
extra: {
|
extra: {
|
||||||
actionType: "count",
|
actionType: "count",
|
||||||
collection: "test_table",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
transformer: "return data + 1",
|
transformer: "return data + 1",
|
||||||
|
@ -111,13 +118,48 @@ describe("/queries", () => {
|
||||||
expect(result.data).toEqual([{ value: 6 }])
|
expect(result.data).toEqual([{ value: 6 }])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should execute a find query", async () => {
|
||||||
|
const query = await createQuery({
|
||||||
|
fields: {
|
||||||
|
json: {},
|
||||||
|
extra: {
|
||||||
|
actionType: "find",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = await config.api.query.execute(query._id!)
|
||||||
|
|
||||||
|
expect(result.data).toEqual([
|
||||||
|
{ _id: expect.anything(), name: "one" },
|
||||||
|
{ _id: expect.anything(), name: "two" },
|
||||||
|
{ _id: expect.anything(), name: "three" },
|
||||||
|
{ _id: expect.anything(), name: "four" },
|
||||||
|
{ _id: expect.anything(), name: "five" },
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should execute a findOne query", async () => {
|
||||||
|
const query = await createQuery({
|
||||||
|
fields: {
|
||||||
|
json: {},
|
||||||
|
extra: {
|
||||||
|
actionType: "findOne",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = await config.api.query.execute(query._id!)
|
||||||
|
|
||||||
|
expect(result.data).toEqual([{ _id: expect.anything(), name: "one" }])
|
||||||
|
})
|
||||||
|
|
||||||
it("should execute a create query with parameters", async () => {
|
it("should execute a create query with parameters", async () => {
|
||||||
const query = await createQuery({
|
const query = await createQuery({
|
||||||
fields: {
|
fields: {
|
||||||
json: '{"foo": "{{ foo }}"}',
|
json: { foo: "{{ foo }}" },
|
||||||
extra: {
|
extra: {
|
||||||
actionType: "insertOne",
|
actionType: "insertOne",
|
||||||
collection: "test_table",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
queryVerb: "create",
|
queryVerb: "create",
|
||||||
|
@ -140,7 +182,7 @@ describe("/queries", () => {
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
await withCollection("test_table", async collection => {
|
await withCollection(async collection => {
|
||||||
const doc = await collection.findOne({ foo: { $eq: "bar" } })
|
const doc = await collection.findOne({ foo: { $eq: "bar" } })
|
||||||
expect(doc).toEqual({
|
expect(doc).toEqual({
|
||||||
_id: expect.anything(),
|
_id: expect.anything(),
|
||||||
|
@ -148,4 +190,152 @@ describe("/queries", () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should execute a delete query with parameters", async () => {
|
||||||
|
const query = await createQuery({
|
||||||
|
fields: {
|
||||||
|
json: { name: { $eq: "{{ name }}" } },
|
||||||
|
extra: {
|
||||||
|
actionType: "deleteOne",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
queryVerb: "delete",
|
||||||
|
parameters: [
|
||||||
|
{
|
||||||
|
name: "name",
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = await config.api.query.execute(query._id!, {
|
||||||
|
parameters: { name: "one" },
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(result.data).toEqual([
|
||||||
|
{
|
||||||
|
acknowledged: true,
|
||||||
|
deletedCount: 1,
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
await withCollection(async collection => {
|
||||||
|
const doc = await collection.findOne({ name: { $eq: "one" } })
|
||||||
|
expect(doc).toBeNull()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should execute an update query with parameters", async () => {
|
||||||
|
const query = await createQuery({
|
||||||
|
fields: {
|
||||||
|
json: {
|
||||||
|
filter: { name: { $eq: "{{ name }}" } },
|
||||||
|
update: { $set: { name: "{{ newName }}" } },
|
||||||
|
},
|
||||||
|
extra: {
|
||||||
|
actionType: "updateOne",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
queryVerb: "update",
|
||||||
|
parameters: [
|
||||||
|
{
|
||||||
|
name: "name",
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "newName",
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = await config.api.query.execute(query._id!, {
|
||||||
|
parameters: { name: "one", newName: "newOne" },
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(result.data).toEqual([
|
||||||
|
{
|
||||||
|
acknowledged: true,
|
||||||
|
matchedCount: 1,
|
||||||
|
modifiedCount: 1,
|
||||||
|
upsertedCount: 0,
|
||||||
|
upsertedId: null,
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
await withCollection(async collection => {
|
||||||
|
const doc = await collection.findOne({ name: { $eq: "newOne" } })
|
||||||
|
expect(doc).toEqual({
|
||||||
|
_id: expect.anything(),
|
||||||
|
name: "newOne",
|
||||||
|
})
|
||||||
|
|
||||||
|
const oldDoc = await collection.findOne({ name: { $eq: "one" } })
|
||||||
|
expect(oldDoc).toBeNull()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should be able to delete all records", async () => {
|
||||||
|
const query = await createQuery({
|
||||||
|
fields: {
|
||||||
|
json: {},
|
||||||
|
extra: {
|
||||||
|
actionType: "deleteMany",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
queryVerb: "delete",
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = await config.api.query.execute(query._id!)
|
||||||
|
|
||||||
|
expect(result.data).toEqual([
|
||||||
|
{
|
||||||
|
acknowledged: true,
|
||||||
|
deletedCount: 5,
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
await withCollection(async collection => {
|
||||||
|
const docs = await collection.find().toArray()
|
||||||
|
expect(docs).toHaveLength(0)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should be able to update all documents", async () => {
|
||||||
|
const query = await createQuery({
|
||||||
|
fields: {
|
||||||
|
json: {
|
||||||
|
filter: {},
|
||||||
|
update: { $set: { name: "newName" } },
|
||||||
|
},
|
||||||
|
extra: {
|
||||||
|
actionType: "updateMany",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
queryVerb: "update",
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = await config.api.query.execute(query._id!)
|
||||||
|
|
||||||
|
expect(result.data).toEqual([
|
||||||
|
{
|
||||||
|
acknowledged: true,
|
||||||
|
matchedCount: 5,
|
||||||
|
modifiedCount: 5,
|
||||||
|
upsertedCount: 0,
|
||||||
|
upsertedId: null,
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
await withCollection(async collection => {
|
||||||
|
const docs = await collection.find().toArray()
|
||||||
|
expect(docs).toHaveLength(5)
|
||||||
|
for (const doc of docs) {
|
||||||
|
expect(doc).toEqual({
|
||||||
|
_id: expect.anything(),
|
||||||
|
name: "newName",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue