Skip to content

Commit 416a2ee

Browse files
Merge pull request #130 from smartsheet/remove-trailing-slash
Remove trailing slashes
2 parents 040402b + f64e27d commit 416a2ee

File tree

28 files changed

+234
-168
lines changed

28 files changed

+234
-168
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8-
## [4.8.0] - Unreleased
8+
## [x.x.x] - Unreleased
99
### Added
1010
- WiremMock integration tests for contract testing for GET /2.0/users/{userId}/plans and GET /2.0/users endpoints
1111
- WireMock integration tests for contract testing for POST /2.0/users/{userId}/plans/{planId}/upgrade and POST /2.0/users/{userId}/plans/{planId}/downgrade
12+
- Remove trailing slashes from routes
1213
### Updated
1314
- listAllUsers url generation
1415
- Folder structure for the Users related WireMock tests
16+
- Update endpoint and sheet tests
1517

1618
## [4.7.0] - 2025-06-30
1719
### Added

lib/contacts/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,19 @@ import type { RequestOptions } from './../types/RequestOptions';
1313
export function createContacts(options: CreateOptions): ContactsApi {
1414
const requestor = options.requestor;
1515

16+
const baseUrl = options.apiUrls.contacts;
1617
const optionsToSend = {
17-
url: options.apiUrls.contacts,
18+
url: baseUrl,
1819
...options.clientOptions,
1920
};
2021

21-
const getContact = (options: RequestOptions<GetContactOptions, GetContactBody>, callback: RequestCallback<Contact>) =>
22-
requestor.get({ ...optionsToSend, ...options }, callback);
22+
const getContact = (
23+
options: RequestOptions<GetContactOptions, GetContactBody>,
24+
callback: RequestCallback<Contact>
25+
) => {
26+
const urlWithSlash = baseUrl + '/';
27+
return requestor.get({ ...optionsToSend, url: urlWithSlash, ...options }, callback);
28+
};
2329

2430
const listContacts = (
2531
options: RequestOptions<ListContactsOptions, undefined>,

lib/favorites/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ exports.create = (options) => {
5353
}
5454

5555
var urlOptions = {
56-
url: options.apiUrls.favorites + deleteOptions.type + '/' + (deleteOptions.id || deleteOptions.objectId || ''),
56+
url: deleteOptions.objectId
57+
? options.apiUrls.favorites + '/' + deleteOptions.type + '/' + deleteOptions.objectId
58+
: options.apiUrls.favorites + '/' + deleteOptions.type,
5759
};
5860
return requestor.delete(_.extend({}, optionsToSend, urlOptions, deleteOptions), callback);
5961
};

lib/folders/index.js

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,32 @@ exports.create = function (options) {
2222
*/
2323
var listChildFolders = (getOptions, callback) => {
2424
console.warn('DEPRECATED: Folders.listChildFolders is deprecated. Use getFolderChildren instead.');
25-
var urlOptions = { url: options.apiUrls.folders + getOptions.folderId + '/folders' };
25+
var urlOptions = { url: options.apiUrls.folders + '/' + getOptions.folderId + '/folders' };
2626
return requestor.get(_.extend({}, optionsToSend, urlOptions, getOptions), callback);
2727
};
2828

2929
var createChildFolder = (postOptions, callback) => {
30-
var urlOptions = { url: options.apiUrls.folders + postOptions.folderId + '/folders' };
30+
var urlOptions = { url: options.apiUrls.folders + '/' + postOptions.folderId + '/folders' };
3131
return requestor.post(_.extend({}, optionsToSend, urlOptions, postOptions), callback);
3232
};
3333

34-
var updateFolder = (putOptions, callback) => requestor.put(_.extend({}, optionsToSend, putOptions), callback);
34+
var updateFolder = (putOptions, callback) => {
35+
var urlOptions = { url: options.apiUrls.folders + '/' + putOptions.folderId };
36+
requestor.put(_.extend({}, optionsToSend, urlOptions, putOptions), callback);
37+
};
3538

36-
var deleteFolder = (deleteOptions, callback) =>
37-
requestor.delete(_.extend({}, optionsToSend, deleteOptions), callback);
39+
var deleteFolder = (deleteOptions, callback) => {
40+
var urlOptions = { url: options.apiUrls.folders + '/' + deleteOptions.folderId };
41+
requestor.delete(_.extend({}, optionsToSend, urlOptions, deleteOptions), callback);
42+
};
3843

3944
var copyFolder = (postOptions, callback) => {
40-
var urlOptions = { url: options.apiUrls.folders + postOptions.folderId + '/copy' };
45+
var urlOptions = { url: options.apiUrls.folders + '/' + postOptions.folderId + '/copy' };
4146
return requestor.post(_.extend({}, optionsToSend, urlOptions, postOptions), callback);
4247
};
4348

4449
var moveFolder = (postOptions, callback) => {
45-
var urlOptions = { url: options.apiUrls.folders + postOptions.folderId + '/move' };
50+
var urlOptions = { url: options.apiUrls.folders + '/' + postOptions.folderId + '/move' };
4651
return requestor.post(_.extend({}, optionsToSend, urlOptions, postOptions), callback);
4752
};
4853

@@ -55,7 +60,7 @@ exports.create = function (options) {
5560
* @param {Function} callback - Callback function
5661
*/
5762
var getFolderMetadata = (getOptions, callback) => {
58-
var urlOptions = { url: options.apiUrls.folders + getOptions.folderId + '/metadata' };
63+
var urlOptions = { url: options.apiUrls.folders + '/' + getOptions.folderId + '/metadata' };
5964
return requestor.get(_.extend({}, optionsToSend, urlOptions, getOptions), callback);
6065
};
6166

@@ -71,7 +76,7 @@ exports.create = function (options) {
7176
* @param {Function} callback - Callback function
7277
*/
7378
var getFolderChildren = (getOptions, callback) => {
74-
var urlOptions = { url: options.apiUrls.folders + getOptions.folderId + '/children' };
79+
var urlOptions = { url: options.apiUrls.folders + '/' + getOptions.folderId + '/children' };
7580
return requestor.get(_.extend({}, optionsToSend, urlOptions, getOptions), callback);
7681
};
7782

lib/groups/index.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,22 @@ exports.create = function (options) {
1313
var createGroup = (postOptions, callback) => requestor.post(_.extend({}, optionsToSend, postOptions), callback);
1414

1515
var addGroupMembers = (postOptions, callback) => {
16-
var urlOptions = { url: options.apiUrls.groups + postOptions.groupId + '/members/' };
16+
var urlOptions = { url: options.apiUrls.groups + '/' + postOptions.groupId + '/members' };
1717
return requestor.post(_.extend({}, optionsToSend, urlOptions, postOptions), callback);
1818
};
1919

20-
var updateGroup = (putOptions, callback) => requestor.put(_.extend({}, optionsToSend, putOptions), callback);
20+
var updateGroup = (putOptions, callback) => {
21+
var urlOptions = { url: options.apiUrls.groups + '/' + putOptions.groupId };
22+
requestor.put(_.extend({}, optionsToSend, urlOptions, putOptions), callback);
23+
};
2124

22-
var deleteGroup = (deleteOptions, callback) => requestor.delete(_.extend({}, optionsToSend, deleteOptions), callback);
25+
var deleteGroup = (deleteOptions, callback) => {
26+
var urlOptions = { url: options.apiUrls.groups + '/' + deleteOptions.groupId };
27+
requestor.delete(_.extend({}, optionsToSend, urlOptions, deleteOptions), callback);
28+
};
2329

2430
var removeGroupMember = (deleteOptions, callback) => {
25-
var urlOptions = { url: options.apiUrls.groups + deleteOptions.groupId + '/members/' + deleteOptions.userId };
31+
var urlOptions = { url: options.apiUrls.groups + '/' + deleteOptions.groupId + '/members/' + deleteOptions.userId };
2632
return requestor.delete(_.extend({}, optionsToSend, urlOptions, deleteOptions), callback);
2733
};
2834

lib/home/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ exports.create = function (options) {
2121
*/
2222
var listFolders = (getOptions, callback) => {
2323
console.warn('DEPRECATED: Home.listFolders is deprecated.');
24-
return listContents(_.extend({ url: options.apiUrls.home + 'folders' }, getOptions), callback);
24+
return listContents(_.extend({ url: options.apiUrls.home + '/' + 'folders' }, getOptions), callback);
2525
};
2626

2727
/**
2828
* @deprecated See: https://developers.smartsheet.com/api/smartsheet/guides/updating-code/migrate-from-using-the-sheets-folder
2929
*/
3030
var createFolder = (postOptions, callback) => {
3131
console.warn('DEPRECATED: Home.createFolder is deprecated.');
32-
var urlOptions = { url: options.apiUrls.home + 'folders' };
32+
var urlOptions = { url: options.apiUrls.home + '/' + 'folders' };
3333
return requestor.post(_.extend({}, optionsToSend, urlOptions, postOptions), callback);
3434
};
3535

lib/reports/index.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,38 @@ exports.create = function (options) {
1212
_.extend(optionsToSend, options.clientOptions);
1313

1414
var getReport = (getOptions, callback) => {
15-
return requestor.get(_.extend({}, optionsToSend, getOptions), callback);
15+
let url = options.apiUrls.reports;
16+
if (getOptions?.reportId) {
17+
url += '/' + getOptions.reportId;
18+
}
19+
var urlOptions = { url };
20+
return requestor.get(_.extend({}, optionsToSend, urlOptions, getOptions), callback);
1621
};
1722

1823
var sendReportViaEmail = (postOptions, callback) => {
19-
var urlOptions = { url: options.apiUrls.reports + postOptions.reportId + '/emails' };
24+
var urlOptions = { url: options.apiUrls.reports + '/' + postOptions.reportId + '/emails' };
2025
return requestor.post(_.extend({}, optionsToSend, urlOptions, postOptions), callback);
2126
};
2227

2328
var getReportAsExcel = (getOptions, callback) => {
2429
var acceptOptions = { accept: constants.acceptHeaders.vndMsExcel, encoding: null };
25-
return requestor.get(_.extend({}, optionsToSend, acceptOptions, getOptions), callback);
30+
var urlOptions = { url: options.apiUrls.reports + '/' + getOptions.reportId };
31+
return requestor.get(_.extend({}, optionsToSend, acceptOptions, urlOptions, getOptions), callback);
2632
};
2733

2834
var getReportAsCSV = (getOptions, callback) => {
2935
var acceptOptions = { accept: constants.acceptHeaders.textCsv };
30-
return requestor.get(_.extend({}, optionsToSend, acceptOptions, getOptions), callback);
36+
var urlOptions = { url: options.apiUrls.reports + '/' + getOptions.reportId };
37+
return requestor.get(_.extend({}, optionsToSend, acceptOptions, urlOptions, getOptions), callback);
3138
};
3239

3340
var getReportPublishStatus = (getOptions, callback) => {
34-
var urlOptions = { url: options.apiUrls.reports + getOptions.reportId + '/publish' };
41+
var urlOptions = { url: options.apiUrls.reports + '/' + getOptions.reportId + '/publish' };
3542
return requestor.get(_.extend({}, optionsToSend, urlOptions, getOptions), callback);
3643
};
3744

3845
var setReportPublishStatus = (putOptions, callback) => {
39-
var urlOptions = { url: options.apiUrls.reports + putOptions.reportId + '/publish' };
46+
var urlOptions = { url: options.apiUrls.reports + '/' + putOptions.reportId + '/publish' };
4047
return requestor.put(_.extend({}, optionsToSend, urlOptions, putOptions), callback);
4148
};
4249

lib/search/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { CreateOptions, RequestCallback } from '../types';
2+
import { apiUrls } from '../utils/apis';
23
import type { SearchAllOptions, SearchApi, SearchResponse, SearchSheetOptions } from './types';
34

45
export const createSearch = (options: CreateOptions): SearchApi => {
@@ -29,10 +30,11 @@ export const createSearch = (options: CreateOptions): SearchApi => {
2930
...getOptions,
3031
queryParameters: {
3132
query: getOptions.query,
32-
sheetId: getOptions.sheetId,
3333
},
3434
};
3535

36+
options.url = apiUrls.search + '/sheets/' + getOptions.sheetId;
37+
3638
return requestor.get(options, callback);
3739
};
3840

lib/share/share.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,10 @@ module.exports = (url) => ({
6161

6262
var buildUrl = (urlOptions) =>
6363
url +
64+
'/' +
6465
(urlOptions.sheetId || urlOptions.workspaceId || urlOptions.reportId || urlOptions.sightId) +
65-
'/shares/' +
66-
(urlOptions.shareId || '');
66+
'/shares' +
67+
(urlOptions.shareId !== undefined ? '/' + urlOptions.shareId : '');
6768

6869
return {
6970
/**

lib/sheets/attachments.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,13 @@ exports.create = function (options) {
4040
return requestor.delete(_.extend({}, optionsToSend, urlOptions, deleteOptions), callback);
4141
};
4242

43-
var buildUrl = (urlOptions) =>
44-
options.apiUrls.sheets + urlOptions.sheetId + '/attachments/' + (urlOptions.attachmentId || '');
43+
var buildUrl = (urlOptions) => {
44+
let url = options.apiUrls.sheets + '/' + urlOptions.sheetId + '/attachments';
45+
if (urlOptions.attachmentId !== undefined) {
46+
url += '/' + urlOptions.attachmentId;
47+
}
48+
return url;
49+
};
4550

4651
return {
4752
getAttachment: listAttachments,

0 commit comments

Comments
 (0)