firebase / firebase-functions-test

MIT License
232 stars 48 forks source link

Wrapped Gen 2 Firestore Trigger receives incorrect data #238

Open MichaelJBerk opened 3 weeks ago

MichaelJBerk commented 3 weeks ago

Version info

firebase-functions-test: 5.0.1

firebase-functions: 3.3.0

firebase-admin: 12.2.0

Test case

When calling a wrapped function set to a Gen 2 Firestore trigger, the function will receive the value for the exampleDocumentSnapshot, rather than the actual value provided by the test:

/// Test Code
test("Write Item V2", async () => {
    const db = getFirestore()
    const path = `items/${generateTempId()}`
    const data = {name: "MyTest"}

    await db.doc(path).set(data)
    testEnv.firestore.exampleDocumentSnapshotChange()
    const wrapped = testEnv.wrap(myOnWriteTrigger)
    const beforeSnap = testEnv.firestore.makeDocumentSnapshot({name:'blah'}, path)
    const afterSnap = testEnv.firestore.makeDocumentSnapshot(data, path)
    const change = testEnv.makeChange(beforeSnap, afterSnap)

    await wrapped(change)
})

/// Cloud Function
export const myOnWriteTrigger = onDocumentWritten("items/{itemid}", async (event) => {
    ///This will output "{ aString: 'foo', anObject: { a: 'qux', b: 'faz' }, aNumber: 7 }"
    console.log(event.data.after.data())
    ///...
}

Steps to reproduce

I've created a sample project with the issue at [https://github.com/MichaelJBerk/FirestoreFunctionsTriggerBug](). View the readme for details

Expected behavior

event.data.after.data() should contain the data provided in the test

Actual behavior

event.data.after.data() contains the exampleDocumentSnapshot value ({ aString: 'foo', anObject: { a: 'qux', b: 'faz' }, aNumber: 7 })

anonimitoraf commented 3 weeks ago

Lol I thought I was just doing something wrong.