@@ -44,27 +44,11 @@ test('Fails to publish entities', (t) => {
44
44
const publishStub = sinon . stub ( )
45
45
publishStub . onFirstCall ( ) . returns ( Promise . resolve ( { sys : { type : 'Asset' , publishedVersion : 2 } } ) )
46
46
const apiError = {
47
- message : 'Validation error' ,
48
47
status : 422 ,
49
- sys : {
50
- type : 'Error' ,
51
- id : 'UnresolvedLinks'
52
- } ,
53
48
details : {
54
49
errors : [
55
50
{
56
- name : 'notResolvable' ,
57
- link : {
58
- type : 'Link' ,
59
- linkType : 'Entry' ,
60
- id : 'linkedEntryId'
61
- } ,
62
- path : [
63
- 'fields' ,
64
- 'category' ,
65
- 'en-US' ,
66
- 0
67
- ]
51
+ name : 'notResolvable'
68
52
}
69
53
]
70
54
}
@@ -88,6 +72,41 @@ test('Fails to publish entities', (t) => {
88
72
} )
89
73
} )
90
74
75
+ test ( 'Queue does abort itself' , ( t ) => {
76
+ setup ( )
77
+ const publishStub = sinon . stub ( )
78
+ const apiError = {
79
+ status : 422 ,
80
+ details : {
81
+ errors : [
82
+ {
83
+ name : 'notResolvable'
84
+ }
85
+ ]
86
+ }
87
+ }
88
+ const errorValidation = new Error ( JSON . stringify ( apiError ) )
89
+ // First call resolves, others fail
90
+ publishStub . returns ( Promise . reject ( errorValidation ) )
91
+ publishStub . onFirstCall ( ) . returns ( Promise . resolve ( { sys : { type : 'Asset' , publishedVersion : 2 , id : '123' } } ) )
92
+ return publishEntities ( [
93
+ { sys : { id : '123' , type : 'asset' } , publish : publishStub } ,
94
+ { sys : { id : '456' , type : 'asset' } , publish : publishStub }
95
+ ] )
96
+ . then ( ( result ) => {
97
+ const logs = logMock . info . args . map ( ( args ) => args [ 0 ] )
98
+ t . equals ( publishStub . callCount , 3 , 'publishes the first, retries the second only once' )
99
+ t . equals ( errorBufferMock . push . callCount , 4 , 'logs 4 errors' )
100
+ t . equals ( errorBufferMock . push . lastCall . args [ 0 ] . message , 'Queue was not able to publish at least one entity. Aborting.' , 'Aborted queue with error' )
101
+ t . equals ( logs . filter ( ( log ) => log . includes ( 'Starting new publishing queue' ) ) . length , 2 , 'Starts queue twice' )
102
+ t . equals ( logs . filter ( ( log ) => log . includes ( 'Unable to resolve 456 (456)' ) ) . length , 2 , 'Is unable to resolve 456 twice' )
103
+ t . equals ( logs . filter ( ( log ) => log . includes ( 'Published Asset 123' ) ) . length , 1 , 'Is able to publish 123' )
104
+ t . equals ( result . filter ( ( entity ) => entity . sys . id === '123' ) . length , 1 , 'Result contains the published entity' )
105
+ teardown ( )
106
+ t . end ( )
107
+ } )
108
+ } )
109
+
91
110
test ( 'Unpublish entities' , ( t ) => {
92
111
setup ( )
93
112
const unpublishStub = sinon . stub ( ) . returns ( Promise . resolve ( { sys : { type : 'Asset' } } ) )
0 commit comments