@@ -5,7 +5,104 @@ import { CACHE_PREFIX_METADATA_QUERY, ERROR_CODE_METADATA_QUERY } from '../../co
55
66let metadataQuery ;
77let cache ;
8- const successResponse = { entries : [ ] , next_marker : 'abc123' } ;
8+ const marker = 'marker_123456789' ;
9+ const templateKey = 'awesomeTemplateKey' ;
10+ const templateType = 'metadata-template' ;
11+ const metadataInstanceId1 = 'c614dcaa-ebdc-4c88-b242-15cad4f7b787' ;
12+ const metadataInstanceId2 = 'ee348ed1-9460-44f3-9c34-aa580a93efda' ;
13+
14+ const mockMetadataQuerySuccessResponse = {
15+ entries : [
16+ {
17+ item : {
18+ type : 'file' ,
19+ id : '1234' ,
20+ name : 'filename1.pdf' ,
21+ size : 10000 ,
22+ } ,
23+ metadata : {
24+ enterprise_2222 : {
25+ awesomeTemplateKey : {
26+ $id : metadataInstanceId1 ,
27+ $parent : 'file_998877' ,
28+ $type : 'awesomeTemplateKey-asdlk-1234-asd1' ,
29+ $typeScope : 'enterprise_2222' ,
30+ $typeVersion : 0 ,
31+ $version : 0 ,
32+ type : 'bill' , // metadata template field
33+ amount : 500 , // metadata template field
34+ approved : 'yes' , // metadata template field
35+ } ,
36+ } ,
37+ } ,
38+ } ,
39+ {
40+ item : {
41+ type : 'file' ,
42+ id : '9876' ,
43+ name : 'filename2.mp4' ,
44+ size : 389027 ,
45+ } ,
46+ metadata : {
47+ enterprise_2222 : {
48+ awesomeTemplateKey : {
49+ $id : metadataInstanceId2 ,
50+ $parent : 'file_998877' ,
51+ $type : 'awesomeTemplateKey-asdlk-1234-asd1' ,
52+ $typeScope : 'enterprise_2222' ,
53+ $typeVersion : 0 ,
54+ $version : 0 ,
55+ type : 'receipt' , // metadata template field
56+ amount : 2735 , // metadata template field
57+ approved : 'no' , // metadata template field
58+ } ,
59+ } ,
60+ } ,
61+ } ,
62+ ] ,
63+ next_marker : marker ,
64+ } ;
65+
66+ const flattenedMockMetadataQuerySuccessResponse = {
67+ items : [
68+ {
69+ id : '1234' ,
70+ metadata : {
71+ data : {
72+ type : 'bill' ,
73+ amount : 500 ,
74+ approved : 'yes' ,
75+ } ,
76+ id : metadataInstanceId1 ,
77+ metadataTemplate : {
78+ type : templateType ,
79+ templateKey,
80+ } ,
81+ } ,
82+ name : 'filename1.pdf' ,
83+ size : 10000 ,
84+ } ,
85+ {
86+ id : '9876' ,
87+ metadata : {
88+ data : {
89+ type : 'receipt' ,
90+ amount : 2735 ,
91+ approved : 'no' ,
92+ } ,
93+ id : metadataInstanceId2 ,
94+ metadataTemplate : {
95+ type : templateType ,
96+ templateKey,
97+ } ,
98+ } ,
99+ name : 'filename2.mp4' ,
100+ size : 389027 ,
101+ } ,
102+ ] ,
103+ nextMarker : marker ,
104+ } ;
105+
9106const url = 'https://api.box.com/2.0/metadata_queries/execute' ;
10107const mockQuery = {
11108 query : 'enteprise_1234.tempalteKey.type = :arg1' ,
@@ -51,15 +148,15 @@ describe('api/MetadataQuery', () => {
51148
52149 test ( 'should return true when loaded' , ( ) => {
53150 metadataQuery . key = 'key' ;
54- cache . set ( 'key' , successResponse ) ;
151+ cache . set ( 'key' , mockMetadataQuerySuccessResponse ) ;
55152 expect ( metadataQuery . isLoaded ( ) ) . toBe ( true ) ;
56153 } ) ;
57154 } ) ;
58155
59156 describe ( 'finish()' , ( ) => {
60157 beforeEach ( ( ) => {
61158 metadataQuery . key = `${ CACHE_PREFIX_METADATA_QUERY } _foo` ;
62- cache . set ( metadataQuery . key , successResponse ) ;
159+ cache . set ( metadataQuery . key , mockMetadataQuerySuccessResponse ) ;
63160 } ) ;
64161
65162 test ( 'should not do anything if destroyed' , ( ) => {
@@ -74,7 +171,36 @@ describe('api/MetadataQuery', () => {
74171 test ( 'should call success callback with proper collection' , ( ) => {
75172 metadataQuery . successCallback = jest . fn ( ) ;
76173 metadataQuery . finish ( ) ;
77- expect ( metadataQuery . successCallback ) . toHaveBeenCalledWith ( successResponse ) ;
174+ expect ( metadataQuery . successCallback ) . toHaveBeenCalledWith ( mockMetadataQuerySuccessResponse ) ;
175+ } ) ;
176+ } ) ;
177+
178+ describe ( 'filterMetdataQueryResponse()' , ( ) => {
179+ test ( 'should return query response with entries of type file only' , ( ) => {
180+ const entries = [
181+ { item : { type : 'file' } , metadata : { } } ,
182+ { item : { type : 'folder' } , metadata : { } } ,
183+ { item : { type : 'file' } , metadata : { } } ,
184+ { item : { type : 'folder' } , metadata : { } } ,
185+ { item : { type : 'file' } , metadata : { } } ,
186+ ] ;
187+ const next_marker = 'marker_123456789' ;
188+ const metadataQueryResponse = {
189+ entries,
190+ next_marker,
191+ } ;
192+
193+ const filteredResponse = metadataQuery . filterMetdataQueryResponse ( metadataQueryResponse ) ;
194+ const isEveryEntryOfTypeFile = filteredResponse . entries . every ( entry => entry . item . type === 'file' ) ;
195+ expect ( isEveryEntryOfTypeFile ) . toBe ( true ) ;
196+ } ) ;
197+ } ) ;
198+
199+ describe ( 'flattenMetdataQueryResponse()' , ( ) => {
200+ test ( 'should flatten the metadata query api response successfully' , ( ) => {
201+ expect ( metadataQuery . flattenMetdataQueryResponse ( mockMetadataQuerySuccessResponse ) ) . toEqual (
202+ flattenedMockMetadataQuerySuccessResponse ,
203+ ) ;
78204 } ) ;
79205 } ) ;
80206
@@ -84,9 +210,10 @@ describe('api/MetadataQuery', () => {
84210 metadataQuery . finish = jest . fn ( ) ;
85211
86212 metadataQuery . queryMetadataSuccessHandler ( {
87- data : successResponse ,
213+ data : mockMetadataQuerySuccessResponse ,
88214 } ) ;
89- expect ( cache . set ) . toHaveBeenCalledWith ( metadataQuery . key , successResponse ) ;
215+
216+ expect ( cache . set ) . toHaveBeenCalledWith ( metadataQuery . key , flattenedMockMetadataQuerySuccessResponse ) ;
90217 expect ( metadataQuery . finish ) . toHaveBeenCalled ( ) ;
91218 } ) ;
92219 } ) ;
@@ -103,7 +230,7 @@ describe('api/MetadataQuery', () => {
103230 } ) ;
104231
105232 test ( 'should make xhr call to metadata_queries/execute endpoint and call success callback' , async ( ) => {
106- const mockAPIResponse = { data : successResponse } ;
233+ const mockAPIResponse = { data : mockMetadataQuerySuccessResponse } ;
107234
108235 metadataQuery . isDestroyed = jest . fn ( ) . mockReturnValueOnce ( false ) ;
109236 metadataQuery . xhr = {
0 commit comments