box-node-sdk
Version:
Official SDK for Box Platform APIs
347 lines (346 loc) • 16 kB
text/typescript
import { serializeMetadataTemplate } from '@/schemas/metadataTemplate';
import { deserializeMetadataTemplate } from '@/schemas/metadataTemplate';
import { serializeCreateMetadataTemplateRequestBody } from '@/managers/metadataTemplates';
import { deserializeCreateMetadataTemplateRequestBody } from '@/managers/metadataTemplates';
import { serializeCreateMetadataTemplateRequestBodyFieldsField } from '@/managers/metadataTemplates';
import { deserializeCreateMetadataTemplateRequestBodyFieldsField } from '@/managers/metadataTemplates';
import { serializeCreateMetadataTemplateRequestBodyFieldsTypeField } from '@/managers/metadataTemplates';
import { deserializeCreateMetadataTemplateRequestBodyFieldsTypeField } from '@/managers/metadataTemplates';
import { serializeCreateMetadataTemplateRequestBodyFieldsOptionsField } from '@/managers/metadataTemplates';
import { deserializeCreateMetadataTemplateRequestBodyFieldsOptionsField } from '@/managers/metadataTemplates';
import { serializeFiles } from '@/schemas/files';
import { deserializeFiles } from '@/schemas/files';
import { serializeUploadFileRequestBodyAttributesField } from '@/managers/uploads';
import { deserializeUploadFileRequestBodyAttributesField } from '@/managers/uploads';
import { serializeUploadFileRequestBodyAttributesParentField } from '@/managers/uploads';
import { deserializeUploadFileRequestBodyAttributesParentField } from '@/managers/uploads';
import { serializeFileFull } from '@/schemas/fileFull';
import { deserializeFileFull } from '@/schemas/fileFull';
import { serializeMetadataFull } from '@/schemas/metadataFull';
import { deserializeMetadataFull } from '@/schemas/metadataFull';
import { serializeCreateFileMetadataByIdScope } from '@/managers/fileMetadata';
import { deserializeCreateFileMetadataByIdScope } from '@/managers/fileMetadata';
import { serializeMetadataQueryResults } from '@/schemas/metadataQueryResults';
import { deserializeMetadataQueryResults } from '@/schemas/metadataQueryResults';
import { serializeMetadataQuery } from '@/schemas/metadataQuery';
import { deserializeMetadataQuery } from '@/schemas/metadataQuery';
import { serializeDeleteMetadataTemplateScope } from '@/managers/metadataTemplates';
import { deserializeDeleteMetadataTemplateScope } from '@/managers/metadataTemplates';
import { serializeSearchResultsResponse } from '@/schemas/searchResultsResponse';
import { deserializeSearchResultsResponse } from '@/schemas/searchResultsResponse';
import { serializeMetadataFilter } from '@/schemas/metadataFilter';
import { deserializeMetadataFilter } from '@/schemas/metadataFilter';
import { serializeMetadataFilterScopeField } from '@/schemas/metadataFilter';
import { deserializeMetadataFilterScopeField } from '@/schemas/metadataFilter';
import { serializeSearchForContentQueryParamsTrashContentField } from '@/managers/search';
import { deserializeSearchForContentQueryParamsTrashContentField } from '@/managers/search';
import { serializeMetadataFieldFilterDateRange } from '@/schemas/metadataFieldFilterDateRange';
import { deserializeMetadataFieldFilterDateRange } from '@/schemas/metadataFieldFilterDateRange';
import { serializeMetadataFieldFilterFloatRange } from '@/schemas/metadataFieldFilterFloatRange';
import { deserializeMetadataFieldFilterFloatRange } from '@/schemas/metadataFieldFilterFloatRange';
import { serializeSearchResults } from '@/schemas/searchResults';
import { deserializeSearchResults } from '@/schemas/searchResults';
import { serializeSearchResultsWithSharedLinks } from '@/schemas/searchResultsWithSharedLinks';
import { deserializeSearchResultsWithSharedLinks } from '@/schemas/searchResultsWithSharedLinks';
import { serializeMetadataFilterValue } from '@/schemas/metadataFilterValue';
import { deserializeMetadataFilterValue } from '@/schemas/metadataFilterValue';
import { BoxClient } from '@/client';
import { MetadataTemplate } from '@/schemas/metadataTemplate';
import { CreateMetadataTemplateRequestBody } from '@/managers/metadataTemplates';
import { CreateMetadataTemplateRequestBodyFieldsField } from '@/managers/metadataTemplates';
import { CreateMetadataTemplateRequestBodyFieldsTypeField } from '@/managers/metadataTemplates';
import { CreateMetadataTemplateRequestBodyFieldsOptionsField } from '@/managers/metadataTemplates';
import { Files } from '@/schemas/files';
import { UploadFileRequestBody } from '@/managers/uploads';
import { UploadFileRequestBodyAttributesField } from '@/managers/uploads';
import { UploadFileRequestBodyAttributesParentField } from '@/managers/uploads';
import { FileFull } from '@/schemas/fileFull';
import { MetadataFull } from '@/schemas/metadataFull';
import { CreateFileMetadataByIdScope } from '@/managers/fileMetadata';
import { MetadataQueryResults } from '@/schemas/metadataQueryResults';
import { MetadataQuery } from '@/schemas/metadataQuery';
import { DeleteMetadataTemplateScope } from '@/managers/metadataTemplates';
import { SearchResultsResponse } from '@/schemas/searchResultsResponse';
import { SearchForContentQueryParams } from '@/managers/search';
import { MetadataFilter } from '@/schemas/metadataFilter';
import { MetadataFilterScopeField } from '@/schemas/metadataFilter';
import { SearchForContentQueryParamsTrashContentField } from '@/managers/search';
import { getUuid } from '@/internal/utils';
import { generateByteStream } from '@/internal/utils';
import { dateTimeFromString } from '@/internal/utils';
import { delayInSeconds } from '@/internal/utils';
import { getDefaultClient } from './commons';
import { MetadataFieldFilterDateRange } from '@/schemas/metadataFieldFilterDateRange';
import { MetadataFieldFilterFloatRange } from '@/schemas/metadataFieldFilterFloatRange';
import { SearchResults } from '@/schemas/searchResults';
import { SearchResultsWithSharedLinks } from '@/schemas/searchResultsWithSharedLinks';
import { MetadataFilterValue } from '@/schemas/metadataFilterValue';
import { toString } from '@/internal/utils';
import { sdToJson } from '@/serialization/json';
import { SerializedData } from '@/serialization/json';
import { sdIsEmpty } from '@/serialization/json';
import { sdIsBoolean } from '@/serialization/json';
import { sdIsNumber } from '@/serialization/json';
import { sdIsString } from '@/serialization/json';
import { sdIsList } from '@/serialization/json';
import { sdIsMap } from '@/serialization/json';
export const client: BoxClient = getDefaultClient();
test('testCreateMetaDataQueryExecuteRead', async function testCreateMetaDataQueryExecuteRead(): Promise<any> {
const templateKey: string = ''.concat('key', getUuid()) as string;
const template: MetadataTemplate =
await client.metadataTemplates.createMetadataTemplate({
scope: 'enterprise',
displayName: templateKey,
templateKey: templateKey,
fields: [
{
type: 'string' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'name',
displayName: 'name',
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
{
type: 'float' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'age',
displayName: 'age',
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
{
type: 'date' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'birthDate',
displayName: 'birthDate',
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
{
type: 'enum' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'countryCode',
displayName: 'countryCode',
options: [
{
key: 'US',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
{
key: 'CA',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
],
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
{
type: 'multiSelect' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'sports',
displayName: 'sports',
options: [
{
key: 'basketball',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
{
key: 'football',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
{
key: 'tennis',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
],
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
],
} satisfies CreateMetadataTemplateRequestBody);
if (!(template.templateKey == templateKey)) {
throw new Error('Assertion failed');
}
const files: Files = await client.uploads.uploadFile({
attributes: {
name: getUuid(),
parent: { id: '0' } satisfies UploadFileRequestBodyAttributesParentField,
} satisfies UploadFileRequestBodyAttributesField,
file: generateByteStream(10),
} satisfies UploadFileRequestBody);
const file: FileFull = files.entries![0];
const metadata: MetadataFull =
await client.fileMetadata.createFileMetadataById(
file.id,
'enterprise' as CreateFileMetadataByIdScope,
templateKey,
{
['name']: 'John',
['age']: 23,
['birthDate']: '2001-01-03T02:20:50.520Z',
['countryCode']: 'US',
['sports']: ['basketball', 'tennis'],
},
);
if (!(metadata.template == templateKey)) {
throw new Error('Assertion failed');
}
if (!(metadata.scope == template.scope)) {
throw new Error('Assertion failed');
}
await delayInSeconds(5);
const searchFrom: string = ''.concat(
template.scope!,
'.',
template.templateKey!,
) as string;
const query: MetadataQueryResults = await client.search.searchByMetadataQuery(
{
ancestorFolderId: '0',
from: searchFrom,
query:
'name = :name AND age < :age AND birthDate >= :birthDate AND countryCode = :countryCode AND sports = :sports',
queryParams: {
['name']: 'John',
['age']: 50,
['birthDate']: '2001-01-01T02:20:10.120Z',
['countryCode']: 'US',
['sports']: ['basketball', 'tennis'],
},
} satisfies MetadataQuery,
);
if (!(query.entries!.length >= 0)) {
throw new Error('Assertion failed');
}
await client.metadataTemplates.deleteMetadataTemplate(
'enterprise' as DeleteMetadataTemplateScope,
template.templateKey!,
);
await client.files.deleteFileById(file.id);
});
test('testMetadataFilters', async function testMetadataFilters(): Promise<any> {
const templateKey: string = ''.concat('key', getUuid()) as string;
const template: MetadataTemplate =
await client.metadataTemplates.createMetadataTemplate({
scope: 'enterprise',
displayName: templateKey,
templateKey: templateKey,
fields: [
{
type: 'float' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'floatField',
displayName: 'floatField',
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
{
type: 'string' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'stringField',
displayName: 'stringField',
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
{
type: 'date' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'dateField',
displayName: 'dateField',
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
{
type: 'enum' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'enumField',
displayName: 'enumField',
options: [
{
key: 'enumValue1',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
{
key: 'enumValue2',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
],
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
{
type: 'multiSelect' as CreateMetadataTemplateRequestBodyFieldsTypeField,
key: 'multiSelectField',
displayName: 'multiSelectField',
options: [
{
key: 'multiSelectValue1',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
{
key: 'multiSelectValue2',
} satisfies CreateMetadataTemplateRequestBodyFieldsOptionsField,
],
} satisfies CreateMetadataTemplateRequestBodyFieldsField,
],
} satisfies CreateMetadataTemplateRequestBody);
const files: Files = await client.uploads.uploadFile({
attributes: {
name: getUuid(),
parent: { id: '0' } satisfies UploadFileRequestBodyAttributesParentField,
} satisfies UploadFileRequestBodyAttributesField,
file: generateByteStream(10),
} satisfies UploadFileRequestBody);
const file: FileFull = files.entries![0];
const metadata: MetadataFull =
await client.fileMetadata.createFileMetadataById(
file.id,
'enterprise' as CreateFileMetadataByIdScope,
templateKey,
{
['floatField']: 10,
['stringField']: 'stringValue',
['dateField']: '2035-01-02T00:00:00Z',
['enumField']: 'enumValue2',
['multiSelectField']: ['multiSelectValue1', 'multiSelectValue2'],
},
);
const searchFilters: {
readonly [key: string]: MetadataFilterValue;
} = {
['stringField']: 'stringValue',
['dateField']: {
lt: dateTimeFromString('2035-01-01T00:00:00Z'),
gt: dateTimeFromString('2035-01-03T00:00:00Z'),
} satisfies MetadataFieldFilterDateRange,
['floatField']: {
lt: 9.5,
gt: 10.5,
} satisfies MetadataFieldFilterFloatRange,
['enumField']: 'enumValue2',
['multiSelectField']: ['multiSelectValue1', 'multiSelectValue2'],
};
const query: SearchResultsResponse = await client.search.searchForContent({
ancestorFolderIds: ['0'],
mdfilters: [
{
filters: searchFilters,
scope: 'enterprise' as MetadataFilterScopeField,
templateKey: templateKey,
} satisfies MetadataFilter,
],
} satisfies SearchForContentQueryParams);
const queryResults: SearchResults = query as SearchResults;
if (!(queryResults.entries!.length >= 0)) {
throw new Error('Assertion failed');
}
await client.metadataTemplates.deleteMetadataTemplate(
'enterprise' as DeleteMetadataTemplateScope,
template.templateKey!,
);
await client.files.deleteFileById(file.id);
});
test('testGetSearch', async function testGetSearch(): Promise<any> {
const keyword: string = 'test';
const search: SearchResultsResponse = await client.search.searchForContent({
ancestorFolderIds: ['0'],
query: keyword,
trashContent:
'non_trashed_only' as SearchForContentQueryParamsTrashContentField,
} satisfies SearchForContentQueryParams);
if (!((toString(search.type) as string) == 'search_results_items')) {
throw new Error('Assertion failed');
}
const searchResults: SearchResults = search as SearchResults;
if (!(searchResults.entries!.length >= 0)) {
throw new Error('Assertion failed');
}
const searchWithSharedLink: SearchResultsResponse =
await client.search.searchForContent({
ancestorFolderIds: ['0'],
query: keyword,
trashContent:
'non_trashed_only' as SearchForContentQueryParamsTrashContentField,
includeRecentSharedLinks: true,
} satisfies SearchForContentQueryParams);
if (
!(
(toString(searchWithSharedLink.type) as string) ==
'search_results_with_shared_links'
)
) {
throw new Error('Assertion failed');
}
const searchResultsWithSharedLink: SearchResultsWithSharedLinks =
searchWithSharedLink as SearchResultsWithSharedLinks;
if (!(searchResultsWithSharedLink.entries!.length >= 0)) {
throw new Error('Assertion failed');
}
});
export {};