1+ /*
2+ * --------------------------------------------------------------------------------
3+ * <copyright company="Aspose" file="batchTest.ts">
4+ * Copyright (c) 2021 Aspose.Words for Cloud
5+ * </copyright>
6+ * <summary>
7+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8+ * of this software and associated documentation files (the "Software"), to deal
9+ * in the Software without restriction, including without limitation the rights
10+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+ * copies of the Software, and to permit persons to whom the Software is
12+ * furnished to do so, subject to the following conditions:
13+ *
14+ * The above copyright notice and this permission notice shall be included in all
15+ * copies or substantial portions of the Software.
16+ *
17+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+ * SOFTWARE.
24+ * </summary>
25+ * --------------------------------------------------------------------------------
26+ */
27+
28+ import { assert , expect } from "chai" ;
29+ import "mocha" ;
30+ import * as fs from "fs" ;
31+
32+ import * as model from "../src/model/model" ;
33+ import * as BaseTest from "./baseTest" ;
34+
35+ describe ( "batch tests" , ( ) => {
36+ const remoteDataFolder = BaseTest . remoteBaseTestDataFolder + "/DocumentElements/Paragraphs" ;
37+
38+ describe ( "Empty batch request test" , ( ) => {
39+ it ( "should throw an error" , ( ) => {
40+ const wordsApi = BaseTest . initializeWordsApi ( ) ;
41+ return wordsApi . batch ( )
42+ . then ( ( _ ) => { assert . fail ( "Error is expected" ) ; } )
43+ . catch ( ( _ ) => { assert . ok ( "Passed" ) ; } )
44+ } ) ;
45+ } ) ;
46+
47+ describe ( "Batch request for a single json test" , ( ) => {
48+ const remoteFileName = "TestBatchSingleJsonRequest.docx" ;
49+ const localFile = "Common/test_multi_pages.docx" ;
50+
51+ it ( "should return response with code 200" , ( ) => {
52+ const wordsApi = BaseTest . initializeWordsApi ( ) ;
53+ return wordsApi . uploadFileToStorage (
54+ remoteDataFolder + "/" + remoteFileName ,
55+ BaseTest . localBaseTestDataFolder + localFile
56+ ) . then ( ( result0 ) => {
57+ expect ( result0 . response . statusMessage ) . to . equal ( "OK" ) ;
58+ const request1 = new model . GetParagraphsRequest ( {
59+ name : remoteFileName ,
60+ nodePath : "sections/0" ,
61+ folder : remoteDataFolder
62+ } ) ;
63+
64+ return wordsApi . batch ( request1 )
65+ . then ( ( resultApi ) => {
66+ // Assert
67+ expect ( resultApi . response . statusCode ) . to . equal ( 200 ) ;
68+ expect ( resultApi . body . length ) . to . equal ( 1 ) ;
69+ expect ( resultApi . body [ 0 ] . constructor . name ) . to . equal ( "ParagraphLinkCollectionResponse" ) ; // GetParagraphs
70+ } ) ;
71+ } ) ;
72+ } ) ;
73+ } ) ;
74+
75+ describe ( "Batch request for a single file test" , ( ) => {
76+ const remoteFileName = "TestBatchSingleFileRequest.docx" ;
77+ const localFile = "Common/test_multi_pages.docx" ;
78+
79+ it ( "should return response with code 200" , ( ) => {
80+ const wordsApi = BaseTest . initializeWordsApi ( ) ;
81+ return wordsApi . uploadFileToStorage (
82+ remoteDataFolder + "/" + remoteFileName ,
83+ BaseTest . localBaseTestDataFolder + localFile
84+ ) . then ( ( result0 ) => {
85+ expect ( result0 . response . statusMessage ) . to . equal ( "OK" ) ;
86+
87+ const request1 = new model . GetParagraphsRequest ( {
88+ name : remoteFileName ,
89+ nodePath : "sections/0" ,
90+ folder : remoteDataFolder
91+ } ) ;
92+
93+ const request2 = new model . DownloadFileRequest ( {
94+ path : remoteDataFolder + "/" + remoteFileName ,
95+ } ) ;
96+
97+ request2 . dependsOn ( request1 ) ;
98+
99+ return wordsApi . batch ( request1 , request2 )
100+ . then ( ( resultApi ) => {
101+ // Assert
102+ expect ( resultApi . response . statusCode ) . to . equal ( 200 ) ;
103+ expect ( resultApi . body . length ) . to . equal ( 2 ) ;
104+ expect ( resultApi . body [ 1 ] . constructor . name ) . to . equal ( "Buffer" ) ;
105+
106+ fs . writeFileSync ( "d:/result.docx" , resultApi . body [ 0 ] ) ;
107+ } ) ;
108+ } ) ;
109+ } ) ;
110+ } ) ;
111+
112+ describe ( "Batch Request for a single form test" , ( ) => {
113+ const remoteFileName = "TestGetFullBatchRequest.docx" ;
114+ const localFile = "Common/test_multi_pages.docx" ;
115+
116+ it ( "should return response with code 200" , ( ) => {
117+ const wordsApi = BaseTest . initializeWordsApi ( ) ;
118+ return wordsApi . uploadFileToStorage (
119+ remoteDataFolder + "/" + remoteFileName ,
120+ BaseTest . localBaseTestDataFolder + localFile
121+ ) . then ( ( result0 ) => {
122+ expect ( result0 . response . statusMessage ) . to . equal ( "OK" ) ;
123+ const request1 = new model . InsertParagraphRequest ( {
124+ name : remoteFileName ,
125+ paragraph : new model . ParagraphInsert ( {
126+ text : "This is a new paragraph for your document"
127+ } ) ,
128+ nodePath : "sections/0" ,
129+ folder : remoteDataFolder
130+ } ) ;
131+
132+ return wordsApi . batch ( request1 )
133+ . then ( ( resultApi ) => {
134+ // Assert
135+ expect ( resultApi . response . statusCode ) . to . equal ( 200 ) ;
136+ expect ( resultApi . body . length ) . to . equal ( 1 ) ;
137+ expect ( resultApi . body [ 0 ] . constructor . name ) . to . equal ( "ParagraphResponse" ) ; // InsertParagraph
138+ } ) ;
139+ } ) ;
140+ } ) ;
141+ } ) ;
142+
143+ describe ( "Batch request for a single online request test" , ( ) => {
144+ const remoteFileName = "TesBatchSingleOnlineRequest.docx" ;
145+ const reportingFolder = "DocumentActions/Reporting" ;
146+ const localFile = "Common/test_multi_pages.docx" ;
147+
148+ it ( "should return response with code 200" , ( ) => {
149+ const wordsApi = BaseTest . initializeWordsApi ( ) ;
150+ return wordsApi . uploadFileToStorage (
151+ remoteDataFolder + "/" + remoteFileName ,
152+ BaseTest . localBaseTestDataFolder + localFile
153+ ) . then ( ( result0 ) => {
154+ expect ( result0 . response . statusMessage ) . to . equal ( "OK" ) ;
155+
156+ const localDocumentFile = "ReportTemplate.docx" ;
157+ const localDataFile = fs . readFileSync ( BaseTest . localBaseTestDataFolder + reportingFolder + "/ReportData.json" , 'utf8' ) ;
158+
159+ const request = new model . BuildReportOnlineRequest ( {
160+ template : fs . createReadStream ( BaseTest . localBaseTestDataFolder + reportingFolder + "/" + localDocumentFile ) ,
161+ data : localDataFile ,
162+ reportEngineSettings : new model . ReportEngineSettings ( {
163+ dataSourceType : model . ReportEngineSettings . DataSourceTypeEnum . Json ,
164+ dataSourceName : "persons"
165+ } )
166+ } ) ;
167+
168+ return wordsApi . batch ( request )
169+ . then ( ( resultApi ) => {
170+ // Assert
171+ expect ( resultApi . response . statusMessage ) . to . equal ( "OK" ) ;
172+ expect ( resultApi . body . length ) . to . equal ( 1 ) ;
173+ expect ( resultApi . body [ 0 ] . constructor . name ) . to . equal ( "Buffer" ) ; // BuildReportOnline
174+ } ) ;
175+ } ) ;
176+ } ) ;
177+ } ) ;
178+
179+ describe ( "Run Full Batch Request test" , ( ) => {
180+ const remoteFileName = "TestGetFullBatchRequest.docx" ;
181+ const reportingFolder = "DocumentActions/Reporting" ;
182+ const localFile = "Common/test_multi_pages.docx" ;
183+
184+ it ( "should return response with code 200" , ( ) => {
185+ const wordsApi = BaseTest . initializeWordsApi ( ) ;
186+ return wordsApi . uploadFileToStorage (
187+ remoteDataFolder + "/" + remoteFileName ,
188+ BaseTest . localBaseTestDataFolder + localFile
189+ ) . then ( ( result0 ) => {
190+ expect ( result0 . response . statusMessage ) . to . equal ( "OK" ) ;
191+ const request1 = new model . GetParagraphsRequest ( {
192+ name : remoteFileName ,
193+ nodePath : "sections/0" ,
194+ folder : remoteDataFolder
195+ } ) ;
196+ const request2 = new model . GetParagraphRequest ( {
197+ name : remoteFileName ,
198+ index : 0 ,
199+ nodePath : "sections/0" ,
200+ folder : remoteDataFolder
201+ } ) ;
202+ const request3 = new model . InsertParagraphRequest ( {
203+ name : remoteFileName ,
204+ paragraph : new model . ParagraphInsert ( {
205+ text : "This is a new paragraph for your document"
206+ } ) ,
207+ nodePath : "sections/0" ,
208+ folder : remoteDataFolder
209+ } ) ;
210+ const request4 = new model . DeleteParagraphRequest ( {
211+ name : remoteFileName ,
212+ index : 0 ,
213+ nodePath : "" ,
214+ folder : remoteDataFolder
215+ } ) ;
216+
217+ const localDocumentFile = "ReportTemplate.docx" ;
218+ const localDataFile = fs . readFileSync ( BaseTest . localBaseTestDataFolder + reportingFolder + "/ReportData.json" , 'utf8' ) ;
219+
220+ const request5 = new model . BuildReportOnlineRequest ( {
221+ template : fs . createReadStream ( BaseTest . localBaseTestDataFolder + reportingFolder + "/" + localDocumentFile ) ,
222+ data : localDataFile ,
223+ reportEngineSettings : new model . ReportEngineSettings ( {
224+ dataSourceType : model . ReportEngineSettings . DataSourceTypeEnum . Json ,
225+ dataSourceName : "persons"
226+ } )
227+ } ) ;
228+
229+ return wordsApi . batch ( request1 , request2 , request3 , request4 , request5 )
230+ . then ( ( resultApi ) => {
231+ // Assert
232+ expect ( resultApi . response . statusCode ) . to . equal ( 200 ) ;
233+ expect ( resultApi . body . length ) . to . equal ( 5 ) ;
234+ expect ( resultApi . body [ 0 ] . constructor . name ) . to . equal ( "ParagraphLinkCollectionResponse" ) ; // GetParagraphs
235+ expect ( resultApi . body [ 1 ] . constructor . name ) . to . equal ( "ParagraphResponse" ) ; // GetParagraph
236+ expect ( resultApi . body [ 2 ] . constructor . name ) . to . equal ( "ParagraphResponse" ) ; // InsertParagraph
237+ expect ( resultApi . body [ 3 ] ) . to . be . null ; // DeleteParagraph
238+ expect ( resultApi . body [ 4 ] . constructor . name ) . to . equal ( "Buffer" ) ; // BuildReportOnline
239+ } ) ;
240+ } ) ;
241+ } ) ;
242+ } ) ;
243+
244+ describe ( "Run batch request with depenency tree test" , ( ) => {
245+ const remoteFileName = "TestGetFullBatchRequest.docx" ;
246+ const localFile = "Common/test_multi_pages.docx" ;
247+
248+ it ( "should return response with code 200" , ( ) => {
249+ const wordsApi = BaseTest . initializeWordsApi ( ) ;
250+ return wordsApi . uploadFileToStorage (
251+ remoteDataFolder + "/" + remoteFileName ,
252+ BaseTest . localBaseTestDataFolder + localFile
253+ ) . then ( ( result0 ) => {
254+ expect ( result0 . response . statusMessage ) . to . equal ( "OK" ) ;
255+
256+ const request1 = new model . GetParagraphsRequest ( {
257+ name : remoteFileName ,
258+ nodePath : "sections/0" ,
259+ folder : remoteDataFolder
260+ } ) ;
261+ const request2 = new model . GetParagraphsRequest ( {
262+ name : remoteFileName ,
263+ nodePath : "sections/0" ,
264+ folder : remoteDataFolder
265+ } ) ;
266+ const request3 = new model . InsertParagraphRequest ( {
267+ name : remoteFileName ,
268+ paragraph : new model . ParagraphInsert ( {
269+ text : "This is a new paragraph for your document"
270+ } ) ,
271+ nodePath : "sections/0" ,
272+ folder : remoteDataFolder
273+ } ) ;
274+ const request4 = new model . DeleteParagraphRequest ( {
275+ name : remoteFileName ,
276+ nodePath : "sections/0" ,
277+ index : 0 ,
278+ folder : remoteDataFolder
279+ } ) ;
280+
281+ // set dependency
282+ request4 . dependsOn ( request2 ) ;
283+ request2 . dependsOn ( request3 ) ;
284+ request3 . dependsOn ( request1 ) ;
285+
286+ return wordsApi . batch ( request1 , request2 , request3 , request4 )
287+ . then ( ( resultApi ) => {
288+ // Assert
289+ // expected order of request: 1, 3, 2, 4
290+ expect ( resultApi . response . statusCode ) . to . equal ( 200 ) ;
291+ expect ( resultApi . body [ 2 ] . paragraphs . paragraphLinkList . length ) . to . equal ( resultApi . body [ 0 ] . paragraphs . paragraphLinkList . length + 1 ) ;
292+ } ) ;
293+ } ) ;
294+ } ) ;
295+ } ) ;
296+ } ) ;
0 commit comments