Skip to content

Commit

Permalink
test: add test for duplicate function precedence
Browse files Browse the repository at this point in the history
  • Loading branch information
khendrikse committed Apr 12, 2023
1 parent c614a22 commit 3684235
Showing 1 changed file with 80 additions and 1 deletion.
81 changes: 80 additions & 1 deletion tests/unit/lib/functions/registry.test.mjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,53 @@
import { expect, test, vi } from 'vitest'
import { mkdir, mkdtemp, writeFile } from 'fs/promises'
import { tmpdir } from 'os'
import { join } from 'path'

import { describe, expect, test, vi } from 'vitest'

import { FunctionsRegistry } from '../../../../src/lib/functions/registry.mjs'
import { watchDebounced } from '../../../../src/utils/command-helpers.mjs'

const duplicateFunctions = [
{
filename: 'hello.js',
content: `exports.handler = async (event) => ({ statusCode: 200, body: JSON.stringify({ message: 'Hello World from .js' }) })`,
},
{
filename: 'hello.ts',
content: `exports.handler = async (event) => ({ statusCode: 200, body: JSON.stringify({ message: 'Hello World from .ts' }) })`,
},
{
filename: 'hello/main.go',
subDir: 'hello',
content: `package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, world from a go function!")
}
`,
},
{
filename: 'hello2.ts',
content: `exports.handler = async (event) => ({ statusCode: 200, body: JSON.stringify({ message: 'Hello World from .ts' }) })`,
},
{
filename: 'hello2/main.go',
subDir: 'hello2',
content: `package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, world from a go function!")
}
`,
},
]

vi.mock('../../../../src/utils/command-helpers.mjs', async () => {
const helpers = await vi.importActual('../../../../src/utils/command-helpers.mjs')

Expand Down Expand Up @@ -35,6 +80,40 @@ test('registry should only pass functions config to zip-it-and-ship-it', async (
await prepareDirectoryScanStub.mockRestore()
})

describe('the registry handles duplicate functions based on extension precedence', () => {
test('where .js takes precedence over .go, and .go over .ts', async () => {
const projectRoot = await mkdtemp(join(tmpdir(), 'functions-extension-precedence'))
const functionsDirectory = join(projectRoot, 'functions')
await mkdir(functionsDirectory)

duplicateFunctions.forEach(async (func) => {
if (func.subDir) {
const subDir = join(functionsDirectory, func.subDir)
await mkdir(subDir)
}
const file = join(functionsDirectory, func.filename)
await writeFile(file, func.content)
})
const functionsRegistry = new FunctionsRegistry({
projectRoot,
config: {},
timeouts: { syncFunctions: 1, backgroundFunctions: 1 },
settings: { port: 8888 },
})
const prepareDirectoryScanStub = vi.spyOn(FunctionsRegistry, 'prepareDirectoryScan').mockImplementation(() => {})
const setupDirectoryWatcherStub = vi.spyOn(functionsRegistry, 'setupDirectoryWatcher').mockImplementation(() => {})

await functionsRegistry.scan([functionsDirectory])
const { functions } = functionsRegistry

expect(functions.get('hello').runtime.name).toBe('js')
expect(functions.get('hello2').runtime.name).toBe('go')

await setupDirectoryWatcherStub.mockRestore()
await prepareDirectoryScanStub.mockRestore()
})
})

test('should add included_files to watcher', async () => {
const registry = new FunctionsRegistry({})
const func = {
Expand Down

0 comments on commit 3684235

Please sign in to comment.