Skip to content

Commit efa33ed

Browse files
author
Matt Willer
authored
Add metadata set commands (#136)
1 parent a5cbddf commit efa33ed

File tree

6 files changed

+292
-4
lines changed

6 files changed

+292
-4
lines changed

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"@oclif/plugin-help": "^2.1.4",
2929
"@oclif/plugin-not-found": "^1.2.0",
3030
"archiver": "^3.0.0",
31-
"box-node-sdk": "^1.28.0",
31+
"box-node-sdk": "^1.29.0",
3232
"chalk": "^2.4.1",
3333
"cli-progress": "^2.1.0",
3434
"csv": "^3.1.0",

src/commands/files/metadata/set.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
'use strict';
2+
3+
const BoxCommand = require('../../../box-command');
4+
const { flags } = require('@oclif/command');
5+
const utils = require('../../../util');
6+
7+
class FilesSetMetadataCommand extends BoxCommand {
8+
async run() {
9+
const { flags, args } = this.parse(FilesSetMetadataCommand);
10+
11+
let metadataValues = Object.assign({}, ...flags.data);
12+
let templateKey = flags['template-key'];
13+
14+
let metadata = await this.client.files.setMetadata(args.id, flags.scope, templateKey, metadataValues);
15+
await this.output(metadata);
16+
}
17+
18+
}
19+
20+
FilesSetMetadataCommand.description = 'Set metadata on a file';
21+
22+
FilesSetMetadataCommand.flags = {
23+
...BoxCommand.flags,
24+
data: flags.string({
25+
description: 'Metadata key and value, in the form "key=value". Note: For float type, use "f" on end of digits: key2=1234.50f',
26+
required: true,
27+
multiple: true,
28+
parse: utils.parseMetadata,
29+
}),
30+
scope: flags.string({
31+
description: 'The scope of the metadata template to use',
32+
default: 'enterprise',
33+
}),
34+
'template-key': flags.string({
35+
description: 'The key of the metadata template to use',
36+
required: true,
37+
}),
38+
};
39+
40+
FilesSetMetadataCommand.args = [
41+
{
42+
name: 'id',
43+
required: true,
44+
hidden: false,
45+
description: 'ID of the file to add metadata to',
46+
}
47+
];
48+
49+
module.exports = FilesSetMetadataCommand;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
'use strict';
2+
3+
const BoxCommand = require('../../../box-command');
4+
const { flags } = require('@oclif/command');
5+
const utils = require('../../../util');
6+
7+
class FoldersSetMetadataCommand extends BoxCommand {
8+
async run() {
9+
const { flags, args } = this.parse(FoldersSetMetadataCommand);
10+
11+
let metadataValues = Object.assign({}, ...flags.data);
12+
let templateKey = flags['template-key'];
13+
14+
let metadata = await this.client.folders.setMetadata(args.id, flags.scope, templateKey, metadataValues);
15+
await this.output(metadata);
16+
}
17+
18+
}
19+
20+
FoldersSetMetadataCommand.description = 'Set metadata on a folder';
21+
22+
FoldersSetMetadataCommand.flags = {
23+
...BoxCommand.flags,
24+
data: flags.string({
25+
description: 'Metadata key and value, in the form "key=value". Note: For float type, use "f" on end of digits: key2=1234.50f',
26+
required: true,
27+
multiple: true,
28+
parse: utils.parseMetadata,
29+
}),
30+
scope: flags.string({
31+
description: 'The scope of the metadata template to use',
32+
default: 'enterprise',
33+
}),
34+
'template-key': flags.string({
35+
description: 'The key of the metadata template to use',
36+
required: true,
37+
}),
38+
};
39+
40+
FoldersSetMetadataCommand.args = [
41+
{
42+
name: 'id',
43+
required: true,
44+
hidden: false,
45+
description: 'ID of the folder to add metadata to',
46+
}
47+
];
48+
49+
module.exports = FoldersSetMetadataCommand;

test/commands/files.test.js

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,100 @@ describe('Files', () => {
983983
});
984984
});
985985

986+
describe('files:metadata:set', () => {
987+
let fileID = '11111',
988+
metadataScope = 'enterprise',
989+
metadataTemplate = 'testTemplate',
990+
addMetadataFixture = getFixture('files/post_files_id_metadata_scope_template'),
991+
yamlOutput = getFixture('output/files_metadata_create_yaml.txt');
992+
993+
let createMetadataBody = {
994+
test: 'test123',
995+
number: 1.9,
996+
arr: [
997+
'foo',
998+
'bar'
999+
]
1000+
};
1001+
1002+
test
1003+
.nock(TEST_API_ROOT, api => api
1004+
.post(`/2.0/files/${fileID}/metadata/${metadataScope}/${metadataTemplate}`, createMetadataBody)
1005+
.reply(201, addMetadataFixture)
1006+
)
1007+
.stdout()
1008+
.command([
1009+
'files:metadata:set',
1010+
fileID,
1011+
`--template-key=${metadataTemplate}`,
1012+
'--data=test=test123',
1013+
'--data=number=#1.9',
1014+
'--data=arr=[foo,bar]',
1015+
'--json',
1016+
'--token=test'
1017+
])
1018+
.it('should add metadata object with key/value pairs passed as a flag (JSON Output)', ctx => {
1019+
assert.equal(ctx.stdout, addMetadataFixture);
1020+
});
1021+
1022+
test
1023+
.nock(TEST_API_ROOT, api => api
1024+
.post(`/2.0/files/${fileID}/metadata/${metadataScope}/${metadataTemplate}`, createMetadataBody)
1025+
.reply(201, addMetadataFixture)
1026+
)
1027+
.stdout()
1028+
.command([
1029+
'files:metadata:set',
1030+
fileID,
1031+
`--template-key=${metadataTemplate}`,
1032+
'--data=test=test123',
1033+
'--data=number=#1.9',
1034+
'--data=arr=[foo,bar]',
1035+
'--token=test'
1036+
])
1037+
.it('should add metadata object with key/value pairs passed as a flag (YAML Output)', ctx => {
1038+
assert.equal(ctx.stdout, yamlOutput);
1039+
});
1040+
1041+
test
1042+
.nock(TEST_API_ROOT, api => api
1043+
.post(`/2.0/files/${fileID}/metadata/${metadataScope}/${metadataTemplate}`, createMetadataBody)
1044+
.reply(409)
1045+
.put(`/2.0/files/${fileID}/metadata/${metadataScope}/${metadataTemplate}`, [
1046+
{
1047+
op: 'add',
1048+
path: '/test',
1049+
value: 'test123',
1050+
},
1051+
{
1052+
op: 'add',
1053+
path: '/number',
1054+
value: 1.9,
1055+
},
1056+
{
1057+
op: 'add',
1058+
path: '/arr',
1059+
value: [ 'foo', 'bar' ],
1060+
}
1061+
])
1062+
.reply(200, addMetadataFixture)
1063+
)
1064+
.stdout()
1065+
.command([
1066+
'files:metadata:set',
1067+
fileID,
1068+
`--template-key=${metadataTemplate}`,
1069+
'--data=test=test123',
1070+
'--data=number=#1.9',
1071+
'--data=arr=[foo,bar]',
1072+
'--json',
1073+
'--token=test'
1074+
])
1075+
.it('should update metadata object with key/value pairs passed as a flag when creation conflicts', ctx => {
1076+
assert.equal(ctx.stdout, addMetadataFixture);
1077+
});
1078+
});
1079+
9861080
leche.withData([
9871081
'files:share',
9881082
'files:shared-links:create',

test/commands/folders.test.js

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,102 @@ describe('Folders', () => {
786786
});
787787
});
788788

789+
describe('folders:metadata:set', () => {
790+
let folderId = '0',
791+
metadataScope = 'enterprise',
792+
metadataTemplate = 'testTemplate',
793+
addMetadataFixture = getFixture('folders/post_folders_id_metadata_scope_template'),
794+
yamlOutput = getFixture('output/folders_metadata_create_yaml.txt');
795+
796+
let createMetadataBody = {
797+
test: 'test123',
798+
number: 1.9,
799+
arr: [
800+
'foo',
801+
'bar'
802+
]
803+
};
804+
805+
test
806+
.nock(TEST_API_ROOT, api => api
807+
.post(`/2.0/folders/${folderId}/metadata/${metadataScope}/${metadataTemplate}`, createMetadataBody)
808+
.reply(201, addMetadataFixture)
809+
)
810+
.stdout()
811+
.command([
812+
'folders:metadata:set',
813+
folderId,
814+
`--template-key=${metadataTemplate}`,
815+
'--data=test=test123',
816+
'--data=number=#1.9',
817+
'--data=arr=[foo,bar]',
818+
'--json',
819+
'--token=test'
820+
])
821+
.it('should add metadata object with key/value pairs passed as a flag (JSON Output)', ctx => {
822+
assert.equal(ctx.stdout, addMetadataFixture);
823+
});
824+
825+
test
826+
.nock(TEST_API_ROOT, api => api
827+
.post(`/2.0/folders/${folderId}/metadata/${metadataScope}/${metadataTemplate}`, createMetadataBody)
828+
.reply(201, addMetadataFixture)
829+
)
830+
.stdout()
831+
.command([
832+
'folders:metadata:set',
833+
folderId,
834+
`--template-key=${metadataTemplate}`,
835+
'--data=test=test123',
836+
'--data=number=#1.9',
837+
'--data=arr=[foo,bar]',
838+
'--token=test'
839+
])
840+
.it('should add metadata object with key/value pairs passed as a flag (YAML Output)', ctx => {
841+
assert.equal(ctx.stdout, yamlOutput);
842+
});
843+
844+
test
845+
.nock(TEST_API_ROOT, api => api
846+
.post(`/2.0/folders/${folderId}/metadata/${metadataScope}/${metadataTemplate}`, createMetadataBody)
847+
.reply(409)
848+
.put(`/2.0/folders/${folderId}/metadata/${metadataScope}/${metadataTemplate}`, [
849+
{
850+
op: 'add',
851+
path: '/test',
852+
value: 'test123',
853+
},
854+
{
855+
op: 'add',
856+
path: '/number',
857+
value: 1.9,
858+
},
859+
{
860+
op: 'add',
861+
path: '/arr',
862+
value: [ 'foo', 'bar' ],
863+
}
864+
])
865+
.reply(200, addMetadataFixture)
866+
)
867+
.stdout()
868+
.command([
869+
'folders:metadata:set',
870+
folderId,
871+
`--template-key=${metadataTemplate}`,
872+
'--data=test=test123',
873+
'--data=number=#1.9',
874+
'--data=arr=[foo,bar]',
875+
'--json',
876+
'--token=test'
877+
])
878+
.it('should update metadata object with key/value pairs passed as a flag when creation conflicts', ctx => {
879+
assert.equal(ctx.stdout, addMetadataFixture);
880+
});
881+
882+
883+
});
884+
789885
leche.withData([
790886
'folders:share',
791887
'folders:shared-links:create',

0 commit comments

Comments
 (0)