@@ -7,80 +7,131 @@ chai.use(chaiAsPromised)
7
7
const { expect } = require ( 'chai' )
8
8
const sinon = require ( 'sinon' )
9
9
const DefinitionQueueUpgrader = require ( '../../../providers/upgrade/defUpgradeQueue' )
10
+ const MemoryQueue = require ( '../../../providers/upgrade/memoryQueueConfig' )
10
11
11
12
describe ( 'DefinitionQueueUpgrader' , ( ) => {
12
- const definition = { coordinates : 'test' , _meta : { schemaVersion : '1.0.0' } }
13
- let queue , upgrader
14
-
15
- beforeEach ( async ( ) => {
16
- const logger = { debug : sinon . stub ( ) }
17
- queue = {
18
- queue : sinon . stub ( ) . resolves ( ) ,
19
- initialize : sinon . stub ( ) . resolves ( )
20
- }
21
- const queueFactory = sinon . stub ( ) . returns ( queue )
22
- upgrader = new DefinitionQueueUpgrader ( { logger, queue : queueFactory } )
23
- } )
13
+ const logger = { debug : sinon . stub ( ) , error : sinon . stub ( ) }
24
14
25
- it ( 'returns an instance of DefinitionQueueUpgrader ', ( ) => {
26
- expect ( upgrader ) . to . be . an . instanceOf ( DefinitionQueueUpgrader )
27
- } )
15
+ describe ( 'Unit tests ', ( ) => {
16
+ const definition = { coordinates : 'test' , _meta : { schemaVersion : '1.0.0' } }
17
+ let queue , upgrader
28
18
29
- it ( 'sets and gets current schema version' , ( ) => {
30
- upgrader . currentSchema = '1.0.0'
31
- expect ( upgrader . currentSchema ) . to . equal ( '1.0.0' )
32
- } )
19
+ beforeEach ( async ( ) => {
20
+ queue = {
21
+ queue : sinon . stub ( ) . resolves ( ) ,
22
+ initialize : sinon . stub ( ) . resolves ( )
23
+ }
24
+ const queueFactory = sinon . stub ( ) . returns ( queue )
25
+ upgrader = new DefinitionQueueUpgrader ( { logger, queue : queueFactory } )
26
+ } )
33
27
34
- it ( 'initializes' , async ( ) => {
35
- await upgrader . initialize ( )
36
- expect ( queue . initialize . calledOnce ) . to . be . true
37
- } )
28
+ it ( 'returns an instance of DefinitionQueueUpgrader' , ( ) => {
29
+ expect ( upgrader ) . to . be . an . instanceOf ( DefinitionQueueUpgrader )
30
+ } )
38
31
39
- it ( 'connects to queue after setupProcessing' , async ( ) => {
40
- await upgrader . initialize ( )
41
- const definitionService = { currentSchema : '1.0.0' }
42
- const logger = { debug : sinon . stub ( ) }
43
- queue . dequeueMultiple = sinon . stub ( ) . resolves ( [ ] )
44
- upgrader . setupProcessing ( definitionService , logger , true )
45
- expect ( queue . dequeueMultiple . calledOnce ) . to . be . true
46
- } )
32
+ it ( 'sets and gets current schema version' , ( ) => {
33
+ upgrader . currentSchema = '1.0.0'
34
+ expect ( upgrader . currentSchema ) . to . equal ( '1.0.0' )
35
+ } )
47
36
48
- context ( 'validate' , ( ) => {
49
- it ( 'fails if current schema version is not set' , async ( ) => {
50
- await expect ( upgrader . validate ( definition ) ) . to . be . rejectedWith ( Error )
37
+ it ( 'initializes' , async ( ) => {
38
+ await upgrader . initialize ( )
39
+ expect ( queue . initialize . calledOnce ) . to . be . true
51
40
} )
52
41
53
- it ( 'fails if it is not initialized' , async ( ) => {
54
- upgrader . currentSchema = '1.0.0'
55
- const stale = { coordinates : 'test' , _meta : { schemaVersion : '0.0.1' } }
56
- await expect ( upgrader . validate ( stale ) ) . to . be . rejectedWith ( Error )
42
+ it ( 'connects to queue after setupProcessing' , async ( ) => {
43
+ await upgrader . initialize ( )
44
+ const definitionService = { currentSchema : '1.0.0' }
45
+ queue . dequeueMultiple = sinon . stub ( ) . resolves ( [ ] )
46
+ upgrader . setupProcessing ( definitionService , logger , true )
47
+ expect ( queue . dequeueMultiple . calledOnce ) . to . be . true
48
+ } )
49
+
50
+ context ( 'validate' , ( ) => {
51
+ it ( 'fails if current schema version is not set' , async ( ) => {
52
+ await expect ( upgrader . validate ( definition ) ) . to . be . rejectedWith ( Error )
53
+ } )
54
+
55
+ it ( 'fails if it is not initialized' , async ( ) => {
56
+ upgrader . currentSchema = '1.0.0'
57
+ const stale = { coordinates : 'test' , _meta : { schemaVersion : '0.0.1' } }
58
+ await expect ( upgrader . validate ( stale ) ) . to . be . rejectedWith ( Error )
59
+ } )
60
+ } )
61
+
62
+ context ( 'validate after set up' , ( ) => {
63
+ beforeEach ( async ( ) => {
64
+ await upgrader . initialize ( )
65
+ upgrader . currentSchema = '1.0.0'
66
+ } )
67
+
68
+ it ( 'does not queue null definition' , async ( ) => {
69
+ const result = await upgrader . validate ( null )
70
+ expect ( result ) . to . be . not . ok
71
+ expect ( queue . queue . called ) . to . be . false
72
+ } )
73
+
74
+ it ( 'does not queue an up-to-date definition' , async ( ) => {
75
+ const definition = { coordinates : 'test' , _meta : { schemaVersion : '1.0.0' } }
76
+ const result = await upgrader . validate ( definition )
77
+ expect ( result ) . to . deep . equal ( definition )
78
+ expect ( queue . queue . called ) . to . be . false
79
+ } )
80
+
81
+ it ( 'queues and returns a stale definition' , async ( ) => {
82
+ const definition = { coordinates : 'test' , _meta : { schemaVersion : '0.0.1' } }
83
+ const result = await upgrader . validate ( definition )
84
+ expect ( result ) . to . deep . equal ( definition )
85
+ expect ( queue . queue . calledOnce ) . to . be . true
86
+ } )
87
+
88
+ it ( 'logs erorr when queueing throws' , async ( ) => {
89
+ const staleDef = {
90
+ coordinates : {
91
+ type : 'npm' ,
92
+ provider : 'npmjs' ,
93
+ name : 'lodash' ,
94
+ revision : '4.17.11'
95
+ } ,
96
+ _meta : { schemaVersion : '0.0.1' }
97
+ }
98
+ queue . queue . rejects ( new Error ( 'test' ) )
99
+ const result = await upgrader . validate ( staleDef )
100
+ expect ( result ) . to . deep . equal ( staleDef )
101
+ expect ( logger . error . calledOnce ) . to . be . true
102
+ const { coordinates } = logger . error . args [ 0 ] [ 1 ]
103
+ expect ( coordinates ) . to . eq ( 'npm/npmjs/-/lodash/4.17.11' )
104
+ } )
57
105
} )
58
106
} )
59
107
60
- context ( 'validate after set up' , ( ) => {
108
+ describe ( 'Integration tests' , ( ) => {
109
+ let queue , upgrader
110
+
61
111
beforeEach ( async ( ) => {
112
+ queue = MemoryQueue ( )
113
+ upgrader = new DefinitionQueueUpgrader ( { logger, queue : sinon . stub ( ) . returns ( queue ) } )
62
114
await upgrader . initialize ( )
63
115
upgrader . currentSchema = '1.0.0'
64
116
} )
65
117
66
- it ( 'does not queue null definition' , async ( ) => {
67
- const result = await upgrader . validate ( null )
68
- expect ( result ) . to . be . not . ok
69
- expect ( queue . queue . called ) . to . be . false
70
- } )
71
-
72
- it ( 'does not queue an up-to-date definition' , async ( ) => {
73
- const definition = { coordinates : 'test' , _meta : { schemaVersion : '1.0.0' } }
74
- const result = await upgrader . validate ( definition )
75
- expect ( result ) . to . deep . equal ( definition )
76
- expect ( queue . queue . called ) . to . be . false
77
- } )
118
+ it ( 'queues the correct message that can be decoded correctly' , async ( ) => {
119
+ const staleDef = {
120
+ coordinates : {
121
+ type : 'npm' ,
122
+ provider : 'npmjs' ,
123
+ name : 'lodash' ,
124
+ revision : '4.17.11'
125
+ } ,
126
+ _meta : { schemaVersion : '0.0.1' }
127
+ }
128
+ const result = await upgrader . validate ( staleDef )
129
+ expect ( result ) . to . deep . equal ( staleDef )
130
+ expect ( queue . data . length ) . to . equal ( 1 )
78
131
79
- it ( 'queues and returns a stale definition' , async ( ) => {
80
- const definition = { coordinates : 'test' , _meta : { schemaVersion : '0.0.1' } }
81
- const result = await upgrader . validate ( definition )
82
- expect ( result ) . to . deep . equal ( definition )
83
- expect ( queue . queue . calledOnce ) . to . be . true
132
+ const message = await queue . dequeue ( )
133
+ const coordinates = message . data . coordinates
134
+ expect ( coordinates ) . to . deep . equal ( staleDef . coordinates )
84
135
} )
85
136
} )
86
137
} )
0 commit comments