@hexonet/semantic-release-whmcs 4.0.2 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -25,14 +25,14 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/53</span>
28
+ <span class='fraction'>0/28</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/6</span>
35
+ <span class='fraction'>0/2</span>
36
36
  </div>
37
37
 
38
38
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/52</span>
49
+ <span class='fraction'>0/27</span>
50
50
  </div>
51
51
 
52
52
 
@@ -108,41 +108,7 @@
108
108
  <a name='L43'></a><a href='#L43'>43</a>
109
109
  <a name='L44'></a><a href='#L44'>44</a>
110
110
  <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
111
+ <a name='L46'></a><a href='#L46'>46</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
146
112
  <span class="cline-any cline-no">&nbsp;</span>
147
113
  <span class="cline-any cline-no">&nbsp;</span>
148
114
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -150,154 +116,86 @@
150
116
  <span class="cline-any cline-neutral">&nbsp;</span>
151
117
  <span class="cline-any cline-neutral">&nbsp;</span>
152
118
  <span class="cline-any cline-no">&nbsp;</span>
153
- <span class="cline-any cline-neutral">&nbsp;</span>
154
- <span class="cline-any cline-neutral">&nbsp;</span>
155
- <span class="cline-any cline-no">&nbsp;</span>
156
- <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-no">&nbsp;</span>
158
119
  <span class="cline-any cline-no">&nbsp;</span>
159
120
  <span class="cline-any cline-no">&nbsp;</span>
160
121
  <span class="cline-any cline-neutral">&nbsp;</span>
161
122
  <span class="cline-any cline-no">&nbsp;</span>
162
123
  <span class="cline-any cline-no">&nbsp;</span>
163
- <span class="cline-any cline-neutral">&nbsp;</span>
164
124
  <span class="cline-any cline-no">&nbsp;</span>
165
125
  <span class="cline-any cline-no">&nbsp;</span>
166
126
  <span class="cline-any cline-neutral">&nbsp;</span>
167
127
  <span class="cline-any cline-no">&nbsp;</span>
168
- <span class="cline-any cline-no">&nbsp;</span>
169
128
  <span class="cline-any cline-neutral">&nbsp;</span>
170
129
  <span class="cline-any cline-no">&nbsp;</span>
171
130
  <span class="cline-any cline-no">&nbsp;</span>
172
- <span class="cline-any cline-no">&nbsp;</span>
173
- <span class="cline-any cline-no">&nbsp;</span>
174
- <span class="cline-any cline-no">&nbsp;</span>
175
- <span class="cline-any cline-no">&nbsp;</span>
176
- <span class="cline-any cline-no">&nbsp;</span>
177
- <span class="cline-any cline-no">&nbsp;</span>
178
- <span class="cline-any cline-no">&nbsp;</span>
179
- <span class="cline-any cline-no">&nbsp;</span>
180
- <span class="cline-any cline-no">&nbsp;</span>
181
- <span class="cline-any cline-no">&nbsp;</span>
182
131
  <span class="cline-any cline-neutral">&nbsp;</span>
183
132
  <span class="cline-any cline-no">&nbsp;</span>
184
133
  <span class="cline-any cline-no">&nbsp;</span>
185
134
  <span class="cline-any cline-no">&nbsp;</span>
186
- <span class="cline-any cline-neutral">&nbsp;</span>
187
- <span class="cline-any cline-no">&nbsp;</span>
188
- <span class="cline-any cline-no">&nbsp;</span>
189
135
  <span class="cline-any cline-no">&nbsp;</span>
190
136
  <span class="cline-any cline-no">&nbsp;</span>
191
137
  <span class="cline-any cline-no">&nbsp;</span>
192
138
  <span class="cline-any cline-neutral">&nbsp;</span>
193
139
  <span class="cline-any cline-neutral">&nbsp;</span>
194
140
  <span class="cline-any cline-neutral">&nbsp;</span>
195
- <span class="cline-any cline-no">&nbsp;</span>
196
- <span class="cline-any cline-no">&nbsp;</span>
197
- <span class="cline-any cline-no">&nbsp;</span>
198
- <span class="cline-any cline-no">&nbsp;</span>
199
- <span class="cline-any cline-no">&nbsp;</span>
200
- <span class="cline-any cline-no">&nbsp;</span>
201
- <span class="cline-any cline-neutral">&nbsp;</span>
202
- <span class="cline-any cline-neutral">&nbsp;</span>
203
141
  <span class="cline-any cline-neutral">&nbsp;</span>
204
142
  <span class="cline-any cline-neutral">&nbsp;</span>
205
- <span class="cline-any cline-no">&nbsp;</span>
206
- <span class="cline-any cline-no">&nbsp;</span>
207
143
  <span class="cline-any cline-neutral">&nbsp;</span>
208
144
  <span class="cline-any cline-no">&nbsp;</span>
209
145
  <span class="cline-any cline-no">&nbsp;</span>
210
- <span class="cline-any cline-no">&nbsp;</span>
211
146
  <span class="cline-any cline-neutral">&nbsp;</span>
212
147
  <span class="cline-any cline-no">&nbsp;</span>
213
148
  <span class="cline-any cline-no">&nbsp;</span>
214
149
  <span class="cline-any cline-no">&nbsp;</span>
215
150
  <span class="cline-any cline-neutral">&nbsp;</span>
216
151
  <span class="cline-any cline-neutral">&nbsp;</span>
217
- <span class="cline-any cline-neutral">&nbsp;</span>
218
- <span class="cline-any cline-no">&nbsp;</span>
219
152
  <span class="cline-any cline-no">&nbsp;</span>
220
153
  <span class="cline-any cline-no">&nbsp;</span>
221
- <span class="cline-any cline-neutral">&nbsp;</span>
222
154
  <span class="cline-any cline-no">&nbsp;</span>
223
155
  <span class="cline-any cline-neutral">&nbsp;</span>
224
156
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const debug = <span class="cstat-no" title="statement not covered" >require('debug')('semantic-release:whmcs')</span>
225
- const resolveConfig = <span class="cstat-no" title="statement not covered" >require('./resolve-config')</span>
226
157
  const puppet = <span class="cstat-no" title="statement not covered" >require('./puppet')</span>
158
+ const path = <span class="cstat-no" title="statement not covered" >require('path')</span>
227
159
  &nbsp;
228
160
  /**
229
161
  * A method to publish the module update on whmcs market place
230
162
  */
231
163
  <span class="cstat-no" title="statement not covered" >module.exports = <span class="fstat-no" title="function not covered" >as</span>ync (pluginConfig, context) =&gt; {</span>
232
- const {
233
- logger
234
- } = <span class="cstat-no" title="statement not covered" >context</span>
164
+ const sep = <span class="cstat-no" title="statement not covered" >'+++++++++++++++++++++++++++++++++++++++++++++++++++'</span>
165
+ const out = <span class="cstat-no" title="statement not covered" >`\n${sep}\n${path.basename(__filename)}\n${sep}\n`</span>
235
166
  &nbsp;
236
- let success = <span class="cstat-no" title="statement not covered" >true</span>
237
- const { whmcsLOGIN, whmcsPASSWORD, whmcsPRODUCTID, withHEAD, DEBUG } = <span class="cstat-no" title="statement not covered" >resolveConfig(context)</span>
238
- const { gotoOpts, navOpts, selectorOpts, page } = <span class="cstat-no" title="statement not covered" >await puppet(DEBUG, withHEAD, logger)</span>
239
- &nbsp;
240
- <span class="cstat-no" title="statement not covered" > debug(`WHMCS Marketplace Product ID: ${whmcsPRODUCTID}`)</span>
241
- <span class="cstat-no" title="statement not covered" > logger.log(`WHMCS Marketplace Product ID: ${whmcsPRODUCTID}`)</span>
242
- &nbsp;
243
- const wmbase = <span class="cstat-no" title="statement not covered" >'https://marketplace.whmcs.com'</span>
244
- let url = <span class="cstat-no" title="statement not covered" >`${wmbase}/user/login`</span>
167
+ const püppi = <span class="cstat-no" title="statement not covered" >await puppet(context)</span>
168
+ const result = <span class="cstat-no" title="statement not covered" >await püppi.login()</span>
169
+ <span class="cstat-no" title="statement not covered" > if (!result) {</span>
170
+ <span class="cstat-no" title="statement not covered" > return result</span>
171
+ }
172
+ const { page, gotoOpts, selectorOpts, productid, urlbase } = <span class="cstat-no" title="statement not covered" >püppi.config</span>
245
173
  &nbsp;
174
+ let marketplaceVersions = <span class="cstat-no" title="statement not covered" >[]</span>
246
175
  <span class="cstat-no" title="statement not covered" > try {</span>
176
+ // scrap versions from WHMCS marketplace
177
+ const url = <span class="cstat-no" title="statement not covered" >`${urlbase}/product/${productid}/edit#versions`</span>
247
178
  <span class="cstat-no" title="statement not covered" > await page.goto(url, gotoOpts)</span>
248
- // do login
249
- const selector = <span class="cstat-no" title="statement not covered" >'div.login-leftcol form button[type="submit"]'</span>
179
+ <span class="cstat-no" title="statement not covered" > debug(`${out}product page loaded at %s`, url)</span>
180
+ const selector = <span class="cstat-no" title="statement not covered" >'div#versions tr strong'</span>
250
181
  <span class="cstat-no" title="statement not covered" > await page.waitForSelector(selector, selectorOpts)</span>
251
- <span class="cstat-no" title="statement not covered" > debug('login form loaded at %s', url)</span>
252
- <span class="cstat-no" title="statement not covered" > await page.type('#email', whmcsLOGIN)</span>
253
- <span class="cstat-no" title="statement not covered" > await page.type('#password', whmcsPASSWORD)</span>
254
- <span class="cstat-no" title="statement not covered" > debug('WHMCS Marketplace credentials entered')</span>
255
- const nav = <span class="cstat-no" title="statement not covered" >page.waitForNavigation(navOpts)</span>
256
- <span class="cstat-no" title="statement not covered" > await page.hover(selector)</span>
257
- <span class="cstat-no" title="statement not covered" > await page.click(selector)</span>
258
- <span class="cstat-no" title="statement not covered" > await nav</span>
259
- <span class="cstat-no" title="statement not covered" > debug('Login form successfully submitted.')</span>
260
- <span class="cstat-no" title="statement not covered" > logger.log('WHMCS Marketplace Login Form successfully submitted.')</span>
261
- } catch (error) {
262
- <span class="cstat-no" title="statement not covered" > debug('WHMCS Marketplace login failed.', error.message)</span>
263
- <span class="cstat-no" title="statement not covered" > logger.error('WHMCS Marketplace login failed.', error.message)</span>
264
- <span class="cstat-no" title="statement not covered" > success = false</span>
265
- }
266
- let marketplaceVersions = <span class="cstat-no" title="statement not covered" >false</span>
267
- <span class="cstat-no" title="statement not covered" > if (success) {</span>
268
- <span class="cstat-no" title="statement not covered" > try {</span>
269
- <span class="cstat-no" title="statement not covered" > if (!parseInt(whmcsPRODUCTID, 10)) {</span>
270
- <span class="cstat-no" title="statement not covered" > return false</span>
271
- }
272
- &nbsp;
273
- // scrap versions from WHMCS marketplace
274
- <span class="cstat-no" title="statement not covered" > url = `${wmbase}/product/${whmcsPRODUCTID}/edit#versions`</span>
275
- <span class="cstat-no" title="statement not covered" > await page.goto(url, gotoOpts)</span>
276
- <span class="cstat-no" title="statement not covered" > debug('product page loaded at %s', url)</span>
277
- const selector = <span class="cstat-no" title="statement not covered" >'div#versions tr strong'</span>
278
- <span class="cstat-no" title="statement not covered" > await page.waitForSelector(selector, selectorOpts)</span>
279
- <span class="cstat-no" title="statement not covered" > debug('product version table found')</span>
280
- /* istanbul ignore next */
281
- marketplaceVersions = await page.$$eval('div#versions tr td strong', tds =&gt; tds.map((td) =&gt; {
182
+ <span class="cstat-no" title="statement not covered" > debug('product version table found')</span>
183
+ /* istanbul ignore next */
184
+ marketplaceVersions = await page.$$eval(selector, (tds) =&gt;
185
+ tds.map((td) =&gt; {
282
186
  return td.innerText.substring(8)
283
- }))
284
- <span class="cstat-no" title="statement not covered" > marketplaceVersions.reverse()</span>
285
- <span class="cstat-no" title="statement not covered" > marketplaceVersions.forEach(<span class="fstat-no" title="function not covered" >v </span>=&gt; <span class="cstat-no" title="statement not covered" >logger.log(`Detected WHMCS version ${v}`))</span></span>
286
- &nbsp;
287
- <span class="cstat-no" title="statement not covered" > debug('publishing new product version succeeded.')</span>
288
- <span class="cstat-no" title="statement not covered" > logger.log('WHMCS Marketplace publishing new product version succeeded.')</span>
289
- <span class="cstat-no" title="statement not covered" > success = true</span>
290
- } catch (error) {
291
- <span class="cstat-no" title="statement not covered" > debug('publishing new product version failed.', error.message)</span>
292
- <span class="cstat-no" title="statement not covered" > logger.error('WHMCS Marketplace publishing new product version failed.', error.message)</span>
293
- <span class="cstat-no" title="statement not covered" > success = false</span>
294
- }
187
+ })
188
+ )
189
+ <span class="cstat-no" title="statement not covered" > marketplaceVersions.reverse()</span>
190
+ <span class="cstat-no" title="statement not covered" > marketplaceVersions.forEach(<span class="fstat-no" title="function not covered" >(v</span>) =&gt; <span class="cstat-no" title="statement not covered" >debug(`Detected WHMCS version ${v}`))</span></span>
191
+ } catch (error) {
192
+ <span class="cstat-no" title="statement not covered" > debug('Publishing new product version failed.', error.message)</span>
193
+ <span class="cstat-no" title="statement not covered" > await page.browser().close()</span>
194
+ <span class="cstat-no" title="statement not covered" > return false</span>
295
195
  }
296
196
  &nbsp;
197
+ <span class="cstat-no" title="statement not covered" > debug('Publishing new product version succeeded.')</span>
297
198
  <span class="cstat-no" title="statement not covered" > await page.browser().close()</span>
298
- <span class="cstat-no" title="statement not covered" > if (!success) {</span>
299
- <span class="cstat-no" title="statement not covered" > return false</span>
300
- }
301
199
  <span class="cstat-no" title="statement not covered" > return marketplaceVersions</span>
302
200
  }
303
201
  &nbsp;</pre></td></tr></table></pre>
@@ -307,7 +205,7 @@ const puppet = <span class="cstat-no" title="statement not covered" >require('./
307
205
  <div class='footer quiet pad2 space-top1 center small'>
308
206
  Code coverage generated by
309
207
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
310
- at Wed Jun 29 2022 13:20:57 GMT+0000 (Coordinated Universal Time)
208
+ at 2022-08-09T11:01:27.229Z
311
209
  </div>
312
210
  <script src="../prettify.js"></script>
313
211
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.03% </span>
26
+ <span class="strong">87.5% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>47/54</span>
28
+ <span class='fraction'>28/32</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">87.03% </span>
47
+ <span class="strong">87.5% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>47/54</span>
49
+ <span class='fraction'>28/32</span>
50
50
  </div>
51
51
 
52
52
 
@@ -134,33 +134,7 @@
134
134
  <a name='L69'></a><a href='#L69'>69</a>
135
135
  <a name='L70'></a><a href='#L70'>70</a>
136
136
  <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
137
+ <a name='L72'></a><a href='#L72'>72</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
164
138
  <span class="cline-any cline-yes">1x</span>
165
139
  <span class="cline-any cline-yes">1x</span>
166
140
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -168,19 +142,16 @@
168
142
  <span class="cline-any cline-neutral">&nbsp;</span>
169
143
  <span class="cline-any cline-neutral">&nbsp;</span>
170
144
  <span class="cline-any cline-yes">1x</span>
171
- <span class="cline-any cline-neutral">&nbsp;</span>
172
- <span class="cline-any cline-neutral">&nbsp;</span>
145
+ <span class="cline-any cline-yes">1x</span>
173
146
  <span class="cline-any cline-yes">1x</span>
174
147
  <span class="cline-any cline-neutral">&nbsp;</span>
175
148
  <span class="cline-any cline-yes">1x</span>
176
149
  <span class="cline-any cline-yes">1x</span>
177
150
  <span class="cline-any cline-yes">1x</span>
151
+ <span class="cline-any cline-no">&nbsp;</span>
178
152
  <span class="cline-any cline-neutral">&nbsp;</span>
179
- <span class="cline-any cline-yes">1x</span>
180
- <span class="cline-any cline-yes">1x</span>
181
153
  <span class="cline-any cline-neutral">&nbsp;</span>
182
154
  <span class="cline-any cline-yes">1x</span>
183
- <span class="cline-any cline-yes">1x</span>
184
155
  <span class="cline-any cline-neutral">&nbsp;</span>
185
156
  <span class="cline-any cline-yes">1x</span>
186
157
  <span class="cline-any cline-yes">1x</span>
@@ -188,39 +159,23 @@
188
159
  <span class="cline-any cline-yes">1x</span>
189
160
  <span class="cline-any cline-yes">1x</span>
190
161
  <span class="cline-any cline-yes">1x</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span>
191
163
  <span class="cline-any cline-yes">1x</span>
192
164
  <span class="cline-any cline-yes">1x</span>
193
165
  <span class="cline-any cline-yes">1x</span>
194
166
  <span class="cline-any cline-yes">1x</span>
195
167
  <span class="cline-any cline-yes">1x</span>
168
+ <span class="cline-any cline-neutral">&nbsp;</span>
196
169
  <span class="cline-any cline-yes">1x</span>
197
170
  <span class="cline-any cline-yes">1x</span>
198
171
  <span class="cline-any cline-yes">1x</span>
199
- <span class="cline-any cline-yes">1x</span>
200
- <span class="cline-any cline-neutral">&nbsp;</span>
201
- <span class="cline-any cline-no">&nbsp;</span>
202
- <span class="cline-any cline-no">&nbsp;</span>
203
- <span class="cline-any cline-no">&nbsp;</span>
204
- <span class="cline-any cline-neutral">&nbsp;</span>
205
172
  <span class="cline-any cline-neutral">&nbsp;</span>
206
173
  <span class="cline-any cline-yes">1x</span>
207
- <span class="cline-any cline-yes">1x</span>
208
- <span class="cline-any cline-yes">1x</span>
209
- <span class="cline-any cline-no">&nbsp;</span>
210
174
  <span class="cline-any cline-neutral">&nbsp;</span>
211
175
  <span class="cline-any cline-neutral">&nbsp;</span>
212
176
  <span class="cline-any cline-neutral">&nbsp;</span>
213
- <span class="cline-any cline-yes">1x</span>
214
- <span class="cline-any cline-yes">1x</span>
215
- <span class="cline-any cline-yes">1x</span>
216
177
  <span class="cline-any cline-neutral">&nbsp;</span>
217
- <span class="cline-any cline-yes">1x</span>
218
- <span class="cline-any cline-yes">1x</span>
219
- <span class="cline-any cline-yes">1x</span>
220
- <span class="cline-any cline-yes">1x</span>
221
- <span class="cline-any cline-yes">1x</span>
222
178
  <span class="cline-any cline-neutral">&nbsp;</span>
223
- <span class="cline-any cline-yes">1x</span>
224
179
  <span class="cline-any cline-neutral">&nbsp;</span>
225
180
  <span class="cline-any cline-neutral">&nbsp;</span>
226
181
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -240,119 +195,86 @@
240
195
  <span class="cline-any cline-neutral">&nbsp;</span>
241
196
  <span class="cline-any cline-neutral">&nbsp;</span>
242
197
  <span class="cline-any cline-yes">1x</span>
243
- <span class="cline-any cline-yes">1x</span>
244
- <span class="cline-any cline-yes">1x</span>
245
- <span class="cline-any cline-yes">1x</span>
246
- <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-yes">1x</span>
248
- <span class="cline-any cline-yes">1x</span>
249
- <span class="cline-any cline-yes">1x</span>
250
198
  <span class="cline-any cline-neutral">&nbsp;</span>
251
199
  <span class="cline-any cline-no">&nbsp;</span>
252
200
  <span class="cline-any cline-no">&nbsp;</span>
253
201
  <span class="cline-any cline-no">&nbsp;</span>
254
202
  <span class="cline-any cline-neutral">&nbsp;</span>
255
203
  <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-yes">1x</span>
257
205
  <span class="cline-any cline-yes">1x</span>
258
206
  <span class="cline-any cline-yes">1x</span>
259
207
  <span class="cline-any cline-neutral">&nbsp;</span>
260
208
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const debug = require('debug')('semantic-release:whmcs')
261
- const resolveConfig = require('./resolve-config')
262
209
  const puppet = require('./puppet')
210
+ const path = require('path')
263
211
  &nbsp;
264
212
  /**
265
213
  * A method to publish the module update on whmcs market place
266
214
  */
267
215
  module.exports = async (pluginConfig, context) =&gt; {
268
- const {
269
- logger
270
- } = context
216
+ const sep = '+++++++++++++++++++++++++++++++++++++++++++++++++++'
217
+ const out = `\n${sep}\n${path.basename(__filename)}\n${sep}\n`
271
218
  &nbsp;
272
- let success = true
273
- const { whmcsLOGIN, whmcsPASSWORD, whmcsPRODUCTID, whmcsMINVERSION, withHEAD, DEBUG } = resolveConfig(context)
274
- const { gotoOpts, navOpts, selectorOpts, page } = await puppet(withHEAD, DEBUG, logger)
275
- &nbsp;
276
- debug(`WHMCS Marketplace Product ID: ${whmcsPRODUCTID}`)
277
- logger.log(`WHMCS Marketplace Product ID: ${whmcsPRODUCTID}`)
278
- &nbsp;
279
- const wmbase = 'https://marketplace.whmcs.com'
280
- let url = `${wmbase}/user/login`
219
+ const püppi = await puppet(context)
220
+ const result = await püppi.login()
221
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!result) {
222
+ <span class="cstat-no" title="statement not covered" > return result</span>
223
+ }
224
+ const { page, gotoOpts, selectorOpts, productid, urlbase, minversion } =
225
+ püppi.config
281
226
  &nbsp;
227
+ debug(out)
282
228
  try {
229
+ // scrap versions from WHMCS marketplace
230
+ const url = `${urlbase}/product/${productid}/edit#compatibility`
283
231
  await page.goto(url, gotoOpts)
284
- // do login
285
- const selector = 'div.login-leftcol form button[type="submit"]'
286
- await page.waitForSelector(selector, selectorOpts)
287
- debug('login form loaded at %s', url)
288
- await page.type('#email', whmcsLOGIN)
289
- await page.type('#password', whmcsPASSWORD)
290
- debug('WHMCS Marketplace credentials entered')
291
- const nav = page.waitForNavigation(navOpts)
292
- await page.hover(selector)
293
- await page.click(selector)
294
- await nav
295
- debug('Login form successfully submitted.')
296
- logger.log('WHMCS Marketplace Login Form successfully submitted.')
297
- } catch (error) {
298
- <span class="cstat-no" title="statement not covered" > debug('WHMCS Marketplace login failed.', error.message)</span>
299
- <span class="cstat-no" title="statement not covered" > logger.error('WHMCS Marketplace login failed.', error.message)</span>
300
- <span class="cstat-no" title="statement not covered" > success = false</span>
301
- }
302
- &nbsp;
303
- <span class="missing-if-branch" title="else path not taken" >E</span>if (success) {
304
- try {
305
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!parseInt(whmcsPRODUCTID, 10)) {
306
- <span class="cstat-no" title="statement not covered" > return false</span>
307
- }
308
- &nbsp;
309
- // scrap versions from WHMCS marketplace
310
- url = `${wmbase}/product/${whmcsPRODUCTID}/edit#compatibility`
311
- await page.goto(url, gotoOpts)
312
- debug('product page loaded at %s', url)
313
- &nbsp;
314
- const selector = 'input[name="versionIds[]"]'
315
- const submitSelector = 'div#compatibility button[type="submit"]'
316
- await page.waitForSelector(selector, selectorOpts)
317
- await page.waitForSelector(submitSelector, selectorOpts)
318
- debug('compatibility version table found')
232
+ debug('product page loaded at %s', url)
319
233
  &nbsp;
320
- logger.log(`Minimum required WHMCS version: ${whmcsMINVERSION}`)
321
- /* istanbul ignore next */
322
- await page.$$eval(selector, (checkboxes, whmcsMINVERSION) =&gt; checkboxes.forEach(function (c, i) {
323
- const checkParts = c.className.split('-')[0].split('_')
324
- const minParts = whmcsMINVERSION.split('.')
325
- let check = true
326
- for (let i = 0; i &lt; 2; i++) {
327
- const a = ~~checkParts[i]
328
- const b = ~~minParts[i]
329
- if (a &gt; b) {
330
- break
331
- }
332
- if (a &lt; b) {
333
- check = false
334
- break
335
- }
336
- }
337
- c.checked = check
338
- }), whmcsMINVERSION)
339
- const submitNav = page.waitForNavigation(navOpts)
340
- await page.hover(submitSelector)
341
- await page.click(submitSelector)
342
- await submitNav
234
+ const selector = 'input[name="versionIds[]"]'
235
+ const submitSelector = 'div#compatibility button[type="submit"]'
236
+ await page.waitForSelector(selector, selectorOpts)
237
+ await page.waitForSelector(submitSelector, selectorOpts)
238
+ debug('compatibility version table found')
343
239
  &nbsp;
344
- debug('updating whmcs compatibility list succeeded.')
345
- logger.log('WHMCS Marketplace updating whmcs compatibility list succeeded.')
346
- success = true
347
- } catch (error) {
348
- <span class="cstat-no" title="statement not covered" > debug('updating whmcs compatibility list failed.', error.message)</span>
349
- <span class="cstat-no" title="statement not covered" > logger.error('WHMCS Marketplace updating whmcs compatibility list failed.', error.message)</span>
350
- <span class="cstat-no" title="statement not covered" > success = false</span>
240
+ let tmp = minversion
241
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (tmp) {
242
+ tmp = tmp.replace(/(.)/g, '$&amp;\u200E')
351
243
  }
244
+ debug(`Minimum required WHMCS version: ${tmp}`)
245
+ /* istanbul ignore next */
246
+ await page.$$eval(
247
+ selector,
248
+ (checkboxes, minversion) =&gt;
249
+ checkboxes.forEach(function (c) {
250
+ const checkParts = c.className.split('-')[0].split('_')
251
+ const minParts = minversion.split('.')
252
+ let check = true
253
+ for (let i = 0; i &lt; 2; i++) {
254
+ const a = ~~checkParts[i]
255
+ const b = ~~minParts[i]
256
+ if (a &gt; b) {
257
+ break
258
+ }
259
+ if (a &lt; b) {
260
+ check = false
261
+ break
262
+ }
263
+ }
264
+ c.checked = check
265
+ }),
266
+ minversion
267
+ )
268
+ await page.clickAndNavigate(submitSelector)
269
+ } catch (error) {
270
+ <span class="cstat-no" title="statement not covered" > debug('Updating whmcs compatibility list failed.', error.message)</span>
271
+ <span class="cstat-no" title="statement not covered" > await page.browser().close()</span>
272
+ <span class="cstat-no" title="statement not covered" > return false</span>
352
273
  }
353
274
  &nbsp;
275
+ debug('Updating whmcs compatibility list succeeded.')
354
276
  await page.browser().close()
355
- return success
277
+ return true
356
278
  }
357
279
  &nbsp;</pre></td></tr></table></pre>
358
280
 
@@ -361,7 +283,7 @@ module.exports = async (pluginConfig, context) =&gt; {
361
283
  <div class='footer quiet pad2 space-top1 center small'>
362
284
  Code coverage generated by
363
285
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
364
- at Wed Jun 29 2022 13:20:57 GMT+0000 (Coordinated Universal Time)
286
+ at 2022-08-09T11:01:27.229Z
365
287
  </div>
366
288
  <script src="../prettify.js"></script>
367
289
  <script>
@@ -32,7 +32,7 @@
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>10/10</span>
35
+ <span class='fraction'>12/12</span>
36
36
  </div>
37
37
 
38
38
 
@@ -83,7 +83,8 @@
83
83
  <a name='L18'></a><a href='#L18'>18</a>
84
84
  <a name='L19'></a><a href='#L19'>19</a>
85
85
  <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
87
88
  <span class="cline-any cline-yes">1x</span>
88
89
  <span class="cline-any cline-yes">1x</span>
89
90
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -93,6 +94,7 @@
93
94
  <span class="cline-any cline-yes">5x</span>
94
95
  <span class="cline-any cline-yes">2x</span>
95
96
  <span class="cline-any cline-neutral">&nbsp;</span>
97
+ <span class="cline-any cline-neutral">&nbsp;</span>
96
98
  <span class="cline-any cline-yes">5x</span>
97
99
  <span class="cline-any cline-yes">3x</span>
98
100
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -110,13 +112,14 @@ const getError = require('./get-error')
110
112
  module.exports = async (pluginConfig, context) =&gt; {
111
113
  const cfg = resolveConfig(context)
112
114
  const errors = []
113
- if (cfg.whmcsLOGIN === false || cfg.whmcsPASSWORD === false) {
115
+ if (cfg.login === false || cfg.password === false) {
114
116
  errors.push(getError('EWHMCSNOCREDENTIALS'))
115
117
  }
116
- if (cfg.whmcsPRODUCTID === false) {
118
+ // TODO: we might test Marketplace login using given credentials
119
+ if (cfg.productid === false) {
117
120
  errors.push(getError('EWHMCSNOPRODUCTID'))
118
121
  }
119
- if (!/^[0-9]+$/.test(cfg.whmcsPRODUCTID)) {
122
+ if (!/^[0-9]+$/.test(cfg.productid) || !parseInt(cfg.productid, 10)) {
120
123
  errors.push(getError('EWHMCSINVALIDPRODUCTID'))
121
124
  }
122
125
  if (errors.length &gt; 0) {
@@ -130,7 +133,7 @@ module.exports = async (pluginConfig, context) =&gt; {
130
133
  <div class='footer quiet pad2 space-top1 center small'>
131
134
  Code coverage generated by
132
135
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
133
- at Wed Jun 29 2022 13:20:57 GMT+0000 (Coordinated Universal Time)
136
+ at 2022-08-09T11:01:27.229Z
134
137
  </div>
135
138
  <script src="../prettify.js"></script>
136
139
  <script>
Binary file