From ae28afef90df357980ec516e250c5c82899fb896 Mon Sep 17 00:00:00 2001 From: Derek Burgman Date: Sun, 13 Nov 2022 21:07:07 -0600 Subject: [PATCH] fix: fixed modelFirebaseFunctionMapFactory() short specifier - added tests for modelFirebaseFunctionMapFactory() --- .../function/model.function.factory.spec.ts | 94 +++++++++++++++++++ .../client/function/model.function.factory.ts | 2 +- 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 packages/firebase/src/lib/client/function/model.function.factory.spec.ts diff --git a/packages/firebase/src/lib/client/function/model.function.factory.spec.ts b/packages/firebase/src/lib/client/function/model.function.factory.spec.ts new file mode 100644 index 000000000..2a3f82cb3 --- /dev/null +++ b/packages/firebase/src/lib/client/function/model.function.factory.spec.ts @@ -0,0 +1,94 @@ +import { Functions } from 'firebase/functions'; +import { firestoreModelIdentity } from '../../common/firestore/collection/collection'; +import { FirebaseFunctionTypeConfigMap } from './function.factory'; +import { ModelFirebaseCreateFunction, ModelFirebaseCrudFunction, ModelFirebaseCrudFunctionConfigMap, ModelFirebaseFunctionMap, modelFirebaseFunctionMapFactory, ModelFirebaseReadFunction } from './model.function.factory'; + +/** + * This is our FirebaseFunctionTypeMap for Example. It defines all the functions that are available. + */ +export type ExampleFunctionTypeMap = {}; + +export const exampleFunctionTypeConfigMap: FirebaseFunctionTypeConfigMap = {}; + +export const exampleIdentity = firestoreModelIdentity('example', 'e'); + +export type ExampleTypes = typeof exampleIdentity; + +export type ExampleModelCrudFunctionsConfig = { + example: { + read: { + user: [object, boolean]; + }; + create: { + _: object; + user: object; + }; + update: { + _: object; + sendUserInvite: object; + admin: object; + }; + delete: object; + }; +}; + +export const exampleModelCrudFunctionsConfig: ModelFirebaseCrudFunctionConfigMap = { + example: ['read:user', 'create:_,user', 'update:_,sendUserInvite,admin' as any, 'delete'] +}; + +export abstract class ExampleFunctions implements ModelFirebaseFunctionMap { + abstract example: { + createExample: { + create: ModelFirebaseCreateFunction; + createExample: ModelFirebaseCreateFunction; + user: ModelFirebaseCreateFunction; + createExampleUser: ModelFirebaseCreateFunction; + }; + readExample: { + user: ModelFirebaseReadFunction; + readExampleUser: ModelFirebaseReadFunction; + }; + updateExample: { + update: ModelFirebaseCrudFunction; + updateExample: ModelFirebaseCrudFunction; + admin: ModelFirebaseCrudFunction; + updateExampleAdmin: ModelFirebaseCrudFunction; + sendUserInvite: ModelFirebaseCrudFunction; + updateExampleSendUserInvite: ModelFirebaseCrudFunction; + }; + deleteExample: ModelFirebaseCrudFunction; + }; +} + +/** + * Used to generate our ExampleFunctionMap for a Functions instance. + */ +export const exampleFunctionMap = modelFirebaseFunctionMapFactory(exampleFunctionTypeConfigMap, exampleModelCrudFunctionsConfig); + +describe('modelFirebaseFunctionMapFactory()', () => { + it('should create the expected functions.', () => { + const functionsInstance: Functions = undefined as unknown as Functions; + + const result = exampleFunctionMap(functionsInstance) as ExampleFunctions; + + expect(result.example.createExample).toBeDefined(); + expect(result.example.createExample.create).toBeDefined(); + expect(result.example.createExample.createExample).toBeDefined(); + expect(result.example.createExample.user).toBeDefined(); + expect(result.example.createExample.createExampleUser).toBeDefined(); + + expect(result.example.readExample).toBeDefined(); + expect(result.example.readExample.user).toBeDefined(); + expect(result.example.readExample.readExampleUser).toBeDefined(); + + expect(result.example.updateExample).toBeDefined(); + expect(result.example.updateExample.update).toBeDefined(); + expect(result.example.updateExample.updateExample).toBeDefined(); + expect(result.example.updateExample.admin).toBeDefined(); + expect(result.example.updateExample.updateExampleAdmin).toBeDefined(); + expect(result.example.updateExample.sendUserInvite).toBeDefined(); + expect(result.example.updateExample.updateExampleSendUserInvite).toBeDefined(); + + expect(result.example.deleteExample).toBeDefined(); + }); +}); diff --git a/packages/firebase/src/lib/client/function/model.function.factory.ts b/packages/firebase/src/lib/client/function/model.function.factory.ts index 3d37b8937..31f61bc2a 100644 --- a/packages/firebase/src/lib/client/function/model.function.factory.ts +++ b/packages/firebase/src/lib/client/function/model.function.factory.ts @@ -135,7 +135,7 @@ export function modelFirebaseFunctionMapFactory