Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle undefined environment variables in resolveJoins #1047

Merged
merged 4 commits into from
Aug 26, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/utils/resolveJoins.js
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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