@@ -6,13 +6,20 @@ const sinon = require('sinon')
6
6
const { QueueHandler, DefinitionUpgrader } = require ( '../../../providers/upgrade/process' )
7
7
8
8
describe ( 'Definition Upgrade Queue Processing' , ( ) => {
9
+ let logger
10
+
11
+ beforeEach ( ( ) => {
12
+ logger = {
13
+ info : sinon . stub ( ) ,
14
+ error : sinon . stub ( ) ,
15
+ debug : sinon . stub ( )
16
+ }
17
+ } )
18
+
9
19
describe ( 'QueueHandler' , ( ) => {
10
- let logger , queue , messageHandler , handler
20
+ let queue , messageHandler , handler
21
+
11
22
beforeEach ( ( ) => {
12
- logger = {
13
- info : sinon . stub ( ) ,
14
- error : sinon . stub ( )
15
- }
16
23
queue = {
17
24
dequeueMultiple : sinon . stub ( ) ,
18
25
delete : sinon . stub ( ) . resolves ( )
@@ -23,35 +30,45 @@ describe('Definition Upgrade Queue Processing', () => {
23
30
handler = new QueueHandler ( queue , logger , messageHandler )
24
31
} )
25
32
26
- it ( 'should return an instance of QueueHandler' , ( ) => {
33
+ it ( 'returns an instance of QueueHandler' , ( ) => {
27
34
expect ( handler ) . to . be . an . instanceOf ( QueueHandler )
28
35
} )
29
36
30
- it ( 'should work on a queue' , ( ) => {
37
+ it ( 'works on a queue' , ( ) => {
31
38
queue . dequeueMultiple . resolves ( [ ] )
32
39
handler . work ( true )
33
40
expect ( queue . dequeueMultiple . calledOnce ) . to . be . true
34
41
expect ( messageHandler . processMessage . notCalled ) . to . be . true
35
42
expect ( queue . delete . notCalled ) . to . be . true
36
43
} )
37
44
38
- it ( 'should process one message' , async ( ) => {
45
+ it ( 'processes one message' , async ( ) => {
39
46
queue . dequeueMultiple . resolves ( [ { message : 'test' } ] )
40
47
await handler . work ( true )
41
48
expect ( queue . dequeueMultiple . calledOnce ) . to . be . true
42
49
expect ( messageHandler . processMessage . calledOnce ) . to . be . true
43
50
expect ( queue . delete . calledOnce ) . to . be . true
44
51
} )
45
52
46
- it ( 'should process multiple messages' , async ( ) => {
53
+ it ( 'processes multiple messages' , async ( ) => {
47
54
queue . dequeueMultiple . resolves ( [ { message : 'testA' } , { message : 'testB' } ] )
48
55
await handler . work ( true )
49
56
expect ( queue . dequeueMultiple . calledOnce ) . to . be . true
50
57
expect ( messageHandler . processMessage . calledTwice ) . to . be . true
51
58
expect ( queue . delete . calledTwice ) . to . be . true
52
59
} )
53
60
54
- it ( 'should log error and not delete the message' , async ( ) => {
61
+ it ( 'handles if error is thrown' , async ( ) => {
62
+ queue . dequeueMultiple . resolves ( [ { message : 'testA' } ] )
63
+ messageHandler . processMessage = sinon . stub ( ) . throws ( )
64
+ await handler . work ( true )
65
+ expect ( queue . dequeueMultiple . calledOnce ) . to . be . true
66
+ expect ( messageHandler . processMessage . calledOnce ) . to . be . true
67
+ expect ( queue . delete . called ) . to . be . false
68
+ expect ( logger . error . calledOnce ) . to . be . true
69
+ } )
70
+
71
+ it ( 'handles both sucessful and unsucessful messages' , async ( ) => {
55
72
queue . dequeueMultiple . resolves ( [ { message : 'testA' } , { message : 'testB' } ] )
56
73
messageHandler . processMessage = sinon . stub ( ) . onFirstCall ( ) . throws ( ) . onSecondCall ( ) . resolves ( )
57
74
await handler . work ( true )
@@ -63,13 +80,10 @@ describe('Definition Upgrade Queue Processing', () => {
63
80
} )
64
81
65
82
describe ( 'DefinitionUpgrader' , ( ) => {
66
- const definition = { coordinates : 'pypi/pypi/-/test/revision' }
67
- let logger , definitionService , versionChecker , upgrader
83
+ const definition = Object . freeze ( { coordinates : 'pypi/pypi/-/test/revision' } )
84
+ let definitionService , versionChecker , upgrader
85
+
68
86
beforeEach ( ( ) => {
69
- logger = {
70
- info : sinon . stub ( ) ,
71
- debug : sinon . stub ( )
72
- }
73
87
definitionService = {
74
88
getStored : sinon . stub ( ) ,
75
89
computeStoreAndCurate : sinon . stub ( ) . resolves ( )
@@ -80,7 +94,7 @@ describe('Definition Upgrade Queue Processing', () => {
80
94
upgrader = new DefinitionUpgrader ( definitionService , logger , versionChecker )
81
95
} )
82
96
83
- it ( 'should recompute a definition' , async ( ) => {
97
+ it ( 'recomputes a definition, if a definition is not up-to-date ' , async ( ) => {
84
98
definitionService . getStored . resolves ( definition )
85
99
versionChecker . validate . resolves ( )
86
100
@@ -90,7 +104,7 @@ describe('Definition Upgrade Queue Processing', () => {
90
104
expect ( definitionService . computeStoreAndCurate . calledOnce ) . to . be . true
91
105
} )
92
106
93
- it ( 'should skip compute when a definition is up-to-date' , async ( ) => {
107
+ it ( 'skips compute if a definition is up-to-date' , async ( ) => {
94
108
definitionService . getStored . resolves ( definition )
95
109
versionChecker . validate . resolves ( definition )
96
110
@@ -99,5 +113,22 @@ describe('Definition Upgrade Queue Processing', () => {
99
113
expect ( versionChecker . validate . calledOnce ) . to . be . true
100
114
expect ( definitionService . computeStoreAndCurate . notCalled ) . to . be . true
101
115
} )
116
+
117
+ it ( 'computes if a definition does not exist' , async ( ) => {
118
+ definitionService . getStored . resolves ( )
119
+ versionChecker . validate . resolves ( )
120
+
121
+ await upgrader . processMessage ( { data : { coordinates : 'pypi/pypi/-/test/revision' } } )
122
+ expect ( definitionService . getStored . calledOnce ) . to . be . true
123
+ expect ( versionChecker . validate . calledOnce ) . to . be . true
124
+ expect ( definitionService . computeStoreAndCurate . calledOnce ) . to . be . true
125
+ } )
126
+
127
+ it ( 'skips if there is no coordinates' , async ( ) => {
128
+ await upgrader . processMessage ( { data : { } } )
129
+ expect ( definitionService . getStored . notCalled ) . to . be . true
130
+ expect ( versionChecker . validate . notCalled ) . to . be . true
131
+ expect ( definitionService . computeStoreAndCurate . notCalled ) . to . be . true
132
+ } )
102
133
} )
103
134
} )
0 commit comments