Skip to content

Wrapped Cloud Function creating data in wrong environment #65

Open
@beardo01

Description

@beardo01

Version info

firebase-functions-test: 0.2.1

firebase-functions: 3.6.2

firebase-admin: 8.12.1

Test case

Function

import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';

export const onUserCreation = functions.auth.user().onCreate(async (user) => {
    const newUserDoc = {
      email: "email"
    }

    await admin.firestore().collection('users').add(newUserDoc);
});

Test Case

import { testEnv, testFirestore } from '../../../admin';
import { onUserCreation } from '../onUserCreation';
import { WrappedFunction } from 'firebase-functions-test/lib/main';

describe('onUserCreation Tests', () => {
  let testTarget: WrappedFunction;

  beforeEach(() => {
    testTarget = testEnv.wrap(onUserCreation);
  });

  afterEach(() => {
    jest.clearAllMocks();
  });

  afterAll(() => {
    testEnv.cleanup();
  });


  it('should create a new user document in users collection', async () => {
    // Setup
    const userRecord = testEnv.auth.exampleUserRecord();
    userRecord.email = 'email';

    // Execute
    await testTarget(userRecord);

    // Verify
    const afterUserDoc = await testFirestore
      .collection('users')
      .where('email', '==', 'email')
      .get();

    expect(afterUserDoc.docs.length).toEqual(1);
  });
});

Steps to reproduce

import serviceAccount from '../service-account-prod.json';
import serviceAccountDev from '../service-account-dev.json';
import functions from 'firebase-functions-test';
import * as admin from 'firebase-admin';

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount as any),
  databaseURL: PRODUCTION_DATABASE_URL
});

const devApp = admin.initializeApp(
  {
    credential: admin.credential.cert(serviceAccountDev as any),
    databaseURL: DEV_DATABASE_URL
  },
  DEV_ENVIRONMENT_NAME
);

export const auth = admin.auth();
export const firestore = admin.firestore();
export const firestoreNS = admin.firestore;
export const testFirestore = devApp.firestore();

const projectConfig = {
  projectId: DEV_PROJECT_ID
  databaseURL: DEV_DATABASE_URL
};
export const testEnv = functions(projectConfig, '../service-account-dev.json');

Expected behavior

Since the onUserCreation Cloud Function is being wrapped by testEnv.wrap in the beforeEach part of the test, the onUserCreation should be creating the user document in the devApp.

Actual behavior

When testTarget is called the WrappedFunction is creating the user document in the production environment instead of the testing environment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions