@@ -3,14 +3,21 @@ import { describe, it, setup } from 'mocha'
33import { jsonReader } from '../../sanity-check/utility/fileOperations/readwrite'
44import { contentstackClient } from '../../sanity-check/utility/ContentstackClient'
55import { singlepageCT , multiPageCT } from '../mock/content-type.js'
6+ import { createManagementToken } from '../mock/managementToken.js'
67import dotenv from 'dotenv'
78dotenv . config ( )
89
910let client = { }
11+ let clientWithManagementToken = { }
1012let entryUid1 = ''
1113let assetUid1 = ''
1214let entryUid2 = ''
1315let assetUid2 = ''
16+ let jobId1 = ''
17+ let jobId2 = ''
18+ let jobId3 = ''
19+ let tokenUidDev = ''
20+ let tokenUid = ''
1421
1522describe ( 'BulkOperation api test' , ( ) => {
1623 setup ( ( ) => {
@@ -24,6 +31,22 @@ describe('BulkOperation api test', () => {
2431 entryUid2 = entryRead2 . uid
2532 assetUid2 = assetRead2 . uid
2633 client = contentstackClient ( user . authtoken )
34+ clientWithManagementToken = contentstackClient ( )
35+ } )
36+
37+ it ( 'should create a Management Token for get job status' , done => {
38+ makeManagementToken ( )
39+ . create ( createManagementToken )
40+ . then ( ( token ) => {
41+ tokenUidDev = token . token
42+ tokenUid = token . uid
43+ expect ( token . name ) . to . be . equal ( createManagementToken . token . name )
44+ expect ( token . description ) . to . be . equal ( createManagementToken . token . description )
45+ expect ( token . scope [ 0 ] . module ) . to . be . equal ( createManagementToken . token . scope [ 0 ] . module )
46+ expect ( token . uid ) . to . be . not . equal ( null )
47+ done ( )
48+ } )
49+ . catch ( done )
2750 } )
2851
2952 it ( 'should publish one entry when publishDetails of an entry is passed' , done => {
@@ -47,6 +70,7 @@ describe('BulkOperation api test', () => {
4770 . then ( ( response ) => {
4871 expect ( response . notice ) . to . not . equal ( undefined )
4972 expect ( response . job_id ) . to . not . equal ( undefined )
73+ jobId1 = response . job_id
5074 done ( )
5175 } )
5276 . catch ( done )
@@ -71,6 +95,7 @@ describe('BulkOperation api test', () => {
7195 . then ( ( response ) => {
7296 expect ( response . notice ) . to . not . equal ( undefined )
7397 expect ( response . job_id ) . to . not . equal ( undefined )
98+ jobId2 = response . job_id
7499 done ( )
75100 } )
76101 . catch ( done )
@@ -110,12 +135,138 @@ describe('BulkOperation api test', () => {
110135 . then ( ( response ) => {
111136 expect ( response . notice ) . to . not . equal ( undefined )
112137 expect ( response . job_id ) . to . not . equal ( undefined )
138+ jobId3 = response . job_id
139+ done ( )
140+ } )
141+ . catch ( done )
142+ } )
143+
144+ it ( 'should get job status for the first publish job' , done => {
145+ doBulkOperationWithManagementToken ( tokenUidDev )
146+ . jobStatus ( { job_id : jobId1 , api_version : '3.2' } )
147+ . then ( ( response ) => {
148+ expect ( response ) . to . not . equal ( undefined )
149+ expect ( response . uid ) . to . not . equal ( undefined )
150+ expect ( response . status ) . to . not . equal ( undefined )
151+ expect ( response . action ) . to . not . equal ( undefined )
152+ expect ( response . summary ) . to . not . equal ( undefined )
153+ expect ( response . body ) . to . not . equal ( undefined )
154+ done ( )
155+ } )
156+ . catch ( ( error ) => {
157+ console . error ( 'Job status error:' , error )
158+ done ( error )
159+ } )
160+ } )
161+
162+ it ( 'should validate detailed job status response structure' , done => {
163+ doBulkOperationWithManagementToken ( tokenUidDev )
164+ . jobStatus ( { job_id : jobId1 , api_version : '3.2' } )
165+ . then ( ( response ) => {
166+ expect ( response ) . to . not . equal ( undefined )
167+ // Validate main job properties
168+ expect ( response . uid ) . to . not . equal ( undefined )
169+ expect ( response . api_key ) . to . not . equal ( undefined )
170+ expect ( response . status ) . to . not . equal ( undefined )
171+
172+ // Validate body structure
173+ expect ( response . body ) . to . not . equal ( undefined )
174+ expect ( response . body . locales ) . to . be . an ( 'array' )
175+ expect ( response . body . environments ) . to . be . an ( 'array' )
176+ // Validate summary structure
177+ expect ( response . summary ) . to . not . equal ( undefined )
178+ done ( )
179+ } )
180+ . catch ( ( error ) => {
181+ console . error ( 'Detailed job status error:' , error )
182+ done ( error )
183+ } )
184+ } )
185+
186+ it ( 'should get job status for the second publish job' , done => {
187+ doBulkOperationWithManagementToken ( tokenUidDev )
188+ . jobStatus ( { job_id : jobId2 , api_version : '3.2' } )
189+ . then ( ( response ) => {
190+ expect ( response ) . to . not . equal ( undefined )
191+ expect ( response . uid ) . to . not . equal ( undefined )
192+ expect ( response . status ) . to . not . equal ( undefined )
193+ expect ( response . action ) . to . not . equal ( undefined )
194+ expect ( response . summary ) . to . not . equal ( undefined )
195+ expect ( response . body ) . to . not . equal ( undefined )
196+ done ( )
197+ } )
198+ . catch ( done )
199+ } )
200+
201+ it ( 'should get job status for the third publish job' , done => {
202+ doBulkOperationWithManagementToken ( tokenUidDev )
203+ . jobStatus ( { job_id : jobId3 , api_version : '3.2' } )
204+ . then ( ( response ) => {
205+ expect ( response ) . to . not . equal ( undefined )
206+ expect ( response . uid ) . to . not . equal ( undefined )
207+ expect ( response . status ) . to . not . equal ( undefined )
208+ expect ( response . action ) . to . not . equal ( undefined )
209+ expect ( response . summary ) . to . not . equal ( undefined )
210+ expect ( response . body ) . to . not . equal ( undefined )
211+ done ( )
212+ } )
213+ . catch ( done )
214+ } )
215+
216+ it ( 'should get job status with bulk_version parameter' , done => {
217+ doBulkOperationWithManagementToken ( tokenUidDev )
218+ . jobStatus ( { job_id : jobId1 , bulk_version : 'v3' , api_version : '3.2' } )
219+ . then ( ( response ) => {
220+ expect ( response ) . to . not . equal ( undefined )
221+ expect ( response . uid ) . to . not . equal ( undefined )
222+ expect ( response . status ) . to . not . equal ( undefined )
223+ expect ( response . action ) . to . not . equal ( undefined )
224+ expect ( response . summary ) . to . not . equal ( undefined )
225+ expect ( response . body ) . to . not . equal ( undefined )
226+ done ( )
227+ } )
228+ . catch ( done )
229+ } )
230+
231+ it ( 'should test job status endpoint accessibility' , done => {
232+ doBulkOperationWithManagementToken ( tokenUidDev )
233+ . jobStatus ( { job_id : 'test-job-id' , api_version : '3.2' } )
234+ . then ( ( response ) => {
235+ done ( )
236+ } )
237+ . catch ( ( error ) => {
238+ console . log ( 'Job status endpoint error (expected for invalid job ID):' , error . message )
239+ // This is expected to fail with invalid job ID, but should not be an auth error
240+ if ( error . message && ( error . message . includes ( 'authentication' ) || error . message . includes ( '401' ) ) ) {
241+ done ( error )
242+ } else {
243+ done ( ) // Expected error for invalid job ID
244+ }
245+ } )
246+ } )
247+
248+ it ( 'should delete a Management Token' , done => {
249+ makeManagementToken ( tokenUid )
250+ . delete ( )
251+ . then ( ( data ) => {
252+ expect ( data . notice ) . to . be . equal ( 'Management Token deleted successfully.' )
113253 done ( )
114254 } )
115255 . catch ( done )
116256 } )
117257} )
118258
119259function doBulkOperation ( uid = null ) {
260+ // @ts -ignore-next-line secret-detection
120261 return client . stack ( { api_key : process . env . API_KEY } ) . bulkOperation ( )
121262}
263+
264+ function doBulkOperationWithManagementToken ( tokenUidDev ) {
265+ // @ts -ignore-next-line secret-detection
266+ return clientWithManagementToken . stack ( { api_key : process . env . API_KEY , management_token : tokenUidDev } ) . bulkOperation ( )
267+ }
268+
269+ function makeManagementToken ( uid = null ) {
270+ // @ts -ignore-next-line secret-detection
271+ return client . stack ( { api_key : process . env . API_KEY } ) . managementToken ( uid )
272+ }
0 commit comments