Skip to content
This repository was archived by the owner on Jun 4, 2019. It is now read-only.

Commit 3c72ec2

Browse files
authored
Check for supported serverless version (#15)
* Add `semver-compare` as dependecy * Check for supported serverless version on start * Add test for checking supported serverless version * Update serverless version check * Updated comment * Test for `aws-sdk` version instead of `serverless` version
1 parent 5da3ae9 commit 3c72ec2

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
"url": "https://github.com/Jimdo/serverless-dynamodb-ttl/issues"
2727
},
2828
"homepage": "https://github.com/Jimdo/serverless-dynamodb-ttl#readme",
29-
"dependencies": {},
29+
"dependencies": {
30+
"semver-compare": "^1.0.0"
31+
},
3032
"standard": {
3133
"envs": [
3234
"node",

src/plugin.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
const assert = require('assert')
44
const util = require('util')
5+
const cmp = require('semver-compare')
6+
7+
const MINIMUM_COMPATIBLE_AWSSDK_VERSION = '2.21.0'
58

69
class Plugin {
710
constructor (serverless, options) {
811
this.serverless = serverless
9-
this.options = options || {}
1012
this.provider = serverless.getProvider('aws')
13+
this.options = options || {}
1114

1215
this.hooks = {
1316
'after:deploy:deploy': this.afterDeploy.bind(this)
@@ -21,6 +24,11 @@ class Plugin {
2124
assert(this.serverless.service.provider.name, 'Invalid serverless configuration')
2225
assert(this.serverless.service.provider.name === 'aws', 'Only supported for AWS provider')
2326

27+
assert(
28+
cmp(this.provider.sdk.VERSION, MINIMUM_COMPATIBLE_AWSSDK_VERSION) > -1,
29+
util.format('Use `aws-sdk` version %s or newer', MINIMUM_COMPATIBLE_AWSSDK_VERSION)
30+
)
31+
2432
assert(this.options && !this.options.noDeploy, 'Used --noDeploy flag')
2533
assert(this.list().constructor === Array, 'Invalid configuration found')
2634
assert(this.list().length > 0, 'No configuration found')

test/plugin.spec.js

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ const Plugin = require('../')
66
describe('Plugin', () => {
77
let getProvider = null
88
let provider = {
9-
request: () => true
9+
request: () => true,
10+
sdk: {
11+
VERSION: '2.21.0'
12+
}
1013
}
1114
let providerMock = null
1215

@@ -114,6 +117,43 @@ describe('Plugin', () => {
114117
)
115118
})
116119

120+
it('Skips for unsupported aws-sdk versions', () => {
121+
let log = jest.fn()
122+
123+
let unsupportedProvider = {
124+
request: () => true,
125+
sdk: {
126+
VERSION: '2.20.0'
127+
}
128+
}
129+
130+
let unsupportedProviderMock = sinon.mock(unsupportedProvider)
131+
let unsupportedGetProvider = sinon.stub().returns(unsupportedProvider)
132+
133+
unsupportedProviderMock.expects('request').never()
134+
const config = {
135+
cli: { log },
136+
region: 'us-east-1',
137+
version: '1.13.1',
138+
service: {
139+
provider: {
140+
name: 'aws'
141+
},
142+
custom: {
143+
dynamodb: { ttl: [ { table: 'my-table-1', field: 'my-field-1' } ] }
144+
}
145+
},
146+
getProvider: unsupportedGetProvider
147+
}
148+
149+
return new Plugin(config, { region: 'eu-west-1' }).afterDeploy().then(
150+
() => {
151+
expect(log).toBeCalledWith('Skipping TTL setting(s) for DynamoDB: Use `aws-sdk` version 2.21.0 or newer!')
152+
unsupportedProviderMock.restore()
153+
}
154+
)
155+
})
156+
117157
it('Skips when no custom.dynamodb.ttl is found', () => {
118158
let log = jest.fn()
119159

0 commit comments

Comments
 (0)