From 4112a01b54bc1feb655ce037103311484c51ff69 Mon Sep 17 00:00:00 2001 From: EmptyInfinity Date: Tue, 27 Jul 2021 17:04:01 +0300 Subject: [PATCH 1/2] fix --- CHANGELOG.md | 5 +++- spec/ObjectStorageWrapper.spec.ts | 42 ++++++++++++++++++++----------- src/ObjectStorageWrapper.ts | 9 ++++--- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 043b405..0c0adea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ -# 3.4.1 (July 28, 2021) +# 3.4.2 (July 27, 2021) +* Update headers validation + +# 3.4.1 (July 27, 2021) * `ObjectStorage` method `getById` now supports content-types * `ObjectStorageWrapper` method `lookupObjectById` now supports content-types * Added additional validation for headers diff --git a/spec/ObjectStorageWrapper.spec.ts b/spec/ObjectStorageWrapper.spec.ts index 258179f..b910068 100644 --- a/spec/ObjectStorageWrapper.spec.ts +++ b/spec/ObjectStorageWrapper.spec.ts @@ -88,6 +88,24 @@ describe('ObjectStorageWrapper', () => { .reply(201, createObjectWithQueriableField); await objectStorageWrapper.createObject(data, genHeaders(1), [], ttl); }); + it('Should save the data correctly', async () => { + nock(maesterUri) + .post('/objects') + .reply(201, createObjectWithQueriableField); + await objectStorageWrapper.createObject(data); + }); + it('Should save the data correctly', async () => { + nock(maesterUri) + .post('/objects') + .reply(201, createObjectWithQueriableField); + await objectStorageWrapper.createObject(data, []); + }); + it('Should save the data correctly', async () => { + nock(maesterUri) + .post('/objects') + .reply(201, createObjectWithQueriableField); + await objectStorageWrapper.createObject(data, null); + }); it('Should save the data correctly', async () => { nock(maesterUri) .post('/objects') @@ -184,13 +202,6 @@ describe('ObjectStorageWrapper', () => { }); }); }); - it('At least one header must be present', async () => { - try { - await objectStorageWrapper.createObject(data, [], [], ttl); - } catch (error) { - expect(error.message).to.be.equal('At least one query header must be present'); - } - }); }); }); describe('Lookup object by ID', () => { @@ -303,6 +314,16 @@ describe('ObjectStorageWrapper', () => { const result = await objectStorageWrapper.updateObject(id, updatedData); expect(result).to.deep.equal(updatedData); }); + it('Should successfully update an object', async () => { + nock(maesterUri).put(`/objects/${id}`).reply(200, updatedData); + const result = await objectStorageWrapper.updateObject(id, updatedData, []); + expect(result).to.deep.equal(updatedData); + }); + it('Should successfully update an object', async () => { + nock(maesterUri).put(`/objects/${id}`).reply(200, updatedData); + const result = await objectStorageWrapper.updateObject(id, updatedData, null); + expect(result).to.deep.equal(updatedData); + }); it('Should successfully update an object with headers', async () => { nock(maesterUri) .put(`/objects/${id}`) @@ -348,13 +369,6 @@ describe('ObjectStorageWrapper', () => { expect(error.message).to.equal('header key "key0" was already added'); }); }); - it('At least one header must be present', async () => { - try { - await objectStorageWrapper.updateObject('id', data, []); - } catch (error) { - expect(error.message).to.be.equal('At least one query header must be present'); - } - }); }); }); describe('Delete object by ID', () => { diff --git a/src/ObjectStorageWrapper.ts b/src/ObjectStorageWrapper.ts index 02d0bb1..95b91b6 100644 --- a/src/ObjectStorageWrapper.ts +++ b/src/ObjectStorageWrapper.ts @@ -3,6 +3,7 @@ import { ObjectStorage, ResponseType, DEFAULT_RESPONSE_TYPE } from './ObjectStor export const MAESTER_MAX_SUPPORTED_COUNT_OF_QUERY_HEADERS = 5; export const TTL_HEADER = 'x-eio-ttl'; +const isHeaders = (headers?: Header[]): boolean => headers && headers.length > 0; export interface Scope { logger: object; @@ -36,8 +37,8 @@ export class ObjectStorageWrapper { async createObject(data: object, queryHeaders?: Header[], metaHeaders?: Header[], ttl?: number) { this.logger.debug('Going to create an object...'); - if (queryHeaders) ObjectStorageWrapper.validateQueryHeaders(queryHeaders); - if (metaHeaders) ObjectStorageWrapper.validateMetaHeaders(metaHeaders); + if (isHeaders(queryHeaders)) ObjectStorageWrapper.validateQueryHeaders(queryHeaders); + if (isHeaders(metaHeaders)) ObjectStorageWrapper.validateMetaHeaders(metaHeaders); const resultHeaders = ObjectStorageWrapper.formHeadersToAdd(queryHeaders, metaHeaders); if (ttl) resultHeaders[TTL_HEADER] = ttl.toString(); return this.objectStorage.postObject(data, resultHeaders); @@ -69,8 +70,8 @@ export class ObjectStorageWrapper { async updateObject(id: string, data: object, queryHeaders?: Header[], metaHeaders?: Header[]) { this.logger.debug(`Going to update and object with id ${id}...`); - if (queryHeaders) ObjectStorageWrapper.validateQueryHeaders(queryHeaders); - if (metaHeaders) ObjectStorageWrapper.validateMetaHeaders(metaHeaders); + if (isHeaders(queryHeaders)) ObjectStorageWrapper.validateQueryHeaders(queryHeaders); + if (isHeaders(metaHeaders)) ObjectStorageWrapper.validateMetaHeaders(metaHeaders); const resultHeaders = ObjectStorageWrapper.formHeadersToAdd(queryHeaders, metaHeaders); return this.objectStorage.updateOne(id, data, resultHeaders); } From a628392ce7e348724ed58f7eb53f1f88ac8108ac Mon Sep 17 00:00:00 2001 From: EmptyInfinity Date: Tue, 27 Jul 2021 17:04:30 +0300 Subject: [PATCH 2/2] fix --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a655367..96f8016 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@elastic.io/maester-client", - "version": "3.4.1", + "version": "3.4.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 54b97d5..5365a10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@elastic.io/maester-client", - "version": "3.4.1", + "version": "3.4.2", "description": "The official object-storage client", "main": "dist/src/index.js", "types": "dist/src/index.d.ts",