1
1
import { Plugin } from 'flex-plugins-api-toolkit' ;
2
+ import { TwilioApiError , TwilioCliError } from 'flex-dev-utils' ;
2
3
3
4
import createTest from '../../../../framework' ;
4
5
import FlexPluginsArchivePlugin from '../../../../../commands/flex/plugins/archive/plugin' ;
5
6
6
7
describe ( 'Commands/Archive/FlexPluginsArchivePlugin' , ( ) => {
8
+ const serviceSid = 'ZS00000000000000000000000000000000' ;
9
+ const environment = { sid : 'ZE00000000000000000000000000000000' } ;
7
10
const plugin : Plugin = {
8
11
sid : 'FP00000000000000000000000000000' ,
9
12
name : 'plugin-name' ,
@@ -14,10 +17,20 @@ describe('Commands/Archive/FlexPluginsArchivePlugin', () => {
14
17
dateUpdated : '' ,
15
18
} ;
16
19
const archivePlugin = jest . fn ( ) ;
20
+ const describePlugin = jest . fn ( ) ;
21
+ const getServerlessSid = jest . fn ( ) ;
22
+ const deleteEnvironment = jest . fn ( ) ;
23
+ const getEnvironment = jest . fn ( ) ;
17
24
18
25
const mockPluginsApiToolkit = ( cmd : FlexPluginsArchivePlugin ) => {
19
26
// @ts -ignore
20
- jest . spyOn ( cmd , 'pluginsApiToolkit' , 'get' ) . mockReturnValue ( { archivePlugin } ) ;
27
+ jest . spyOn ( cmd , 'flexConfigurationClient' , 'get' ) . mockReturnValue ( { getServerlessSid } ) ;
28
+
29
+ // @ts -ignore
30
+ jest . spyOn ( cmd , 'pluginsApiToolkit' , 'get' ) . mockReturnValue ( { archivePlugin, describePlugin } ) ;
31
+
32
+ // @ts -ignore
33
+ jest . spyOn ( cmd , 'serverlessClient' , 'get' ) . mockReturnValue ( { deleteEnvironment, getEnvironment } ) ;
21
34
} ;
22
35
const createCmd = async ( ) => createTest ( FlexPluginsArchivePlugin ) ( '--name' , plugin . name ) ;
23
36
@@ -30,11 +43,112 @@ describe('Commands/Archive/FlexPluginsArchivePlugin', () => {
30
43
archivePlugin . mockResolvedValue ( plugin ) ;
31
44
mockPluginsApiToolkit ( cmd ) ;
32
45
46
+ getServerlessSid . mockResolvedValue ( serviceSid ) ;
47
+ getEnvironment . mockResolvedValue ( environment ) ;
48
+ deleteEnvironment . mockResolvedValue ( true ) ;
49
+
33
50
const result = await cmd . doArchive ( ) ;
34
51
35
52
expect ( result ) . toEqual ( plugin ) ;
36
53
expect ( cmd . pluginsApiToolkit . archivePlugin ) . toHaveBeenCalledTimes ( 1 ) ;
37
54
expect ( cmd . pluginsApiToolkit . archivePlugin ) . toHaveBeenCalledWith ( { name : plugin . name } ) ;
55
+ expect ( cmd . serverlessClient . deleteEnvironment ) . toHaveBeenCalledTimes ( 1 ) ;
56
+ expect ( cmd . serverlessClient . deleteEnvironment ) . toHaveBeenCalledWith ( serviceSid , environment . sid ) ;
57
+ } ) ;
58
+
59
+ it ( 'should quit if already archived and no serviceSid is found' , async ( done ) => {
60
+ const err = new TwilioApiError ( 20400 , 'message' , 400 ) ;
61
+
62
+ const cmd = await createCmd ( ) ;
63
+ mockPluginsApiToolkit ( cmd ) ;
64
+
65
+ archivePlugin . mockRejectedValue ( err ) ;
66
+ describePlugin . mockResolvedValue ( plugin ) ;
67
+ getServerlessSid . mockResolvedValue ( null ) ;
68
+
69
+ try {
70
+ await cmd . doArchive ( ) ;
71
+ } catch ( e ) {
72
+ expect ( e ) . toBeInstanceOf ( TwilioApiError ) ;
73
+ expect ( archivePlugin ) . toHaveBeenCalledTimes ( 1 ) ;
74
+ expect ( archivePlugin ) . toHaveBeenCalledWith ( { name : plugin . name } ) ;
75
+ expect ( archivePlugin ) . toHaveBeenCalledTimes ( 1 ) ;
76
+ expect ( archivePlugin ) . toHaveBeenCalledWith ( { name : plugin . name } ) ;
77
+ expect ( getServerlessSid ) . toHaveBeenCalledTimes ( 1 ) ;
78
+ done ( ) ;
79
+ }
80
+ } ) ;
81
+
82
+ it ( 'should quit if already archived and no environment is found' , async ( done ) => {
83
+ const err = new TwilioApiError ( 20400 , 'message' , 400 ) ;
84
+
85
+ const cmd = await createCmd ( ) ;
86
+ mockPluginsApiToolkit ( cmd ) ;
87
+
88
+ archivePlugin . mockRejectedValue ( err ) ;
89
+ describePlugin . mockResolvedValue ( plugin ) ;
90
+ getServerlessSid . mockResolvedValue ( serviceSid ) ;
91
+ getEnvironment . mockResolvedValue ( null ) ;
92
+
93
+ try {
94
+ await cmd . doArchive ( ) ;
95
+ } catch ( e ) {
96
+ expect ( e ) . toBeInstanceOf ( TwilioApiError ) ;
97
+ expect ( archivePlugin ) . toHaveBeenCalledTimes ( 1 ) ;
98
+ expect ( archivePlugin ) . toHaveBeenCalledWith ( { name : plugin . name } ) ;
99
+ expect ( archivePlugin ) . toHaveBeenCalledTimes ( 1 ) ;
100
+ expect ( archivePlugin ) . toHaveBeenCalledWith ( { name : plugin . name } ) ;
101
+ expect ( getServerlessSid ) . toHaveBeenCalledTimes ( 1 ) ;
102
+ expect ( getEnvironment ) . toHaveBeenCalledTimes ( 1 ) ;
103
+ done ( ) ;
104
+ }
105
+ } ) ;
106
+
107
+ it ( 'should quit if archive on plugins API is successful but environment cleanup is not' , async ( done ) => {
108
+ const cmd = await createCmd ( ) ;
109
+ mockPluginsApiToolkit ( cmd ) ;
110
+
111
+ archivePlugin . mockResolvedValue ( plugin ) ;
112
+ describePlugin . mockResolvedValue ( plugin ) ;
113
+ getServerlessSid . mockResolvedValue ( serviceSid ) ;
114
+ getEnvironment . mockResolvedValue ( environment ) ;
115
+ deleteEnvironment . mockResolvedValue ( false ) ;
116
+
117
+ try {
118
+ await cmd . doArchive ( ) ;
119
+ } catch ( e ) {
120
+ expect ( e ) . toBeInstanceOf ( TwilioCliError ) ;
121
+ expect ( archivePlugin ) . toHaveBeenCalledTimes ( 1 ) ;
122
+ expect ( archivePlugin ) . toHaveBeenCalledWith ( { name : plugin . name } ) ;
123
+ expect ( getServerlessSid ) . toHaveBeenCalledTimes ( 1 ) ;
124
+ expect ( getEnvironment ) . toHaveBeenCalledTimes ( 1 ) ;
125
+ expect ( deleteEnvironment ) . toHaveBeenCalledTimes ( 1 ) ;
126
+ expect ( deleteEnvironment ) . toHaveBeenCalledWith ( serviceSid , environment . sid ) ;
127
+ done ( ) ;
128
+ }
129
+ } ) ;
130
+
131
+ it ( 'should clean up environment if it still exists and plugin is already archived' , async ( ) => {
132
+ const err = new TwilioApiError ( 20400 , 'message' , 400 ) ;
133
+
134
+ const cmd = await createCmd ( ) ;
135
+ mockPluginsApiToolkit ( cmd ) ;
136
+
137
+ archivePlugin . mockRejectedValue ( err ) ;
138
+ describePlugin . mockResolvedValue ( plugin ) ;
139
+ getServerlessSid . mockResolvedValue ( serviceSid ) ;
140
+ getEnvironment . mockResolvedValue ( environment ) ;
141
+ deleteEnvironment . mockResolvedValue ( true ) ;
142
+
143
+ const result = await cmd . doArchive ( ) ;
144
+
145
+ expect ( result ) . toEqual ( plugin ) ;
146
+ expect ( archivePlugin ) . toHaveBeenCalledTimes ( 1 ) ;
147
+ expect ( archivePlugin ) . toHaveBeenCalledWith ( { name : plugin . name } ) ;
148
+ expect ( getServerlessSid ) . toHaveBeenCalledTimes ( 1 ) ;
149
+ expect ( getEnvironment ) . toHaveBeenCalledTimes ( 1 ) ;
150
+ expect ( deleteEnvironment ) . toHaveBeenCalledTimes ( 1 ) ;
151
+ expect ( deleteEnvironment ) . toHaveBeenCalledWith ( serviceSid , environment . sid ) ;
38
152
} ) ;
39
153
40
154
it ( 'should get name' , async ( ) => {
0 commit comments