Skip to content

Commit

Permalink
Merge pull request #1047 from AlexHayton/patch-1
Browse files Browse the repository at this point in the history
Handle undefined environment variables in resolveJoins
  • Loading branch information
dherault committed Aug 26, 2020
2 parents 9a2dac1 + a273e0e commit 56ad82b
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/utils/resolveJoins.js
Expand Up @@ -8,6 +8,10 @@ export default function resolveJoins(environment) {

Object.keys(environment).forEach((key) => {
const value = environment[key]
if (!value) {
return
}

const joinArray = value['Fn::Join']
const isJoin = Boolean(joinArray)

Expand Down
63 changes: 63 additions & 0 deletions tests/endToEnd/environmentVariables/environmentVariables.test.js
@@ -0,0 +1,63 @@
import { resolve } from 'path'
import fetch from 'node-fetch'
import {
joinUrl,
setup,
teardown,
} from '../../integration/_testHelpers/index.js'

jest.setTimeout(30000)

describe('environment variables', () => {
const ENV_VAR_QUOTED = 'I am ENV_VAR_1'
const ENV_VAR_UNQUOTED = 'I am ENV_VAR_2'
const ENV_VAR_MAPPED = 'I am ENV_VAR_3'

// init
let json
beforeAll(async () => {
process.env.ENV_VAR_QUOTED = ENV_VAR_QUOTED
process.env.ENV_VAR_UNQUOTED = ENV_VAR_UNQUOTED
process.env.ENV_VAR_MAPPED_FROM_ANOTHER = ENV_VAR_MAPPED
await setup({
servicePath: resolve(__dirname),
})
const url = joinUrl(TEST_BASE_URL, '/dev/hello')
const response = await fetch(url)
json = await response.json()
})

// cleanup
afterAll(async () => {
process.env.ENV_VAR_QUOTED = undefined
process.env.ENV_VAR_UNQUOTED = undefined
process.env.ENV_VAR_MAPPED_FROM_ANOTHER = undefined
await teardown()
})

test('it should handle a quoted environment variable', async () => {
expect(json).toMatchObject({
ENV_VAR_QUOTED,
})
})

test('it should handle an unquoted environment variable', async () => {
expect(json).toMatchObject({
ENV_VAR_UNQUOTED,
})
})

test('it should handle a mapped environment variable', async () => {
expect(json).toMatchObject({
ENV_VAR_MAPPED,
})
})

test('it should handle an undefined quoted environment variable', async () => {
expect(json).toHaveProperty('ENV_VAR_EMPTY_STRING', undefined)
})

test('it should handle an undefined unquoted environment variable', async () => {
expect(json).toHaveProperty('ENV_VAR_UNDEFINED', undefined)
})
})
24 changes: 24 additions & 0 deletions tests/endToEnd/environmentVariables/handler.js
@@ -0,0 +1,24 @@
'use strict'

exports.hello = async () => {
const {
ENV_VAR_QUOTED,
ENV_VAR_UNQUOTED,
ENV_VAR_MAPPED,
ENV_VAR_EMPTY_STRING,
ENV_VAR_UNDEFINED,
} = process.env

const body = JSON.stringify({
ENV_VAR_QUOTED,
ENV_VAR_UNQUOTED,
ENV_VAR_MAPPED,
ENV_VAR_EMPTY_STRING, // This should be undefined
ENV_VAR_UNDEFINED, // This should be undefined
})

return {
statusCode: 200,
body,
}
}
26 changes: 26 additions & 0 deletions tests/endToEnd/environmentVariables/serverless.yml
@@ -0,0 +1,26 @@
service: uncategorized-tests

plugins:
- ../../../

provider:
memorySize: 128
name: aws
region: us-east-1 # default
runtime: nodejs12.x
stage: dev
versionFunctions: false
environment:
ENV_VAR_QUOTED: "${env:ENV_VAR_QUOTED}"
ENV_VAR_UNQUOTED: ${env:ENV_VAR_UNQUOTED}
ENV_VAR_MAPPED: "${env:ENV_VAR_MAPPED_FROM_ANOTHER}"
ENV_VAR_EMPTY_STRING: "${env:ENV_VAR_EMPTY_STRING}"
ENV_VAR_UNDEFINED: ${env:ENV_VAR_UNDEFINED}

functions:
hello:
handler: handler.hello
events:
- http:
method: get
path: /hello

0 comments on commit 56ad82b

Please sign in to comment.