@budibase/worker 2.3.16 → 2.3.17-alpha.1

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 (134) 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/routes/global/tests/auth.spec.ts +30 -22
  6. package/src/api/routes/global/tests/configs.spec.ts +114 -94
  7. package/src/api/routes/global/tests/roles.spec.ts +19 -14
  8. package/src/api/routes/global/tests/users.spec.ts +33 -34
  9. package/src/ddApm.ts +7 -0
  10. package/src/elasticApm.ts +10 -0
  11. package/src/index.ts +6 -7
  12. package/src/sdk/users/users.ts +0 -1
  13. package/src/tests/TestConfiguration.ts +41 -11
  14. package/src/tests/api/auth.ts +7 -3
  15. package/src/tests/api/configs.ts +2 -2
  16. package/src/tests/api/users.ts +2 -2
  17. package/src/tests/jestSetup.ts +9 -2
  18. package/src/tests/structures/index.ts +0 -2
  19. package/coverage/clover.xml +0 -2199
  20. package/coverage/coverage-final.json +0 -84
  21. package/coverage/lcov-report/base.css +0 -224
  22. package/coverage/lcov-report/block-navigation.js +0 -87
  23. package/coverage/lcov-report/favicon.png +0 -0
  24. package/coverage/lcov-report/index.html +0 -431
  25. package/coverage/lcov-report/prettify.css +0 -1
  26. package/coverage/lcov-report/prettify.js +0 -2
  27. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  28. package/coverage/lcov-report/sorter.js +0 -196
  29. package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +0 -934
  30. package/coverage/lcov-report/src/api/controllers/global/configs.ts.html +0 -1348
  31. package/coverage/lcov-report/src/api/controllers/global/email.ts.html +0 -196
  32. package/coverage/lcov-report/src/api/controllers/global/events.ts.html +0 -136
  33. package/coverage/lcov-report/src/api/controllers/global/index.html +0 -251
  34. package/coverage/lcov-report/src/api/controllers/global/license.ts.html +0 -187
  35. package/coverage/lcov-report/src/api/controllers/global/roles.ts.html +0 -283
  36. package/coverage/lcov-report/src/api/controllers/global/self.ts.html +0 -577
  37. package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +0 -316
  38. package/coverage/lcov-report/src/api/controllers/global/users.ts.html +0 -838
  39. package/coverage/lcov-report/src/api/controllers/global/workspaces.ts.html +0 -244
  40. package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +0 -148
  41. package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +0 -124
  42. package/coverage/lcov-report/src/api/controllers/system/index.html +0 -191
  43. package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +0 -124
  44. package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +0 -124
  45. package/coverage/lcov-report/src/api/controllers/system/status.ts.html +0 -133
  46. package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +0 -154
  47. package/coverage/lcov-report/src/api/index.html +0 -116
  48. package/coverage/lcov-report/src/api/index.ts.html +0 -595
  49. package/coverage/lcov-report/src/api/routes/global/auth.ts.html +0 -349
  50. package/coverage/lcov-report/src/api/routes/global/configs.ts.html +0 -457
  51. package/coverage/lcov-report/src/api/routes/global/email.ts.html +0 -193
  52. package/coverage/lcov-report/src/api/routes/global/events.ts.html +0 -109
  53. package/coverage/lcov-report/src/api/routes/global/index.html +0 -251
  54. package/coverage/lcov-report/src/api/routes/global/license.ts.html +0 -124
  55. package/coverage/lcov-report/src/api/routes/global/roles.ts.html +0 -133
  56. package/coverage/lcov-report/src/api/routes/global/self.ts.html +0 -139
  57. package/coverage/lcov-report/src/api/routes/global/templates.ts.html +0 -196
  58. package/coverage/lcov-report/src/api/routes/global/users.ts.html +0 -475
  59. package/coverage/lcov-report/src/api/routes/global/workspaces.ts.html +0 -196
  60. package/coverage/lcov-report/src/api/routes/index.html +0 -116
  61. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -202
  62. package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +0 -142
  63. package/coverage/lcov-report/src/api/routes/system/environment.ts.html +0 -109
  64. package/coverage/lcov-report/src/api/routes/system/index.html +0 -191
  65. package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +0 -142
  66. package/coverage/lcov-report/src/api/routes/system/restore.ts.html +0 -109
  67. package/coverage/lcov-report/src/api/routes/system/status.ts.html +0 -109
  68. package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +0 -124
  69. package/coverage/lcov-report/src/api/routes/validation/index.html +0 -131
  70. package/coverage/lcov-report/src/api/routes/validation/index.ts.html +0 -88
  71. package/coverage/lcov-report/src/api/routes/validation/users.ts.html +0 -235
  72. package/coverage/lcov-report/src/constants/index.html +0 -116
  73. package/coverage/lcov-report/src/constants/index.ts.html +0 -637
  74. package/coverage/lcov-report/src/constants/templates/index.html +0 -116
  75. package/coverage/lcov-report/src/constants/templates/index.ts.html +0 -316
  76. package/coverage/lcov-report/src/db/index.html +0 -116
  77. package/coverage/lcov-report/src/db/index.ts.html +0 -115
  78. package/coverage/lcov-report/src/environment.ts.html +0 -388
  79. package/coverage/lcov-report/src/index.html +0 -131
  80. package/coverage/lcov-report/src/index.ts.html +0 -394
  81. package/coverage/lcov-report/src/middleware/cloudRestricted.ts.html +0 -139
  82. package/coverage/lcov-report/src/middleware/index.html +0 -116
  83. package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +0 -145
  84. package/coverage/lcov-report/src/migrations/functions/index.html +0 -116
  85. package/coverage/lcov-report/src/migrations/index.html +0 -116
  86. package/coverage/lcov-report/src/migrations/index.ts.html +0 -271
  87. package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +0 -262
  88. package/coverage/lcov-report/src/sdk/accounts/index.html +0 -131
  89. package/coverage/lcov-report/src/sdk/accounts/index.ts.html +0 -88
  90. package/coverage/lcov-report/src/sdk/index.html +0 -116
  91. package/coverage/lcov-report/src/sdk/index.ts.html +0 -106
  92. package/coverage/lcov-report/src/sdk/users/events.ts.html +0 -601
  93. package/coverage/lcov-report/src/sdk/users/index.html +0 -146
  94. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -88
  95. package/coverage/lcov-report/src/sdk/users/users.ts.html +0 -1999
  96. package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +0 -1075
  97. package/coverage/lcov-report/src/tests/api/accounts.ts.html +0 -160
  98. package/coverage/lcov-report/src/tests/api/auth.ts.html +0 -220
  99. package/coverage/lcov-report/src/tests/api/base.ts.html +0 -133
  100. package/coverage/lcov-report/src/tests/api/configs.ts.html +0 -226
  101. package/coverage/lcov-report/src/tests/api/email.ts.html +0 -148
  102. package/coverage/lcov-report/src/tests/api/environment.ts.html +0 -130
  103. package/coverage/lcov-report/src/tests/api/groups.ts.html +0 -163
  104. package/coverage/lcov-report/src/tests/api/index.html +0 -356
  105. package/coverage/lcov-report/src/tests/api/index.ts.html +0 -238
  106. package/coverage/lcov-report/src/tests/api/license.ts.html +0 -136
  107. package/coverage/lcov-report/src/tests/api/migrations.ts.html +0 -151
  108. package/coverage/lcov-report/src/tests/api/restore.ts.html +0 -127
  109. package/coverage/lcov-report/src/tests/api/roles.ts.html +0 -181
  110. package/coverage/lcov-report/src/tests/api/self.ts.html +0 -163
  111. package/coverage/lcov-report/src/tests/api/status.ts.html +0 -121
  112. package/coverage/lcov-report/src/tests/api/templates.ts.html +0 -175
  113. package/coverage/lcov-report/src/tests/api/tenants.ts.html +0 -130
  114. package/coverage/lcov-report/src/tests/api/users.ts.html +0 -514
  115. package/coverage/lcov-report/src/tests/controllers.ts.html +0 -100
  116. package/coverage/lcov-report/src/tests/index.html +0 -146
  117. package/coverage/lcov-report/src/tests/index.ts.html +0 -103
  118. package/coverage/lcov-report/src/tests/mocks/email.ts.html +0 -115
  119. package/coverage/lcov-report/src/tests/mocks/index.html +0 -131
  120. package/coverage/lcov-report/src/tests/mocks/index.ts.html +0 -106
  121. package/coverage/lcov-report/src/tests/structures/configs.ts.html +0 -313
  122. package/coverage/lcov-report/src/tests/structures/groups.ts.html +0 -118
  123. package/coverage/lcov-report/src/tests/structures/index.html +0 -161
  124. package/coverage/lcov-report/src/tests/structures/index.ts.html +0 -151
  125. package/coverage/lcov-report/src/tests/structures/users.ts.html +0 -196
  126. package/coverage/lcov-report/src/utilities/appService.ts.html +0 -208
  127. package/coverage/lcov-report/src/utilities/email.ts.html +0 -850
  128. package/coverage/lcov-report/src/utilities/fileSystem.ts.html +0 -100
  129. package/coverage/lcov-report/src/utilities/index.html +0 -206
  130. package/coverage/lcov-report/src/utilities/index.ts.html +0 -112
  131. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -424
  132. package/coverage/lcov-report/src/utilities/templates.ts.html +0 -232
  133. package/coverage/lcov-report/src/utilities/users.ts.html +0 -133
  134. package/coverage/lcov.info +0 -4187
@@ -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 15:06:34 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
-