Skip to content

Commit

Permalink
fix: returns response correctly (#68)
Browse files Browse the repository at this point in the history
  • Loading branch information
d2lam authored and Pranav Ravichandran committed Nov 21, 2018
1 parent 4ae1c38 commit 682f7e4
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 66 deletions.
20 changes: 10 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,30 +51,30 @@
"eslint-config-screwdriver": "^3.0.0",
"jenkins-mocha": "^4.0.0",
"js-yaml": "^3.6.1",
"jsonwebtoken": "^8.2.1",
"jsonwebtoken": "^8.4.0",
"mockery": "^2.0.0",
"sinon": "^4.5.0"
},
"dependencies": {
"aws-sdk": "^2.323.0",
"boom": "^7.2.0",
"catbox": "^10.0.2",
"aws-sdk": "^2.361.0",
"boom": "^7.2.2",
"catbox": "^10.0.5",
"catbox-disk": "^3.0.0",
"catbox-memory": "^3.1.2",
"catbox-memory": "^3.1.4",
"catbox-s3": "^4.0.0",
"config": "^1.30.0",
"good": "^8.1.1",
"good-console": "^7.1.0",
"good-squeeze": "^5.0.2",
"hapi": "^17.2.3",
"hapi": "^17.7.0",
"hapi-auth-jwt2": "^8.1.0",
"hapi-swagger": "^9.1.1",
"hapi-swagger": "^9.1.3",
"hoek": "^5.0.3",
"inert": "^5.1.0",
"inert": "^5.1.2",
"joi": "13.1.2",
"request": "^2.88.0",
"screwdriver-data-schema": "^18.11.5",
"vision": "^5.3.0",
"screwdriver-data-schema": "^18.34.2",
"vision": "^5.4.3",
"winston": "^2.2.0"
}
}
39 changes: 21 additions & 18 deletions plugins/caches.js
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ exports.plugin = {
}, {
method: 'DELETE',
path: '/caches/{scope}/{id}',
handler: async (request, h) => {
handler: (request, h) => {
if (strategyConfig.plugin !== 's3') {
return h.response();
}
Expand Down Expand Up @@ -388,27 +388,30 @@ exports.plugin = {
return boom.forbidden('Invalid scope');
}

try {
await req(opts, (err, response) => {
if (!err && response === true) {
return awsClient.invalidateCache(cachePath, (e) => {
if (e) {
console.log('Failed to invalidate cache: ', e);
}

return Promise.resolve();
});
} else if (!err) {
return Promise.reject(new Error('User cannot invalidate cache.'));
return new Promise((resolve, reject) => req(opts, (err, response) => {
if (err) {
return reject(err);
}

if (response.body === false) {
return reject('Permission denied');
}

return awsClient.invalidateCache(cachePath, (e) => {
if (e) {
return reject(e);
}

return Promise.reject(err);
return resolve();
});
} catch (err) {
return boom.forbidden(err);
}
})).then(() => h.response().code(200))
.catch((err) => {
if (err === 'Permission denied') {
return boom.forbidden(err);
}

return h.response();
return h.response().code(500);
});
},
options: {
description: 'Invalidate cache folder',
Expand Down
70 changes: 32 additions & 38 deletions test/plugins/caches.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@ describe('events plugin test', () => {
invalidateCache: sinon.stub().yields(null)
});

reqMock = sinon.stub().yields(null, {
reqMock = sinon.stub();

reqMock.yieldsAsync({
statusCode: 403
});

Expand Down Expand Up @@ -638,35 +640,9 @@ describe('events plugin test', () => {
});

describe('DELETE /caches/:scope/:id', () => {
let getOptions;
let putOptions;
let deleteOptions;

beforeEach(() => {
getOptions = {
headers: {
'x-foo': 'bar'
},
credentials: {
jobId: mockJobID,
scope: ['build']
},
url: `/caches/jobs/${mockJobID}/foo`
};
putOptions = {
method: 'PUT',
payload: 'THIS IS A TEST',
headers: {
'x-foo': 'bar',
'content-type': 'text/plain',
ignore: 'true'
},
credentials: {
jobId: mockJobID,
scope: ['build']
},
url: `/caches/jobs/${mockJobID}/foo`
};
deleteOptions = {
method: 'DELETE',
headers: {
Expand All @@ -682,18 +658,36 @@ describe('events plugin test', () => {
};
});

it('Throws error if user cannot invalidate cache', () =>
server.inject(putOptions).then((postResponse) => {
assert.equal(postResponse.statusCode, 202);
it('Returns 200 if successfully invalidate cache', () => {
reqMock.yieldsAsync(null, {
statusCode: 200,
body: true
});

return server.inject(getOptions).then((getResponse) => {
assert.equal(getResponse.statusCode, 200);
return server.inject(deleteOptions).then((deleteResponse) => {
assert.equal(deleteResponse.statusCode, 200);
});
});

return server.inject(deleteOptions).then((deleteResponse) => {
assert.equal(deleteResponse.statusCode, 403);
});
});
})
);
it('Returns 403 if user does not have permission', () => {
reqMock.yieldsAsync(null, {
statusCode: 200,
body: false
});

return server.inject(deleteOptions).then((deleteResponse) => {
assert.equal(deleteResponse.statusCode, 403);
});
});

it('Returns 500 if user cannot invalidate cache', () => {
const err = new Error('bad');

reqMock.yieldsAsync(err);

return server.inject(deleteOptions).then((deleteResponse) => {
assert.equal(deleteResponse.statusCode, 500);
});
});
});
});

0 comments on commit 682f7e4

Please sign in to comment.