From 3ef18116857121b2c440956d329e00e9dff2506e Mon Sep 17 00:00:00 2001 From: Roman Pushkin Date: Thu, 16 Jun 2016 23:26:51 -0700 Subject: [PATCH] #50 Add user state response (#80) --- src/responses/user-state-response.js | 30 +++++++++++++++++++++ src/validations/supported-response-types.js | 2 +- test/responses/user-state-response-test.js | 15 +++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/responses/user-state-response.js create mode 100644 test/responses/user-state-response-test.js diff --git a/src/responses/user-state-response.js b/src/responses/user-state-response.js new file mode 100644 index 00000000..1aeba2d3 --- /dev/null +++ b/src/responses/user-state-response.js @@ -0,0 +1,30 @@ +import Response from './response'; +import objectAssign from 'object-assign'; + +/** + * User state response. Used to update user's state with new values. + * While updating unspecified keys remain untouched. Specified keys are + * updated. + * + * @author Roman Pushkin (roman.pushkin@gmail.com) + * @extends {Response} + * @date 2016-06-16 + * @version 1.1 + * @since 0.1.0 + */ +export default class UserStateResponse extends Response { + /** + * Constructor. + * + * @type {Object} + * @example + * r = new UserStateResponse({phone: '555-111-22-33'}); + * console.log(r.type); // prints "user-state" + * console.log(r.phone); // prints "555-111-22-33" + */ + constructor(options) { + const opts = objectAssign({ type: 'user-state' }, options); + super(opts); + objectAssign(this, opts); + } +} diff --git a/src/validations/supported-response-types.js b/src/validations/supported-response-types.js index c295b5b0..2bb613cd 100644 --- a/src/validations/supported-response-types.js +++ b/src/validations/supported-response-types.js @@ -14,4 +14,4 @@ * console.log('response with type "something" is not supported'); * } */ -export default new Set(['text', 'redirect', 'options', 'error']); +export default new Set(['text', 'redirect', 'options', 'error', 'user-state']); diff --git a/test/responses/user-state-response-test.js b/test/responses/user-state-response-test.js new file mode 100644 index 00000000..93b5990b --- /dev/null +++ b/test/responses/user-state-response-test.js @@ -0,0 +1,15 @@ +/* eslint-disable no-new */ +import test from 'ava'; +import UserStateResponse from '../../src/responses/user-state-response'; + +test('can be constructed with default parameters', t => { + new UserStateResponse({ foo: 1 }); + t.pass(); +}); + +test('should save properties and have \'user-state\' type', t => { + const r = new UserStateResponse({ foo: 1, bar: 2 }); + t.is(r.foo, 1); + t.is(r.bar, 2); + t.is(r.type, 'user-state'); +});