@budibase/worker 2.3.15 → 2.3.17-alpha.0

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.
Files changed (135) hide show
  1. package/__mocks__/node-fetch.ts +23 -0
  2. package/jest-testcontainers-config.js +8 -0
  3. package/jest.config.ts +3 -2
  4. package/package.json +8 -6
  5. package/src/api/controllers/global/auth.ts +5 -2
  6. package/src/api/routes/global/tests/auth.spec.ts +30 -22
  7. package/src/api/routes/global/tests/configs.spec.ts +114 -94
  8. package/src/api/routes/global/tests/roles.spec.ts +19 -14
  9. package/src/api/routes/global/tests/users.spec.ts +33 -34
  10. package/src/ddApm.ts +7 -0
  11. package/src/elasticApm.ts +10 -0
  12. package/src/index.ts +6 -7
  13. package/src/sdk/users/users.ts +0 -1
  14. package/src/tests/TestConfiguration.ts +41 -11
  15. package/src/tests/api/auth.ts +7 -3
  16. package/src/tests/api/configs.ts +2 -2
  17. package/src/tests/api/users.ts +2 -2
  18. package/src/tests/jestSetup.ts +9 -2
  19. package/src/tests/structures/index.ts +0 -2
  20. package/coverage/clover.xml +0 -2196
  21. package/coverage/coverage-final.json +0 -84
  22. package/coverage/lcov-report/base.css +0 -224
  23. package/coverage/lcov-report/block-navigation.js +0 -87
  24. package/coverage/lcov-report/favicon.png +0 -0
  25. package/coverage/lcov-report/index.html +0 -431
  26. package/coverage/lcov-report/prettify.css +0 -1
  27. package/coverage/lcov-report/prettify.js +0 -2
  28. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  29. package/coverage/lcov-report/sorter.js +0 -196
  30. package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +0 -925
  31. package/coverage/lcov-report/src/api/controllers/global/configs.ts.html +0 -1348
  32. package/coverage/lcov-report/src/api/controllers/global/email.ts.html +0 -196
  33. package/coverage/lcov-report/src/api/controllers/global/events.ts.html +0 -136
  34. package/coverage/lcov-report/src/api/controllers/global/index.html +0 -251
  35. package/coverage/lcov-report/src/api/controllers/global/license.ts.html +0 -187
  36. package/coverage/lcov-report/src/api/controllers/global/roles.ts.html +0 -283
  37. package/coverage/lcov-report/src/api/controllers/global/self.ts.html +0 -577
  38. package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +0 -316
  39. package/coverage/lcov-report/src/api/controllers/global/users.ts.html +0 -838
  40. package/coverage/lcov-report/src/api/controllers/global/workspaces.ts.html +0 -244
  41. package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +0 -148
  42. package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +0 -124
  43. package/coverage/lcov-report/src/api/controllers/system/index.html +0 -191
  44. package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +0 -124
  45. package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +0 -124
  46. package/coverage/lcov-report/src/api/controllers/system/status.ts.html +0 -133
  47. package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +0 -154
  48. package/coverage/lcov-report/src/api/index.html +0 -116
  49. package/coverage/lcov-report/src/api/index.ts.html +0 -595
  50. package/coverage/lcov-report/src/api/routes/global/auth.ts.html +0 -349
  51. package/coverage/lcov-report/src/api/routes/global/configs.ts.html +0 -457
  52. package/coverage/lcov-report/src/api/routes/global/email.ts.html +0 -193
  53. package/coverage/lcov-report/src/api/routes/global/events.ts.html +0 -109
  54. package/coverage/lcov-report/src/api/routes/global/index.html +0 -251
  55. package/coverage/lcov-report/src/api/routes/global/license.ts.html +0 -124
  56. package/coverage/lcov-report/src/api/routes/global/roles.ts.html +0 -133
  57. package/coverage/lcov-report/src/api/routes/global/self.ts.html +0 -139
  58. package/coverage/lcov-report/src/api/routes/global/templates.ts.html +0 -196
  59. package/coverage/lcov-report/src/api/routes/global/users.ts.html +0 -475
  60. package/coverage/lcov-report/src/api/routes/global/workspaces.ts.html +0 -196
  61. package/coverage/lcov-report/src/api/routes/index.html +0 -116
  62. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -202
  63. package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +0 -142
  64. package/coverage/lcov-report/src/api/routes/system/environment.ts.html +0 -109
  65. package/coverage/lcov-report/src/api/routes/system/index.html +0 -191
  66. package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +0 -142
  67. package/coverage/lcov-report/src/api/routes/system/restore.ts.html +0 -109
  68. package/coverage/lcov-report/src/api/routes/system/status.ts.html +0 -109
  69. package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +0 -124
  70. package/coverage/lcov-report/src/api/routes/validation/index.html +0 -131
  71. package/coverage/lcov-report/src/api/routes/validation/index.ts.html +0 -88
  72. package/coverage/lcov-report/src/api/routes/validation/users.ts.html +0 -235
  73. package/coverage/lcov-report/src/constants/index.html +0 -116
  74. package/coverage/lcov-report/src/constants/index.ts.html +0 -637
  75. package/coverage/lcov-report/src/constants/templates/index.html +0 -116
  76. package/coverage/lcov-report/src/constants/templates/index.ts.html +0 -316
  77. package/coverage/lcov-report/src/db/index.html +0 -116
  78. package/coverage/lcov-report/src/db/index.ts.html +0 -115
  79. package/coverage/lcov-report/src/environment.ts.html +0 -388
  80. package/coverage/lcov-report/src/index.html +0 -131
  81. package/coverage/lcov-report/src/index.ts.html +0 -394
  82. package/coverage/lcov-report/src/middleware/cloudRestricted.ts.html +0 -139
  83. package/coverage/lcov-report/src/middleware/index.html +0 -116
  84. package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +0 -145
  85. package/coverage/lcov-report/src/migrations/functions/index.html +0 -116
  86. package/coverage/lcov-report/src/migrations/index.html +0 -116
  87. package/coverage/lcov-report/src/migrations/index.ts.html +0 -271
  88. package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +0 -262
  89. package/coverage/lcov-report/src/sdk/accounts/index.html +0 -131
  90. package/coverage/lcov-report/src/sdk/accounts/index.ts.html +0 -88
  91. package/coverage/lcov-report/src/sdk/index.html +0 -116
  92. package/coverage/lcov-report/src/sdk/index.ts.html +0 -106
  93. package/coverage/lcov-report/src/sdk/users/events.ts.html +0 -601
  94. package/coverage/lcov-report/src/sdk/users/index.html +0 -146
  95. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -88
  96. package/coverage/lcov-report/src/sdk/users/users.ts.html +0 -1999
  97. package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +0 -1075
  98. package/coverage/lcov-report/src/tests/api/accounts.ts.html +0 -160
  99. package/coverage/lcov-report/src/tests/api/auth.ts.html +0 -220
  100. package/coverage/lcov-report/src/tests/api/base.ts.html +0 -133
  101. package/coverage/lcov-report/src/tests/api/configs.ts.html +0 -226
  102. package/coverage/lcov-report/src/tests/api/email.ts.html +0 -148
  103. package/coverage/lcov-report/src/tests/api/environment.ts.html +0 -130
  104. package/coverage/lcov-report/src/tests/api/groups.ts.html +0 -163
  105. package/coverage/lcov-report/src/tests/api/index.html +0 -356
  106. package/coverage/lcov-report/src/tests/api/index.ts.html +0 -238
  107. package/coverage/lcov-report/src/tests/api/license.ts.html +0 -136
  108. package/coverage/lcov-report/src/tests/api/migrations.ts.html +0 -151
  109. package/coverage/lcov-report/src/tests/api/restore.ts.html +0 -127
  110. package/coverage/lcov-report/src/tests/api/roles.ts.html +0 -181
  111. package/coverage/lcov-report/src/tests/api/self.ts.html +0 -163
  112. package/coverage/lcov-report/src/tests/api/status.ts.html +0 -121
  113. package/coverage/lcov-report/src/tests/api/templates.ts.html +0 -175
  114. package/coverage/lcov-report/src/tests/api/tenants.ts.html +0 -130
  115. package/coverage/lcov-report/src/tests/api/users.ts.html +0 -514
  116. package/coverage/lcov-report/src/tests/controllers.ts.html +0 -100
  117. package/coverage/lcov-report/src/tests/index.html +0 -146
  118. package/coverage/lcov-report/src/tests/index.ts.html +0 -103
  119. package/coverage/lcov-report/src/tests/mocks/email.ts.html +0 -115
  120. package/coverage/lcov-report/src/tests/mocks/index.html +0 -131
  121. package/coverage/lcov-report/src/tests/mocks/index.ts.html +0 -106
  122. package/coverage/lcov-report/src/tests/structures/configs.ts.html +0 -313
  123. package/coverage/lcov-report/src/tests/structures/groups.ts.html +0 -118
  124. package/coverage/lcov-report/src/tests/structures/index.html +0 -161
  125. package/coverage/lcov-report/src/tests/structures/index.ts.html +0 -151
  126. package/coverage/lcov-report/src/tests/structures/users.ts.html +0 -196
  127. package/coverage/lcov-report/src/utilities/appService.ts.html +0 -208
  128. package/coverage/lcov-report/src/utilities/email.ts.html +0 -850
  129. package/coverage/lcov-report/src/utilities/fileSystem.ts.html +0 -100
  130. package/coverage/lcov-report/src/utilities/index.html +0 -206
  131. package/coverage/lcov-report/src/utilities/index.ts.html +0 -112
  132. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -424
  133. package/coverage/lcov-report/src/utilities/templates.ts.html +0 -232
  134. package/coverage/lcov-report/src/utilities/users.ts.html +0 -133
  135. package/coverage/lcov.info +0 -4184
@@ -1,1075 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/tests/TestConfiguration.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">src/tests</a> TestConfiguration.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">90.35% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>103/114</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">62.5% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>10/16</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">86.48% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>32/37</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">90.09% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>100/111</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
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>
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>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">18x</span>
397
- <span class="cline-any cline-neutral">&nbsp;</span>
398
- <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-yes">18x</span>
400
- <span class="cline-any cline-yes">18x</span>
401
- <span class="cline-any cline-neutral">&nbsp;</span>
402
- <span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-yes">18x</span>
404
- <span class="cline-any cline-neutral">&nbsp;</span>
405
- <span class="cline-any cline-yes">18x</span>
406
- <span class="cline-any cline-yes">18x</span>
407
- <span class="cline-any cline-yes">18x</span>
408
- <span class="cline-any cline-yes">18x</span>
409
- <span class="cline-any cline-yes">18x</span>
410
- <span class="cline-any cline-yes">18x</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-yes">18x</span>
419
- <span class="cline-any cline-yes">18x</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-yes">18x</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-yes">18x</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-yes">18x</span>
442
- <span class="cline-any cline-yes">18x</span>
443
- <span class="cline-any cline-no">&nbsp;</span>
444
- <span class="cline-any cline-no">&nbsp;</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-yes">18x</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-yes">18x</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-yes">18x</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-yes">18x</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-no">&nbsp;</span>
459
- <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-neutral">&nbsp;</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-yes">18x</span>
464
- <span class="cline-any cline-yes">26x</span>
465
- <span class="cline-any cline-yes">26x</span>
466
- <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-neutral">&nbsp;</span>
468
- <span class="cline-any cline-yes">18x</span>
469
- <span class="cline-any cline-yes">26x</span>
470
- <span class="cline-any cline-yes">26x</span>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-yes">18x</span>
474
- <span class="cline-any cline-yes">22x</span>
475
- <span class="cline-any cline-yes">22x</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-yes">18x</span>
479
- <span class="cline-any cline-yes">4x</span>
480
- <span class="cline-any cline-yes">4x</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-yes">158x</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-yes">158x</span>
489
- <span class="cline-any cline-yes">158x</span>
490
- <span class="cline-any cline-yes">158x</span>
491
- <span class="cline-any cline-yes">158x</span>
492
- <span class="cline-any cline-yes">158x</span>
493
- <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-yes">158x</span>
496
- <span class="cline-any cline-yes">16x</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-yes">158x</span>
499
- <span class="cline-any cline-yes">72x</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-yes">158x</span>
502
- <span class="cline-any cline-yes">158x</span>
503
- <span class="cline-any cline-neutral">&nbsp;</span>
504
- <span class="cline-any cline-yes">142x</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-yes">18x</span>
511
- <span class="cline-any cline-yes">18x</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-yes">18x</span>
514
- <span class="cline-any cline-yes">18x</span>
515
- <span class="cline-any cline-yes">18x</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-neutral">&nbsp;</span>
520
- <span class="cline-any cline-yes">18x</span>
521
- <span class="cline-any cline-yes">18x</span>
522
- <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-yes">18x</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-yes">6x</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-yes">6x</span>
533
- <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-neutral">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-yes">6x</span>
541
- <span class="cline-any cline-yes">6x</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-yes">6x</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-yes">475x</span>
548
- <span class="cline-any cline-yes">475x</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-yes">407x</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-yes">48x</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-neutral">&nbsp;</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-yes">48x</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-yes">87x</span>
576
- <span class="cline-any cline-no">&nbsp;</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-yes">87x</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-yes">86x</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-yes">86x</span>
590
- <span class="cline-any cline-yes">86x</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-yes">78x</span>
599
- <span class="cline-any cline-yes">78x</span>
600
- <span class="cline-any cline-yes">78x</span>
601
- <span class="cline-any cline-no">&nbsp;</span>
602
- <span class="cline-any cline-no">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-no">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-yes">19x</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-yes">18x</span>
613
- <span class="cline-any cline-yes">1x</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-yes">18x</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-yes">18x</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-yes">18x</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-yes">18x</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-yes">74x</span>
636
- <span class="cline-any cline-yes">74x</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-yes">64x</span>
642
- <span class="cline-any cline-yes">17x</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-yes">64x</span>
645
- <span class="cline-any cline-yes">64x</span>
646
- <span class="cline-any cline-yes">64x</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-yes">36x</span>
653
- <span class="cline-any cline-yes">36x</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">36x</span>
661
- <span class="cline-any cline-yes">36x</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-yes">8x</span>
679
- <span class="cline-any cline-yes">8x</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-no">&nbsp;</span>
690
- <span class="cline-any cline-no">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-no">&nbsp;</span>
697
- <span class="cline-any cline-no">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-yes">2x</span>
702
- <span class="cline-any cline-yes">2x</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-yes">2x</span>
705
- <span class="cline-any cline-yes">2x</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-yes">9x</span>
712
- <span class="cline-any cline-yes">9x</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-yes">3x</span>
717
- <span class="cline-any cline-yes">3x</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-yes">18x</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import mocks from "./mocks"
727
- &nbsp;
728
- // init the licensing mock
729
- import * as pro from "@budibase/pro"
730
- mocks.licenses.init(pro)
731
- &nbsp;
732
- // use unlimited license by default
733
- mocks.licenses.useUnlimited()
734
- &nbsp;
735
- import * as dbConfig from "../db"
736
- dbConfig.init()
737
- import env from "../environment"
738
- import * as controllers from "./controllers"
739
- const supertest = require("supertest")
740
- import { Config } from "../constants"
741
- import {
742
- users,
743
- tenancy,
744
- sessions,
745
- auth,
746
- constants,
747
- env as coreEnv,
748
- } from "@budibase/backend-core"
749
- import structures, { TENANT_ID, TENANT_1, CSRF_TOKEN } from "./structures"
750
- import { CreateUserResponse, User, AuthToken } from "@budibase/types"
751
- import API from "./api"
752
- &nbsp;
753
- enum Mode {
754
- CLOUD = "cloud",
755
- SELF = "self",
756
- }
757
- &nbsp;
758
- class TestConfiguration {
759
- server: any
760
- request: any
761
- api: API
762
- defaultUser?: User
763
- tenant1User?: User
764
- &nbsp;
765
- constructor(
766
- opts: { openServer: boolean; mode: Mode } = {
767
- openServer: true,
768
- mode: Mode.CLOUD,
769
- }
770
- ) {
771
- if (opts.mode === Mode.CLOUD) {
772
- this.modeCloud()
773
- } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span><span class="missing-if-branch" title="else path not taken" >E</span>if (opts.mode === Mode.SELF) {</span>
774
- <span class="cstat-no" title="statement not covered" > this.modeSelf()</span>
775
- }
776
- &nbsp;
777
- if (opts.openServer) {
778
- env.PORT = "0" // random port
779
- this.server = require("../index").default
780
- // we need the request for logging in, involves cookies, hard to fake
781
- this.request = supertest(this.server)
782
- }
783
- &nbsp;
784
- this.api = new API(this)
785
- }
786
- &nbsp;
787
- <span class="fstat-no" title="function not covered" > getRequest() {</span>
788
- <span class="cstat-no" title="statement not covered" > return this.request</span>
789
- }
790
- &nbsp;
791
- // MODES
792
- &nbsp;
793
- setMultiTenancy = (value: boolean) =&gt; {
794
- env._set("MULTI_TENANCY", value)
795
- coreEnv._set("MULTI_TENANCY", value)
796
- }
797
- &nbsp;
798
- setSelfHosted = (value: boolean) =&gt; {
799
- env._set("SELF_HOSTED", value)
800
- coreEnv._set("SELF_HOSTED", value)
801
- }
802
- &nbsp;
803
- modeCloud = () =&gt; {
804
- this.setSelfHosted(false)
805
- this.setMultiTenancy(true)
806
- }
807
- &nbsp;
808
- modeSelf = () =&gt; {
809
- this.setSelfHosted(true)
810
- this.setMultiTenancy(false)
811
- }
812
- &nbsp;
813
- // UTILS
814
- &nbsp;
815
- async _req(config: any, params: any, controlFunc: any) {
816
- const request: any = {}
817
- // fake cookies, we don't need them
818
- request.cookies = { set: <span class="fstat-no" title="function not covered" >() =&gt; {</span>}, get: <span class="fstat-no" title="function not covered" >() =&gt; {</span>} }
819
- request.config = { jwtSecret: env.JWT_SECRET }
820
- request.user = { tenantId: this.getTenantId() }
821
- request.query = {}
822
- request.request = {
823
- body: config,
824
- }
825
- request.throw = (status: any, err: any) =&gt; {
826
- throw { status, message: err }
827
- }
828
- if (params) {
829
- request.params = params
830
- }
831
- await tenancy.doInTenant(this.getTenantId(), () =&gt; {
832
- return controlFunc(request)
833
- })
834
- return request.body
835
- }
836
- &nbsp;
837
- // SETUP / TEARDOWN
838
- &nbsp;
839
- async beforeAll() {
840
- await this.createDefaultUser()
841
- await this.createSession(this.defaultUser!)
842
- &nbsp;
843
- await tenancy.doInTenant(TENANT_1, async () =&gt; {
844
- await this.createTenant1User()
845
- await this.createSession(this.tenant1User!)
846
- })
847
- }
848
- &nbsp;
849
- async afterAll() {
850
- if (this.server) {
851
- await this.server.close()
852
- }
853
- }
854
- &nbsp;
855
- // TENANCY
856
- &nbsp;
857
- createTenant = async (): Promise&lt;User&gt; =&gt; {
858
- // create user / new tenant
859
- const res = await this.api.users.createAdminUser()
860
- &nbsp;
861
- // return the created user
862
- const userRes = await this.api.users.getUser(res.userId, {
863
- headers: {
864
- ...this.internalAPIHeaders(),
865
- [constants.Header.TENANT_ID]: res.tenantId,
866
- },
867
- })
868
- &nbsp;
869
- // create a session for the new user
870
- const user = userRes.body
871
- await this.createSession(user)
872
- &nbsp;
873
- return user
874
- }
875
- &nbsp;
876
- getTenantId() {
877
- try {
878
- return tenancy.getTenantId()
879
- } catch (e: any) {
880
- return TENANT_ID
881
- }
882
- }
883
- &nbsp;
884
- // AUTH
885
- &nbsp;
886
- async _createSession({
887
- userId,
888
- tenantId,
889
- }: {
890
- userId: string
891
- tenantId: string
892
- }) {
893
- await sessions.createASession(userId!, {
894
- sessionId: "sessionid",
895
- tenantId: tenantId,
896
- csrfToken: CSRF_TOKEN,
897
- })
898
- }
899
- &nbsp;
900
- async createSession(user: User) {
901
- return this._createSession({ userId: user._id!, tenantId: user.tenantId })
902
- }
903
- &nbsp;
904
- cookieHeader(cookies: any) {
905
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(cookies)) {
906
- <span class="cstat-no" title="statement not covered" > cookies = [cookies]</span>
907
- }
908
- return {
909
- Cookie: cookies,
910
- }
911
- }
912
- &nbsp;
913
- authHeaders(user: User) {
914
- const authToken: AuthToken = {
915
- userId: user._id!,
916
- sessionId: "sessionid",
917
- tenantId: user.tenantId,
918
- }
919
- const authCookie = auth.jwt.sign(authToken, env.JWT_SECRET)
920
- return {
921
- Accept: "application/json",
922
- ...this.cookieHeader([`${constants.Cookie.Auth}=${authCookie}`]),
923
- [constants.Header.CSRF_TOKEN]: CSRF_TOKEN,
924
- }
925
- }
926
- &nbsp;
927
- defaultHeaders() {
928
- const tenantId = this.getTenantId()
929
- if (tenantId === TENANT_ID) {
930
- return this.authHeaders(this.defaultUser!)
931
- } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (tenantId === TENANT_1) {</span>
932
- <span class="cstat-no" title="statement not covered" > return this.authHeaders(this.tenant1User!)</span>
933
- } else {
934
- <span class="cstat-no" title="statement not covered" > throw new Error("could not determine auth headers to use")</span>
935
- }
936
- }
937
- &nbsp;
938
- internalAPIHeaders() {
939
- return { [constants.Header.API_KEY]: env.INTERNAL_API_KEY }
940
- }
941
- &nbsp;
942
- adminOnlyResponse = () =&gt; {
943
- return { message: "Admin user only endpoint.", status: 403 }
944
- }
945
- &nbsp;
946
- // USERS
947
- &nbsp;
948
- async createDefaultUser() {
949
- const user = structures.users.adminUser({
950
- email: "test@test.com",
951
- password: "test",
952
- })
953
- this.defaultUser = await this.createUser(user)
954
- }
955
- &nbsp;
956
- async createTenant1User() {
957
- const user = structures.users.adminUser({
958
- email: "tenant1@test.com",
959
- password: "test",
960
- })
961
- this.tenant1User = await this.createUser(user)
962
- }
963
- &nbsp;
964
- async getUser(email: string): Promise&lt;User&gt; {
965
- return tenancy.doInTenant(this.getTenantId(), () =&gt; {
966
- return users.getGlobalUserByEmail(email)
967
- })
968
- }
969
- &nbsp;
970
- async createUser(user?: User) {
971
- if (!user) {
972
- user = structures.users.user()
973
- }
974
- const response = await this._req(user, null, controllers.users.save)
975
- const body = response as CreateUserResponse
976
- return this.getUser(body.email)
977
- }
978
- &nbsp;
979
- // CONFIGS
980
- &nbsp;
981
- async deleteConfig(type: any) {
982
- try {
983
- const cfg = await this._req(
984
- null,
985
- {
986
- type,
987
- },
988
- controllers.config.find
989
- )
990
- if (cfg) {
991
- await this._req(
992
- null,
993
- {
994
- id: cfg._id,
995
- rev: cfg._rev,
996
- },
997
- controllers.config.destroy
998
- )
999
- }
1000
- } catch (err) {
1001
- // don't need to handle error
1002
- }
1003
- }
1004
- &nbsp;
1005
- // CONFIGS - SETTINGS
1006
- &nbsp;
1007
- async saveSettingsConfig() {
1008
- await this.deleteConfig(Config.SETTINGS)
1009
- await this._req(
1010
- structures.configs.settings(),
1011
- null,
1012
- controllers.config.save
1013
- )
1014
- }
1015
- &nbsp;
1016
- // CONFIGS - GOOGLE
1017
- &nbsp;
1018
- <span class="fstat-no" title="function not covered" > async s</span>aveGoogleConfig() {
1019
- <span class="cstat-no" title="statement not covered" > await this.deleteConfig(Config.GOOGLE)</span>
1020
- <span class="cstat-no" title="statement not covered" > await this._req(structures.configs.google(), null, controllers.config.save)</span>
1021
- }
1022
- &nbsp;
1023
- // CONFIGS - OIDC
1024
- &nbsp;
1025
- <span class="fstat-no" title="function not covered" > getOIDConfigCookie(c</span>onfigId: string) {
1026
- const token = <span class="cstat-no" title="statement not covered" >auth.jwt.sign(configId, env.JWT_SECRET)</span>
1027
- <span class="cstat-no" title="statement not covered" > return this.cookieHeader([[`${constants.Cookie.OIDC_CONFIG}=${token}`]])</span>
1028
- }
1029
- &nbsp;
1030
- async saveOIDCConfig() {
1031
- await this.deleteConfig(Config.OIDC)
1032
- const config = structures.configs.oidc()
1033
- &nbsp;
1034
- await this._req(config, null, controllers.config.save)
1035
- return config
1036
- }
1037
- &nbsp;
1038
- // CONFIGS - SMTP
1039
- &nbsp;
1040
- async saveSmtpConfig() {
1041
- await this.deleteConfig(Config.SMTP)
1042
- await this._req(structures.configs.smtp(), null, controllers.config.save)
1043
- }
1044
- &nbsp;
1045
- async saveEtherealSmtpConfig() {
1046
- await this.deleteConfig(Config.SMTP)
1047
- await this._req(
1048
- structures.configs.smtpEthereal(),
1049
- null,
1050
- controllers.config.save
1051
- )
1052
- }
1053
- }
1054
- &nbsp;
1055
- export default TestConfiguration
1056
- &nbsp;</pre></td></tr></table></pre>
1057
-
1058
- <div class='push'></div><!-- for sticky footer -->
1059
- </div><!-- /wrapper -->
1060
- <div class='footer quiet pad2 space-top1 center small'>
1061
- Code coverage generated by
1062
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1063
- at Wed Feb 15 2023 12:55:13 GMT+0000 (Coordinated Universal Time)
1064
- </div>
1065
- <script src="../../prettify.js"></script>
1066
- <script>
1067
- window.onload = function () {
1068
- prettyPrint();
1069
- };
1070
- </script>
1071
- <script src="../../sorter.js"></script>
1072
- <script src="../../block-navigation.js"></script>
1073
- </body>
1074
- </html>
1075
-