@syngrisi/syngrisi 2.2.2 → 2.2.6-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 (613) hide show
  1. package/README.md +49 -27
  2. package/dist/server/api-docs/openAPIDocumentGenerator.js +6489 -0
  3. package/dist/server/api-docs/openAPIDocumentGenerator.js.map +1 -0
  4. package/dist/server/api-docs/openAPIResponseBuilders.js +89 -0
  5. package/dist/server/api-docs/openAPIResponseBuilders.js.map +1 -0
  6. package/dist/server/api-docs/openAPIRouter.js +6505 -0
  7. package/dist/server/api-docs/openAPIRouter.js.map +1 -0
  8. package/dist/server/api-docs/serviceResponse.js +39 -0
  9. package/dist/server/api-docs/serviceResponse.js.map +1 -0
  10. package/dist/server/app.js +6751 -0
  11. package/dist/server/app.js.map +1 -0
  12. package/dist/server/config.js +1055 -0
  13. package/dist/server/config.js.map +1 -0
  14. package/dist/server/controllers/app.controller.js +1949 -0
  15. package/dist/server/controllers/app.controller.js.map +1 -0
  16. package/dist/server/controllers/auth.controller.js +2079 -0
  17. package/dist/server/controllers/auth.controller.js.map +1 -0
  18. package/dist/server/controllers/baseline.controller.js +1976 -0
  19. package/dist/server/controllers/baseline.controller.js.map +1 -0
  20. package/dist/server/controllers/check.controller.js +2289 -0
  21. package/dist/server/controllers/check.controller.js.map +1 -0
  22. package/dist/server/controllers/client.controller.js +2994 -0
  23. package/dist/server/controllers/client.controller.js.map +1 -0
  24. package/dist/server/controllers/index.js +4289 -0
  25. package/dist/server/controllers/index.js.map +1 -0
  26. package/dist/server/controllers/logs.controller.js +1954 -0
  27. package/dist/server/controllers/logs.controller.js.map +1 -0
  28. package/dist/server/controllers/runs.controller.js +2293 -0
  29. package/dist/server/controllers/runs.controller.js.map +1 -0
  30. package/dist/server/controllers/settings.controller.js +843 -0
  31. package/dist/server/controllers/settings.controller.js.map +1 -0
  32. package/dist/server/controllers/snapshots.controller.js +1953 -0
  33. package/dist/server/controllers/snapshots.controller.js.map +1 -0
  34. package/dist/server/controllers/suite.controller.js +2288 -0
  35. package/dist/server/controllers/suite.controller.js.map +1 -0
  36. package/dist/server/controllers/tasks.controller.js +2378 -0
  37. package/dist/server/controllers/tasks.controller.js.map +1 -0
  38. package/dist/server/controllers/test.controller.js +2312 -0
  39. package/dist/server/controllers/test.controller.js.map +1 -0
  40. package/dist/server/controllers/users.controller.js +2056 -0
  41. package/dist/server/controllers/users.controller.js.map +1 -0
  42. package/dist/server/envConfig.js +70 -0
  43. package/dist/server/envConfig.js.map +1 -0
  44. package/dist/server/lib/AppSettings/AppSettings.js +814 -0
  45. package/dist/server/lib/AppSettings/AppSettings.js.map +1 -0
  46. package/dist/server/lib/AppSettings/index.js +814 -0
  47. package/dist/server/lib/AppSettings/index.js.map +1 -0
  48. package/dist/server/lib/connectDb.js +1873 -0
  49. package/dist/server/lib/connectDb.js.map +1 -0
  50. package/dist/server/lib/dbItems/createAppIfNotExist.js +1878 -0
  51. package/dist/server/lib/dbItems/createAppIfNotExist.js.map +1 -0
  52. package/dist/server/lib/dbItems/createItemIfNotExist.js +1883 -0
  53. package/dist/server/lib/dbItems/createItemIfNotExist.js.map +1 -0
  54. package/dist/server/lib/dbItems/createItemProm.js +1877 -0
  55. package/dist/server/lib/dbItems/createItemProm.js.map +1 -0
  56. package/dist/server/lib/dbItems/createRunIfNotExist.js +1898 -0
  57. package/dist/server/lib/dbItems/createRunIfNotExist.js.map +1 -0
  58. package/dist/server/lib/dbItems/createSuiteIfNotExist.js +1878 -0
  59. package/dist/server/lib/dbItems/createSuiteIfNotExist.js.map +1 -0
  60. package/dist/server/lib/dbItems/createTest.js +1884 -0
  61. package/dist/server/lib/dbItems/createTest.js.map +1 -0
  62. package/dist/server/lib/dbItems/createUser.js +1884 -0
  63. package/dist/server/lib/dbItems/createUser.js.map +1 -0
  64. package/dist/server/lib/dbItems/index.js +2043 -0
  65. package/dist/server/lib/dbItems/index.js.map +1 -0
  66. package/dist/server/lib/dbItems/updateItem.js +1873 -0
  67. package/dist/server/lib/dbItems/updateItem.js.map +1 -0
  68. package/dist/server/lib/dbItems/updateItemDate.js +1872 -0
  69. package/dist/server/lib/dbItems/updateItemDate.js.map +1 -0
  70. package/dist/server/lib/httpLogger.js +1066 -0
  71. package/dist/server/lib/httpLogger.js.map +1 -0
  72. package/dist/server/lib/logger.js +1852 -0
  73. package/dist/server/lib/logger.js.map +1 -0
  74. package/dist/server/lib/startup/createBasicUsers.js +1901 -0
  75. package/dist/server/lib/startup/createBasicUsers.js.map +1 -0
  76. package/dist/server/lib/startup/createInitialSettings.js +820 -0
  77. package/dist/server/lib/startup/createInitialSettings.js.map +1 -0
  78. package/dist/server/lib/startup/createTempDir.js +1066 -0
  79. package/dist/server/lib/startup/createTempDir.js.map +1 -0
  80. package/dist/server/lib/startup/createTestsUsers.js +1916 -0
  81. package/dist/server/lib/startup/createTestsUsers.js.map +1 -0
  82. package/dist/server/lib/startup/index.js +2071 -0
  83. package/dist/server/lib/startup/index.js.map +1 -0
  84. package/dist/server/lib//321/201omparison/comparator.js +1955 -0
  85. package/dist/server/lib//321/201omparison/comparator.js.map +1 -0
  86. package/dist/server/lib//321/201omparison/compareImagesNode.js +91 -0
  87. package/dist/server/lib//321/201omparison/compareImagesNode.js.map +1 -0
  88. package/dist/server/lib//321/201omparison/index.js +1955 -0
  89. package/dist/server/lib//321/201omparison/index.js.map +1 -0
  90. package/dist/server/middlewares/authorization.js +1994 -0
  91. package/dist/server/middlewares/authorization.js.map +1 -0
  92. package/dist/server/middlewares/compressionFilter.js +47 -0
  93. package/dist/server/middlewares/compressionFilter.js.map +1 -0
  94. package/dist/server/middlewares/disableCors.js +1073 -0
  95. package/dist/server/middlewares/disableCors.js.map +1 -0
  96. package/dist/server/middlewares/ensureLogin/ensureLoggedIn.js +2103 -0
  97. package/dist/server/middlewares/ensureLogin/ensureLoggedIn.js.map +1 -0
  98. package/dist/server/middlewares/ensureLogin/index.js +2087 -0
  99. package/dist/server/middlewares/ensureLogin/index.js.map +1 -0
  100. package/dist/server/middlewares/errorHandler.js +1886 -0
  101. package/dist/server/middlewares/errorHandler.js.map +1 -0
  102. package/dist/server/middlewares/index.js +2025 -0
  103. package/dist/server/middlewares/index.js.map +1 -0
  104. package/dist/server/models/App.model.js +145 -0
  105. package/dist/server/models/App.model.js.map +1 -0
  106. package/dist/server/models/AppSettings.model.js +105 -0
  107. package/dist/server/models/AppSettings.model.js.map +1 -0
  108. package/dist/server/models/Baseline.model.js +187 -0
  109. package/dist/server/models/Baseline.model.js.map +1 -0
  110. package/dist/server/models/Check.model.js +241 -0
  111. package/dist/server/models/Check.model.js.map +1 -0
  112. package/dist/server/models/Log.model.js +139 -0
  113. package/dist/server/models/Log.model.js.map +1 -0
  114. package/dist/server/models/Run.model.js +154 -0
  115. package/dist/server/models/Run.model.js.map +1 -0
  116. package/dist/server/models/Snapshot.model.js +148 -0
  117. package/dist/server/models/Snapshot.model.js.map +1 -0
  118. package/dist/server/models/Suite.model.js +151 -0
  119. package/dist/server/models/Suite.model.js.map +1 -0
  120. package/dist/server/models/Test.model.js +248 -0
  121. package/dist/server/models/Test.model.js.map +1 -0
  122. package/dist/server/models/User.model.js +169 -0
  123. package/dist/server/models/User.model.js.map +1 -0
  124. package/dist/server/models/index.js +720 -0
  125. package/dist/server/models/index.js.map +1 -0
  126. package/dist/server/models/plugins/index.js +159 -0
  127. package/dist/server/models/plugins/index.js.map +1 -0
  128. package/dist/server/models/plugins/paginate.plugin.js +68 -0
  129. package/dist/server/models/plugins/paginate.plugin.js.map +1 -0
  130. package/dist/server/models/plugins/paginateDistinct.plugin.js +73 -0
  131. package/dist/server/models/plugins/paginateDistinct.plugin.js.map +1 -0
  132. package/dist/server/models/plugins/toJSON.plugin.js +56 -0
  133. package/dist/server/models/plugins/toJSON.plugin.js.map +1 -0
  134. package/dist/server/models/plugins/utils.js +19 -0
  135. package/dist/server/models/plugins/utils.js.map +1 -0
  136. package/dist/server/routes/ui/admin.js +2082 -0
  137. package/dist/server/routes/ui/admin.js.map +1 -0
  138. package/dist/server/routes/ui/auth.js +711 -0
  139. package/dist/server/routes/ui/auth.js.map +1 -0
  140. package/dist/server/routes/ui/index.js +2036 -0
  141. package/dist/server/routes/ui/index.js.map +1 -0
  142. package/dist/server/routes/v1/app.route.js +4372 -0
  143. package/dist/server/routes/v1/app.route.js.map +1 -0
  144. package/dist/server/routes/v1/auth.route.js +2325 -0
  145. package/dist/server/routes/v1/auth.route.js.map +1 -0
  146. package/dist/server/routes/v1/baselines.route.js +2487 -0
  147. package/dist/server/routes/v1/baselines.route.js.map +1 -0
  148. package/dist/server/routes/v1/checks.route.js +2840 -0
  149. package/dist/server/routes/v1/checks.route.js.map +1 -0
  150. package/dist/server/routes/v1/client.route.js +3764 -0
  151. package/dist/server/routes/v1/client.route.js.map +1 -0
  152. package/dist/server/routes/v1/index.route.js +6536 -0
  153. package/dist/server/routes/v1/index.route.js.map +1 -0
  154. package/dist/server/routes/v1/logs.route.js +2426 -0
  155. package/dist/server/routes/v1/logs.route.js.map +1 -0
  156. package/dist/server/routes/v1/runs.route.js +2771 -0
  157. package/dist/server/routes/v1/runs.route.js.map +1 -0
  158. package/dist/server/routes/v1/settings.route.js +2349 -0
  159. package/dist/server/routes/v1/settings.route.js.map +1 -0
  160. package/dist/server/routes/v1/snapshots.route.js +2361 -0
  161. package/dist/server/routes/v1/snapshots.route.js.map +1 -0
  162. package/dist/server/routes/v1/suites.route.js +2713 -0
  163. package/dist/server/routes/v1/suites.route.js.map +1 -0
  164. package/dist/server/routes/v1/tasks.route.js +2761 -0
  165. package/dist/server/routes/v1/tasks.route.js.map +1 -0
  166. package/dist/server/routes/v1/test_distinct.route.js +2714 -0
  167. package/dist/server/routes/v1/test_distinct.route.js.map +1 -0
  168. package/dist/server/routes/v1/tests.route.js +2895 -0
  169. package/dist/server/routes/v1/tests.route.js.map +1 -0
  170. package/dist/server/routes/v1/users.route.js +4619 -0
  171. package/dist/server/routes/v1/users.route.js.map +1 -0
  172. package/dist/server/schemas/App.schema.js +102 -0
  173. package/dist/server/schemas/App.schema.js.map +1 -0
  174. package/dist/server/schemas/Auth.schema.js +116 -0
  175. package/dist/server/schemas/Auth.schema.js.map +1 -0
  176. package/dist/server/schemas/Baseline.schema.js +183 -0
  177. package/dist/server/schemas/Baseline.schema.js.map +1 -0
  178. package/dist/server/schemas/Check.schema.js +198 -0
  179. package/dist/server/schemas/Check.schema.js.map +1 -0
  180. package/dist/server/schemas/Client.schema.js +455 -0
  181. package/dist/server/schemas/Client.schema.js.map +1 -0
  182. package/dist/server/schemas/CreateCheck.shema.js +47 -0
  183. package/dist/server/schemas/CreateCheck.shema.js.map +1 -0
  184. package/dist/server/schemas/GetBaseline.shema.js +56 -0
  185. package/dist/server/schemas/GetBaseline.shema.js.map +1 -0
  186. package/dist/server/schemas/Logs.schema.js +140 -0
  187. package/dist/server/schemas/Logs.schema.js.map +1 -0
  188. package/dist/server/schemas/Runs.schema.js +128 -0
  189. package/dist/server/schemas/Runs.schema.js.map +1 -0
  190. package/dist/server/schemas/Settings.schema.js +156 -0
  191. package/dist/server/schemas/Settings.schema.js.map +1 -0
  192. package/dist/server/schemas/SkipValid.schema.js +32 -0
  193. package/dist/server/schemas/SkipValid.schema.js.map +1 -0
  194. package/dist/server/schemas/SnapshotDiff.schema.js +44 -0
  195. package/dist/server/schemas/SnapshotDiff.schema.js.map +1 -0
  196. package/dist/server/schemas/Snapshots.schema.js +115 -0
  197. package/dist/server/schemas/Snapshots.schema.js.map +1 -0
  198. package/dist/server/schemas/Suite.schema.js +114 -0
  199. package/dist/server/schemas/Suite.schema.js.map +1 -0
  200. package/dist/server/schemas/Test.schema.js +204 -0
  201. package/dist/server/schemas/Test.schema.js.map +1 -0
  202. package/dist/server/schemas/TestDistinct.schema.js +63 -0
  203. package/dist/server/schemas/TestDistinct.schema.js.map +1 -0
  204. package/dist/server/schemas/User.schema.js +139 -0
  205. package/dist/server/schemas/User.schema.js.map +1 -0
  206. package/dist/server/schemas/common/ApiError.schema.js +51 -0
  207. package/dist/server/schemas/common/ApiError.schema.js.map +1 -0
  208. package/dist/server/schemas/common/Error.schema.js +47 -0
  209. package/dist/server/schemas/common/Error.schema.js.map +1 -0
  210. package/dist/server/schemas/common/RequestPagination.schema.js +121 -0
  211. package/dist/server/schemas/common/RequestPagination.schema.js.map +1 -0
  212. package/dist/server/schemas/common/Version.schema.js +36 -0
  213. package/dist/server/schemas/common/Version.schema.js.map +1 -0
  214. package/dist/server/schemas/common/requestQueryFilterSchema.schema.js +53 -0
  215. package/dist/server/schemas/common/requestQueryFilterSchema.schema.js.map +1 -0
  216. package/dist/server/schemas/index.js +155 -0
  217. package/dist/server/schemas/index.js.map +1 -0
  218. package/dist/server/schemas/utils/commonValidations.js +82 -0
  219. package/dist/server/schemas/utils/commonValidations.js.map +1 -0
  220. package/dist/server/schemas/utils/createRequestBodySchema.js +32 -0
  221. package/dist/server/schemas/utils/createRequestBodySchema.js.map +1 -0
  222. package/dist/server/schemas/utils/createRequestOpenApiBodySchema.js +35 -0
  223. package/dist/server/schemas/utils/createRequestOpenApiBodySchema.js.map +1 -0
  224. package/dist/server/schemas/utils/createRequestParamsSchema.js +93 -0
  225. package/dist/server/schemas/utils/createRequestParamsSchema.js.map +1 -0
  226. package/dist/server/schemas/utils/createRequestQuerySchema.js +32 -0
  227. package/dist/server/schemas/utils/createRequestQuerySchema.js.map +1 -0
  228. package/dist/server/schemas/utils/index.js +84 -0
  229. package/dist/server/schemas/utils/index.js.map +1 -0
  230. package/dist/server/server.js +6921 -0
  231. package/dist/server/server.js.map +1 -0
  232. package/dist/server/server_old.js +7284 -0
  233. package/dist/server/server_old.js.map +1 -0
  234. package/dist/server/services/app.service.js +696 -0
  235. package/dist/server/services/app.service.js.map +1 -0
  236. package/dist/server/services/auth.service.js +2025 -0
  237. package/dist/server/services/auth.service.js.map +1 -0
  238. package/dist/server/services/check.service.js +2149 -0
  239. package/dist/server/services/check.service.js.map +1 -0
  240. package/dist/server/services/client.service.js +2648 -0
  241. package/dist/server/services/client.service.js.map +1 -0
  242. package/dist/server/services/generic.service.js +1888 -0
  243. package/dist/server/services/generic.service.js.map +1 -0
  244. package/dist/server/services/index.js +3548 -0
  245. package/dist/server/services/index.js.map +1 -0
  246. package/dist/server/services/logs.service.js +1875 -0
  247. package/dist/server/services/logs.service.js.map +1 -0
  248. package/dist/server/services/run.service.js +2221 -0
  249. package/dist/server/services/run.service.js.map +1 -0
  250. package/dist/server/services/snapshot.service.js +1921 -0
  251. package/dist/server/services/snapshot.service.js.map +1 -0
  252. package/dist/server/services/suite.service.js +2218 -0
  253. package/dist/server/services/suite.service.js.map +1 -0
  254. package/dist/server/services/tasks.service.js +2288 -0
  255. package/dist/server/services/tasks.service.js.map +1 -0
  256. package/dist/server/services/test.service.js +2230 -0
  257. package/dist/server/services/test.service.js.map +1 -0
  258. package/dist/server/services/user.service.js +1925 -0
  259. package/dist/server/services/user.service.js.map +1 -0
  260. package/dist/server/utils/ApiError.js +39 -0
  261. package/dist/server/utils/ApiError.js.map +1 -0
  262. package/dist/server/utils/ProgressBar.js +54 -0
  263. package/dist/server/utils/ProgressBar.js.map +1 -0
  264. package/dist/server/utils/ServiceResponse.js +45 -0
  265. package/dist/server/utils/ServiceResponse.js.map +1 -0
  266. package/dist/server/utils/buildIdentObject.js +52 -0
  267. package/dist/server/utils/buildIdentObject.js.map +1 -0
  268. package/dist/server/utils/calculateAcceptedStatus.js +710 -0
  269. package/dist/server/utils/calculateAcceptedStatus.js.map +1 -0
  270. package/dist/server/utils/catchAsync.js +32 -0
  271. package/dist/server/utils/catchAsync.js.map +1 -0
  272. package/dist/server/utils/checkIdent.js +36 -0
  273. package/dist/server/utils/checkIdent.js.map +1 -0
  274. package/dist/server/utils/dateToISO8601.js +30 -0
  275. package/dist/server/utils/dateToISO8601.js.map +1 -0
  276. package/dist/server/utils/deserializeIfJSON.js +706 -0
  277. package/dist/server/utils/deserializeIfJSON.js.map +1 -0
  278. package/dist/server/utils/errMsg.js +33 -0
  279. package/dist/server/utils/errMsg.js.map +1 -0
  280. package/dist/server/utils/formatISOToDateTime.js +31 -0
  281. package/dist/server/utils/formatISOToDateTime.js.map +1 -0
  282. package/dist/server/utils/ident.js +31 -0
  283. package/dist/server/utils/ident.js.map +1 -0
  284. package/dist/server/utils/index.js +910 -0
  285. package/dist/server/utils/index.js.map +1 -0
  286. package/dist/server/utils/isJSON.js +34 -0
  287. package/dist/server/utils/isJSON.js.map +1 -0
  288. package/dist/server/utils/paramsGuard.js +45 -0
  289. package/dist/server/utils/paramsGuard.js.map +1 -0
  290. package/dist/server/utils/pick.js +35 -0
  291. package/dist/server/utils/pick.js.map +1 -0
  292. package/dist/server/utils/prettyCheckParams.js +37 -0
  293. package/dist/server/utils/prettyCheckParams.js.map +1 -0
  294. package/dist/server/utils/removeEmptyProperties.js +34 -0
  295. package/dist/server/utils/removeEmptyProperties.js.map +1 -0
  296. package/dist/server/utils/subDays.js +32 -0
  297. package/dist/server/utils/subDays.js.map +1 -0
  298. package/dist/server/utils/validateRequest.js +1922 -0
  299. package/dist/server/utils/validateRequest.js.map +1 -0
  300. package/dist/server/utils/waitUntil.js +43 -0
  301. package/dist/server/utils/waitUntil.js.map +1 -0
  302. package/dist/tasks/backup.js +1085 -0
  303. package/dist/tasks/backup.js.map +1 -0
  304. package/dist/tasks/lib/index.js +717 -0
  305. package/dist/tasks/lib/index.js.map +1 -0
  306. package/dist/tasks/lib/utils.js +1070 -0
  307. package/dist/tasks/lib/utils.js.map +1 -0
  308. package/dist/tasks/migrations/2.0.migration.js +908 -0
  309. package/dist/tasks/migrations/2.0.migration.js.map +1 -0
  310. package/dist/tasks/reindex.js +1742 -0
  311. package/dist/tasks/reindex.js.map +1 -0
  312. package/dist/tasks/restore.js +1097 -0
  313. package/dist/tasks/restore.js.map +1 -0
  314. package/docker-compose.yml +3 -3
  315. package/mvc/views/react/admin/index.html +4 -4
  316. package/mvc/views/react/assets/{LogicalGroup.6c0a9f4a.js → LogicalGroup.80e37bbf.js} +1 -22
  317. package/mvc/views/react/assets/{PasswordInput.b97a4ef7.js → PasswordInput.eb05d2ed.js} +1 -1
  318. package/mvc/views/react/assets/{admin.6d843d1b.js → admin.d6aa02f7.js} +3 -3
  319. package/mvc/views/react/assets/{auth.ecf25364.js → auth.e49d0968.js} +3 -2
  320. package/mvc/views/react/assets/{root.25abcc85.js → root.b071750f.js} +7 -9
  321. package/mvc/views/react/assets/{use-form.10003abf.js → use-form.c4a2cf47.js} +203 -151
  322. package/mvc/views/react/auth/index.html +3 -3
  323. package/mvc/views/react/index2/index.html +3 -3
  324. package/package.json +45 -14
  325. package/src/seeds/testAdmin.json +10 -0
  326. package/src/server/api-docs/openAPIDocumentGenerator.ts +48 -0
  327. package/src/server/api-docs/openAPIResponseBuilders.ts +38 -0
  328. package/src/server/api-docs/openAPIRouter.ts +18 -0
  329. package/src/server/api-docs/serviceResponse.ts +11 -0
  330. package/src/server/app.ts +77 -0
  331. package/src/server/config.ts +57 -0
  332. package/src/server/controllers/app.controller.ts +23 -0
  333. package/src/server/controllers/auth.controller.ts +149 -0
  334. package/src/server/controllers/baseline.controller.ts +32 -0
  335. package/src/server/controllers/{check.controller.js → check.controller.ts} +17 -14
  336. package/src/server/controllers/client.controller.ts +134 -0
  337. package/src/server/controllers/index.ts +27 -0
  338. package/src/server/controllers/logs.controller.ts +36 -0
  339. package/src/server/controllers/runs.controller.ts +32 -0
  340. package/src/server/controllers/settings.controller.ts +28 -0
  341. package/src/server/controllers/snapshots.controller.ts +24 -0
  342. package/src/server/controllers/suite.controller.ts +30 -0
  343. package/src/server/controllers/tasks.controller.ts +47 -0
  344. package/src/server/controllers/test.controller.ts +62 -0
  345. package/src/server/controllers/users.controller.ts +89 -0
  346. package/src/server/envConfig.ts +36 -0
  347. package/src/server/lib/AppSettings/AppSettings.ts +88 -0
  348. package/src/server/lib/AppSettings/index.ts +1 -0
  349. package/src/server/lib/connectDb.ts +18 -0
  350. package/src/server/lib/dbItems/createAppIfNotExist.ts +26 -0
  351. package/src/server/lib/dbItems/createItemIfNotExist.ts +29 -0
  352. package/src/server/lib/dbItems/createItemProm.ts +22 -0
  353. package/src/server/lib/dbItems/createRunIfNotExist.ts +44 -0
  354. package/src/server/lib/dbItems/createSuiteIfNotExist.ts +26 -0
  355. package/src/server/lib/dbItems/createTest.ts +7 -0
  356. package/src/server/lib/dbItems/createUser.ts +7 -0
  357. package/src/server/lib/dbItems/index.ts +12 -0
  358. package/src/server/lib/dbItems/updateItem.ts +17 -0
  359. package/src/server/lib/dbItems/updateItemDate.ts +18 -0
  360. package/src/server/lib/httpLogger.ts +14 -0
  361. package/src/server/lib/logger.ts +147 -0
  362. package/src/server/lib/startup/createBasicUsers.ts +25 -0
  363. package/src/server/lib/startup/createInitialSettings.ts +8 -0
  364. package/src/server/lib/startup/createTempDir.ts +9 -0
  365. package/src/server/lib/startup/createTestsUsers.ts +17 -0
  366. package/src/server/lib/startup/index.ts +4 -0
  367. package/src/server/lib//321/201omparison/comparator.ts +49 -0
  368. package/src/server/lib//321/201omparison/compareImagesNode.ts +61 -0
  369. package/src/server/lib//321/201omparison/index.ts +1 -0
  370. package/src/server/middlewares/{authorization.js → authorization.ts} +23 -14
  371. package/src/server/middlewares/compressionFilter.ts +9 -0
  372. package/src/server/middlewares/disableCors.ts +32 -0
  373. package/src/server/{lib/ensureLogin/ensureLoggedIn.js → middlewares/ensureLogin/ensureLoggedIn.ts} +60 -63
  374. package/src/server/middlewares/ensureLogin/index.ts +2 -0
  375. package/src/server/middlewares/errorHandler.ts +42 -0
  376. package/src/server/middlewares/index.ts +4 -0
  377. package/src/server/models/App.model.ts +42 -0
  378. package/src/server/models/AppSettings.model.ts +48 -0
  379. package/src/server/models/Baseline.model.ts +98 -0
  380. package/src/server/models/Check.model.ts +166 -0
  381. package/src/server/models/Log.model.ts +36 -0
  382. package/src/server/models/Run.model.ts +55 -0
  383. package/src/server/models/Snapshot.model.ts +47 -0
  384. package/src/server/models/Suite.model.ts +50 -0
  385. package/src/server/models/Test.model.ts +117 -0
  386. package/src/server/models/User.model.ts +77 -0
  387. package/src/server/models/index.ts +11 -0
  388. package/src/server/models/plugins/index.ts +3 -0
  389. package/src/server/models/plugins/paginate.plugin.ts +74 -0
  390. package/src/server/models/plugins/paginateDistinct.plugin.ts +90 -0
  391. package/src/server/models/plugins/toJSON.plugin.ts +41 -0
  392. package/src/server/models/plugins/utils.ts +34 -0
  393. package/src/server/routes/ui/admin.ts +29 -0
  394. package/src/server/routes/ui/auth.ts +22 -0
  395. package/src/server/routes/ui/index.ts +25 -0
  396. package/src/server/routes/v1/app.route.ts +48 -0
  397. package/src/server/routes/v1/auth.route.ts +88 -0
  398. package/src/server/routes/v1/baselines.route.ts +52 -0
  399. package/src/server/routes/v1/checks.route.ts +85 -0
  400. package/src/server/routes/v1/client.route.ts +123 -0
  401. package/src/server/routes/v1/{index.js → index.route.ts} +16 -16
  402. package/src/server/routes/v1/logs.route.ts +65 -0
  403. package/src/server/routes/v1/runs.route.ts +55 -0
  404. package/src/server/routes/v1/settings.route.ts +54 -0
  405. package/src/server/routes/v1/snapshots.route.ts +32 -0
  406. package/src/server/routes/v1/suites.route.ts +52 -0
  407. package/src/server/routes/v1/tasks.route.ts +121 -0
  408. package/src/server/routes/v1/test_distinct.route.ts +32 -0
  409. package/src/server/routes/v1/tests.route.ts +90 -0
  410. package/src/server/routes/v1/users.route.ts +115 -0
  411. package/src/server/schemas/App.schema.ts +19 -0
  412. package/src/server/schemas/Auth.schema.ts +27 -0
  413. package/src/server/schemas/Baseline.schema.ts +106 -0
  414. package/src/server/schemas/Check.schema.ts +117 -0
  415. package/src/server/schemas/Client.schema.ts +380 -0
  416. package/src/server/schemas/GetBaseline.shema.ts +34 -0
  417. package/src/server/schemas/Logs.schema.ts +61 -0
  418. package/src/server/schemas/Runs.schema.ts +45 -0
  419. package/src/server/schemas/Settings.schema.ts +71 -0
  420. package/src/server/schemas/SkipValid.schema.ts +2 -0
  421. package/src/server/schemas/SnapshotDiff.schema.ts +18 -0
  422. package/src/server/schemas/Snapshots.schema.ts +42 -0
  423. package/src/server/schemas/Suite.schema.ts +34 -0
  424. package/src/server/schemas/Test.schema.ts +126 -0
  425. package/src/server/schemas/TestDistinct.schema.ts +36 -0
  426. package/src/server/schemas/User.schema.ts +59 -0
  427. package/src/server/schemas/common/ApiError.schema.ts +23 -0
  428. package/src/server/schemas/common/Error.schema.ts +19 -0
  429. package/src/server/schemas/common/RequestPagination.schema.ts +16 -0
  430. package/src/server/schemas/common/Version.schema.ts +14 -0
  431. package/src/server/schemas/common/requestQueryFilterSchema.schema.ts +32 -0
  432. package/src/server/schemas/index.ts +4 -0
  433. package/src/server/schemas/utils/commonValidations.ts +51 -0
  434. package/src/server/schemas/utils/createRequestBodySchema.ts +2 -0
  435. package/src/server/schemas/utils/createRequestOpenApiBodySchema.ts +6 -0
  436. package/src/server/schemas/utils/createRequestParamsSchema.ts +7 -0
  437. package/src/server/schemas/utils/createRequestQuerySchema.ts +2 -0
  438. package/src/server/schemas/utils/index.ts +3 -0
  439. package/src/server/server.ts +54 -0
  440. package/src/server/server_old.ts +185 -0
  441. package/src/server/services/app.service.ts +9 -0
  442. package/src/server/services/auth.service.ts +94 -0
  443. package/src/server/services/check.service.ts +241 -0
  444. package/src/server/services/client.service.ts +691 -0
  445. package/src/server/services/generic.service.ts +37 -0
  446. package/src/server/services/index.ts +24 -0
  447. package/src/server/services/logs.service.ts +27 -0
  448. package/src/server/services/run.service.ts +32 -0
  449. package/src/server/services/snapshot.service.ts +78 -0
  450. package/src/server/services/suite.service.ts +30 -0
  451. package/src/server/services/{tasks.service.js → tasks.service.ts} +157 -228
  452. package/src/server/services/test.service.ts +65 -0
  453. package/src/server/services/user.service.ts +90 -0
  454. package/src/server/utils/{ApiError.js → ApiError.ts} +5 -2
  455. package/src/server/utils/ProgressBar.ts +35 -0
  456. package/src/server/utils/ServiceResponse.ts +18 -0
  457. package/src/server/utils/buildIdentObject.ts +34 -0
  458. package/src/server/utils/calculateAcceptedStatus.ts +22 -0
  459. package/src/server/utils/catchAsync.ts +11 -0
  460. package/src/server/utils/checkIdent.ts +4 -0
  461. package/src/server/utils/dateToISO8601.ts +5 -0
  462. package/src/server/utils/deserializeIfJSON.ts +9 -0
  463. package/src/server/utils/errMsg.ts +3 -0
  464. package/src/server/utils/{formatISOToDateTime.js → formatISOToDateTime.ts} +2 -2
  465. package/src/server/utils/ident.ts +1 -0
  466. package/src/server/utils/index.ts +24 -0
  467. package/src/server/utils/isJSON.ts +14 -0
  468. package/src/server/utils/paramsGuard.ts +7 -6
  469. package/src/server/utils/pick.ts +17 -0
  470. package/src/server/utils/prettyCheckParams.ts +18 -0
  471. package/src/server/utils/removeEmptyProperties.ts +5 -0
  472. package/src/server/utils/{subDays.js → subDays.ts} +2 -2
  473. package/src/server/utils/validateRequest.ts +56 -0
  474. package/src/server/utils/waitUntil.ts +14 -0
  475. package/src/tasks/backup.ts +1 -1
  476. package/src/tasks/lib/index.ts +13 -0
  477. package/src/tasks/lib/utils.ts +14 -0
  478. package/src/tasks/migrations/2.0.migration.ts +2 -2
  479. package/src/tasks/reindex.ts +34 -0
  480. package/src/tasks/restore.ts +1 -1
  481. package/src/types/ExtRequest.ts +10 -0
  482. package/src/types/LogOpts.ts +20 -0
  483. package/src/types/Midleware.ts +3 -0
  484. package/src/types/RequestUser.ts +14 -0
  485. package/src/types/index.ts +4 -0
  486. package/src/ui-app/README.md +2 -2
  487. package/src/ui-app/auth/components/ChangePasswordForm.tsx +1 -1
  488. package/src/ui-app/index2/components/Tests/Table/Checks/CheckDetails/Canvas/mainView.ts +3 -3
  489. package/src/ui-app/index2/components/Tests/Table/Checks/Checks.tsx +30 -2
  490. package/src/ui-app/package-lock.json +10 -16
  491. package/src/ui-app/package.json +2 -2
  492. package/src/ui-app/shared/services/checks.service.ts +1 -1
  493. package/src/ui-app/shared/services/generic.service.ts +0 -28
  494. package/src/ui-app/tsconfig.json +3 -2
  495. package/config.js +0 -17
  496. package/dist/config.js +0 -16
  497. package/dist/src/server/models/index.js +0 -508
  498. package/dist/src/server/models/plugins/index.js +0 -4
  499. package/dist/src/server/models/plugins/paginate.plugin.js +0 -76
  500. package/dist/src/server/models/plugins/paginateDistinct.plugin.js +0 -76
  501. package/dist/src/server/models/plugins/toJSON.plugin.js +0 -39
  502. package/dist/src/server/schemas/createCheck.shema.js +0 -17
  503. package/dist/src/server/schemas/getBaseline.shema.js +0 -12
  504. package/dist/src/server/utils/paramsGuard.js +0 -18
  505. package/dist/src/tasks/backup.js +0 -68
  506. package/dist/src/tasks/lib/common.js +0 -14
  507. package/dist/src/tasks/lib/utils.js +0 -14
  508. package/dist/src/tasks/migrations/2.0.migration.js +0 -86
  509. package/dist/src/tasks/migrations/2.0.migration_mql.js +0 -57
  510. package/dist/src/tasks/reindex.js +0 -28
  511. package/dist/src/tasks/restore.js +0 -86
  512. package/dist/tsconfig.tsbuildinfo +0 -1
  513. package/mvc/views/react/index.html +0 -19
  514. package/server.js +0 -166
  515. package/src/server/controllers/app.controller.js +0 -21
  516. package/src/server/controllers/auth.controller.js +0 -156
  517. package/src/server/controllers/baseline.controller.js +0 -24
  518. package/src/server/controllers/client.controller.js +0 -173
  519. package/src/server/controllers/index.js +0 -12
  520. package/src/server/controllers/logs.controller.js +0 -30
  521. package/src/server/controllers/runs.controller.js +0 -25
  522. package/src/server/controllers/settings.controller.js +0 -23
  523. package/src/server/controllers/snapshots.controller.js +0 -17
  524. package/src/server/controllers/suite.controller.js +0 -24
  525. package/src/server/controllers/tasks.controller.js +0 -47
  526. package/src/server/controllers/test.controller.js +0 -70
  527. package/src/server/controllers/users.controller.js +0 -79
  528. package/src/server/data/custom_devices.json +0 -8
  529. package/src/server/lib/AppSettings.js +0 -56
  530. package/src/server/lib/comparator.js +0 -147
  531. package/src/server/lib/compareImagesNode.js +0 -60
  532. package/src/server/lib/dbItems.js +0 -215
  533. package/src/server/lib/ensureLogin/ensureLoggedOut.js +0 -44
  534. package/src/server/lib/getElementsByPixPositionsFromDump.js +0 -72
  535. package/src/server/lib/logger.js +0 -95
  536. package/src/server/lib/onStart.js +0 -53
  537. package/src/server/lib/parseDiff.js.bak +0 -72
  538. package/src/server/middlewares/disableCors.js +0 -19
  539. package/src/server/models/index.js +0 -534
  540. package/src/server/models/plugins/index.js +0 -3
  541. package/src/server/models/plugins/paginate.plugin.js +0 -83
  542. package/src/server/models/plugins/paginateDistinct.plugin.js +0 -80
  543. package/src/server/models/plugins/toJSON.plugin.js +0 -44
  544. package/src/server/routes/ui/admin.js +0 -20
  545. package/src/server/routes/ui/auth.js +0 -15
  546. package/src/server/routes/ui/index.js +0 -19
  547. package/src/server/routes/v1/app.route.js +0 -9
  548. package/src/server/routes/v1/auth.route.js +0 -12
  549. package/src/server/routes/v1/baselines.route.js +0 -14
  550. package/src/server/routes/v1/checks.route.js +0 -25
  551. package/src/server/routes/v1/client.route.js +0 -39
  552. package/src/server/routes/v1/logs.route.js +0 -16
  553. package/src/server/routes/v1/runs.route.js +0 -15
  554. package/src/server/routes/v1/settings.route.js +0 -23
  555. package/src/server/routes/v1/snapshots.route.js +0 -11
  556. package/src/server/routes/v1/suites.route.js +0 -15
  557. package/src/server/routes/v1/tasks.route.js +0 -59
  558. package/src/server/routes/v1/test.route.js +0 -20
  559. package/src/server/routes/v1/test_distinct.route.js +0 -14
  560. package/src/server/routes/v1/users.route.js +0 -36
  561. package/src/server/schemas/getBaseline.shema.ts +0 -12
  562. package/src/server/services/app.service.js +0 -23
  563. package/src/server/services/check.service.js +0 -178
  564. package/src/server/services/client.service.js +0 -648
  565. package/src/server/services/generic.service.js +0 -51
  566. package/src/server/services/index.js +0 -12
  567. package/src/server/services/logs.service.js +0 -38
  568. package/src/server/services/run.service.js +0 -40
  569. package/src/server/services/suite.service.js +0 -39
  570. package/src/server/services/test.service.js +0 -72
  571. package/src/server/services/user.service.js +0 -128
  572. package/src/server/utils/catchAsync.js +0 -8
  573. package/src/server/utils/check.js +0 -58
  574. package/src/server/utils/dateToISO8601.js +0 -2
  575. package/src/server/utils/deserializeIfJSON.js +0 -9
  576. package/src/server/utils/index.js +0 -10
  577. package/src/server/utils/isJSON.js +0 -6
  578. package/src/server/utils/pick.js +0 -15
  579. package/src/server/utils/prettyCheckParams.js +0 -13
  580. package/src/server/utils/snapshots.js +0 -73
  581. package/src/server/utils/tests.js +0 -36
  582. package/src/server/utils/utils.js +0 -146
  583. package/src/tasks/backup.js.bak +0 -84
  584. package/src/tasks/lib/common.js +0 -24
  585. package/src/tasks/lib/utils.js +0 -15
  586. package/src/tasks/reindex.js +0 -36
  587. package/src/tasks/restore.js.bak +0 -100
  588. package/src/ui-app/tsconfig.node.json +0 -12
  589. package/static/js/canvasjs.min.js.bak +0 -957
  590. package/static/js/chart.js.bak +0 -92
  591. package/static/js/jquery-3.3.1.slim.js.bak +0 -8269
  592. package/static/js/jquery-3.3.1.slim.min.js.bak +0 -2
  593. package/static/js/moment.min.js.bak +0 -2
  594. /package/src/{server/lib → seeds}/admin.json +0 -0
  595. /package/src/{server/lib → seeds}/guest.json +0 -0
  596. /package/src/{server/lib → seeds}/initialAppSettings.json +0 -0
  597. /package/src/{server/lib/testAdmin.json → seeds/testAdmin copy.json} +0 -0
  598. /package/src/{server/lib → seeds}/testUsers.json +0 -0
  599. /package/src/server/schemas/{createCheck.shema.ts → CreateCheck.shema.ts} +0 -0
  600. /package/{static → src/server/static/static}/A.png +0 -0
  601. /package/{static → src/server/static/static}/B.png +0 -0
  602. /package/{static → src/server/static/static}/affected.html +0 -0
  603. /package/{static → src/server/static/static}/affected_2.html +0 -0
  604. /package/{static → src/server/static/static}/data/custom_devices.json +0 -0
  605. /package/{static → src/server/static/static}/grids/desktop-higher.html +0 -0
  606. /package/{static → src/server/static/static}/grids/desktop-wider.html +0 -0
  607. /package/{static → src/server/static/static}/grids/desktop.html +0 -0
  608. /package/{static → src/server/static/static}/grids/fit-in-view.html +0 -0
  609. /package/{static → src/server/static/static}/low_diff_0.png +0 -0
  610. /package/{static → src/server/static/static}/low_diff_1.png +0 -0
  611. /package/{static → src/server/static/static}/vShift.png +0 -0
  612. /package/{static → src/server/static/static}/vShift_bottom.png +0 -0
  613. /package/{static → src/server/static/static}/vShift_top.png +0 -0
@@ -1,648 +0,0 @@
1
- /* eslint-disable valid-jsdoc */
2
- const fss = require('fs');
3
- const hasha = require('hasha');
4
- const { promises: fs } = require('fs');
5
- // const httpStatus = require('http-status');
6
- const {
7
- Snapshot,
8
- Check,
9
- Test,
10
- App,
11
- Baseline,
12
- } = require('../models');
13
- const {
14
- removeEmptyProperties, waitUntil, buildIdentObject, calculateAcceptedStatus, ident,
15
- } = require('../utils/utils');
16
- const orm = require('../lib/dbItems');
17
- const { createItemIfNotExistAsync, createRunIfNotExist, createSuiteIfNotExist } = require('../lib/dbItems');
18
- const { config } = require('../../../config');
19
- const prettyCheckParams = require('../utils/prettyCheckParams');
20
- const { getDiff } = require('../lib/comparator');
21
- // const ApiError = require('../utils/ApiError');
22
-
23
- const $this = this;
24
- $this.logMeta = {
25
- scope: 'client_service',
26
- msgType: 'CLIENT_REQUEST',
27
- };
28
-
29
- async function updateTest(params) {
30
- const opts = { ...params };
31
- const logOpts = {
32
- msgType: 'UPDATE',
33
- itemType: 'test',
34
- scope: 'updateTest',
35
- };
36
- opts.updatedDate = Date.now();
37
- log.debug(`update test id '${opts.id}' with params '${JSON.stringify(opts)}'`, $this, logOpts);
38
-
39
- const test = await Test.findByIdAndUpdate(opts.id, opts)
40
- .exec();
41
-
42
- await test.save();
43
- return test;
44
- }
45
-
46
- const startSession = async (params, username) => {
47
- const logOpts = {
48
- scope: 'createTest',
49
- user: username,
50
- itemType: 'test',
51
- msgType: 'CREATE',
52
- };
53
- // CREATE TESTS
54
- log.info(`create test with name '${params.name}', params: '${JSON.stringify(params)}'`, $this, logOpts);
55
- const opts = removeEmptyProperties({
56
- name: params.name,
57
- status: 'Running',
58
- app: params.app,
59
- tags: params.tags && JSON.parse(params.tags),
60
- branch: params.branch,
61
- viewport: params.viewport,
62
- browserName: params.browser,
63
- browserVersion: params.browserVersion,
64
- browserFullVersion: params.browserFullVersion,
65
- os: params.os,
66
- startDate: new Date(),
67
- updatedDate: new Date(),
68
- });
69
- try {
70
- const app = await createItemIfNotExistAsync(
71
- 'VRSApp',
72
- {
73
- name: params.app,
74
- },
75
- { user: username, itemType: 'app' }
76
- );
77
- opts.app = app._id;
78
-
79
- const run = await createRunIfNotExist(
80
- {
81
- name: params.run,
82
- ident: params.runident,
83
- app: app._id,
84
- },
85
- { user: username, itemType: 'run' }
86
- );
87
- opts.run = run._id;
88
-
89
- const suite = await createSuiteIfNotExist(
90
- {
91
- name: params.suite || 'Others',
92
- app: app._id,
93
- createdDate: new Date(),
94
- },
95
- { user: username, itemType: 'suite' },
96
- );
97
-
98
- opts.suite = suite._id;
99
-
100
- const test = await orm.createTest(opts);
101
- return test;
102
- } catch (e) {
103
- log.error(`cannot start session '${params.i}', params: '${JSON.stringify(params)}'`, $this, logOpts);
104
- throw e;
105
- }
106
- };
107
-
108
- const endSession = async (testId, username) => {
109
- const logOpts = {
110
- msgType: 'END_SESSION',
111
- user: username,
112
- itemType: 'test',
113
- scope: 'stopSession',
114
- ref: testId,
115
- };
116
- await waitUntil(async () => (await Check.find({ test: testId })
117
- .exec())
118
- .filter((ch) => ch.status.toString() !== 'pending').length > 0);
119
- const sessionChecks = await Check.find({ test: testId }).lean().exec();
120
- const checksStatuses = sessionChecks.map((x) => x.status[0]);
121
- const checksViewports = sessionChecks.map((x) => x.viewport);
122
-
123
- const uniqueChecksViewports = Array.from(new Set(checksViewports));
124
- let testViewport;
125
- if (uniqueChecksViewports.length === 1) {
126
- // eslint-disable-next-line prefer-destructuring
127
- testViewport = uniqueChecksViewports[0];
128
- } else {
129
- testViewport = uniqueChecksViewports.length;
130
- }
131
-
132
- let testStatus = 'not set';
133
- if (checksStatuses.some((st) => st === 'failed')) {
134
- testStatus = 'Failed';
135
- }
136
- if (checksStatuses.some((st) => st === 'passed')
137
- && !checksStatuses.some((st) => st === 'failed')) {
138
- testStatus = 'Passed';
139
- }
140
- if (checksStatuses.some((st) => st === 'new')
141
- && !checksStatuses.some((st) => st === 'failed')) {
142
- testStatus = 'Passed';
143
- }
144
- if (checksStatuses.some((st) => st === 'blinking')
145
- && !checksStatuses.some((st) => st === 'failed')) {
146
- testStatus = 'Passed';
147
- }
148
- if (checksStatuses.every((st) => st === 'new')) {
149
- testStatus = 'New';
150
- }
151
- const blinkingCount = checksStatuses.filter((g) => g === 'blinking').length;
152
- const testParams = {
153
- id: testId,
154
- status: testStatus,
155
- blinking: blinkingCount,
156
- calculatedViewport: testViewport,
157
- };
158
- log.info(`the session is over, the test will be updated with parameters: '${JSON.stringify(testParams)}'`, $this, logOpts);
159
- const updatedTest = await updateTest(testParams);
160
- const result = updatedTest.toObject();
161
- result.calculatedStatus = testStatus;
162
- return result;
163
- };
164
-
165
- async function getBaseline(params) {
166
- const identFieldsAccepted = Object.assign(buildIdentObject(params), { markedAs: 'accepted' });
167
- const acceptedBaseline = await Baseline.findOne(identFieldsAccepted, {}, { sort: { createdDate: -1 } });
168
- log.debug(`acceptedBaseline: '${acceptedBaseline ? JSON.stringify(acceptedBaseline) : 'not found'}'`, $this, { itemType: 'baseline' });
169
- if (acceptedBaseline) return acceptedBaseline;
170
- return null;
171
- }
172
-
173
- async function getLastSuccessCheck(identifier) {
174
- const condition = [{
175
- ...identifier,
176
- status: 'new',
177
- }, {
178
- ...identifier,
179
- status: 'passed',
180
- }];
181
- return (await Check.find({
182
- $or: condition,
183
- })
184
- .sort({ updatedDate: -1 })
185
- .limit(1))[0];
186
- }
187
-
188
- async function getNotPendingChecksByIdent(identifier) {
189
- return Check.find({
190
- ...identifier,
191
- status: {
192
- $ne: 'pending',
193
- },
194
- })
195
- .sort({ updatedDate: -1 })
196
- .exec();
197
- }
198
-
199
- async function getSnapshotByImgHash(hash) {
200
- return Snapshot.findOne({ imghash: hash })
201
- .exec();
202
- }
203
-
204
- async function createSnapshot(parameters) {
205
- const {
206
- name,
207
- fileData,
208
- hashCode,
209
- } = parameters;
210
-
211
- const opts = {
212
- name,
213
- };
214
- const logOpts = {
215
- scope: 'createSnapshot',
216
- itemType: 'snapshot',
217
- };
218
- if (!fileData) throw new Error(`cannot create the snapshot, the 'fileData' is not set, name: '${name}'`);
219
-
220
- opts.imghash = hashCode || hasha(fileData);
221
- const snapshot = new Snapshot(opts);
222
- const filename = `${snapshot.id}.png`;
223
- const path = `${config.defaultImagesPath}${filename}`;
224
- log.debug(`save screenshot for: '${name}' snapshot to: '${path}'`, $this, logOpts);
225
- await fs.writeFile(path, fileData);
226
- snapshot.filename = filename;
227
- await snapshot.save();
228
- log.debug(`snapshot was saved: '${JSON.stringify(snapshot)}'`, $this, { ...logOpts, ...{ ref: snapshot._id } });
229
- return snapshot;
230
- }
231
-
232
- async function cloneSnapshot(sourceSnapshot, name) {
233
- const { filename } = sourceSnapshot;
234
- const hashCode = sourceSnapshot.imghash;
235
- const newSnapshot = new Snapshot({
236
- name,
237
- filename,
238
- imghash: hashCode,
239
- });
240
- await newSnapshot.save();
241
- return newSnapshot;
242
- }
243
-
244
- async function compareSnapshots(baselineSnapshot, actual, opts = {}) {
245
- const logOpts = {
246
- scope: 'compareSnapshots',
247
- ref: baselineSnapshot.id,
248
- itemType: 'snapshot',
249
- msgType: 'COMPARE',
250
- };
251
- try {
252
- log.debug(`compare baseline and actual snapshots with ids: [${baselineSnapshot.id}, ${actual.id}]`, $this, logOpts);
253
- log.debug(`current baseline snapshot: ${JSON.stringify(baselineSnapshot)}`, $this, logOpts);
254
- let diff;
255
- if (baselineSnapshot.imghash === actual.imghash) {
256
- log.debug(`baseline and actual snapshot have the identical image hashes: '${baselineSnapshot.imghash}'`, $this, logOpts);
257
- // stub for diff object
258
- diff = {
259
- isSameDimensions: true,
260
- dimensionDifference: {
261
- width: 0,
262
- height: 0,
263
- },
264
- rawMisMatchPercentage: 0,
265
- misMatchPercentage: '0.00',
266
- analysisTime: 0,
267
- executionTotalTime: '0',
268
- };
269
- } else {
270
- const baselinePath = `${config.defaultImagesPath}${baselineSnapshot.filename}`;
271
- const actualPath = `${config.defaultImagesPath}${actual.filename}`;
272
- const baselineData = await fs.readFile(baselinePath);
273
- const actualData = await fs.readFile(actualPath);
274
- log.debug(`baseline path: ${baselinePath}`, $this, logOpts);
275
- log.debug(`actual path: ${actualPath}`, $this, logOpts);
276
- const options = opts;
277
- const baseline = await Baseline.findOne({ snapshootId: baselineSnapshot._id })
278
- .exec();
279
-
280
- if (baseline.ignoreRegions) {
281
- log.debug(`ignore regions: '${baseline.ignoreRegions}', type: '${typeof baseline.ignoreRegions}'`);
282
- options.ignoredBoxes = JSON.parse(baseline.ignoreRegions);
283
- }
284
- options.ignore = baseline.matchType || 'nothing';
285
- diff = await getDiff(baselineData, actualData, options);
286
- }
287
-
288
- log.silly(`the diff is: '${JSON.stringify(diff, null, 2)}'`);
289
- if (diff.rawMisMatchPercentage.toString() !== '0') {
290
- log.debug(`images are different, ids: [${baselineSnapshot.id}, ${actual.id}], rawMisMatchPercentage: '${diff.rawMisMatchPercentage}'`);
291
- }
292
- if (diff.stabMethod && diff.vOffset) {
293
- if (diff.stabMethod === 'downup') {
294
- // this mean that we delete first 'diff.vOffset' line of pixels from actual
295
- // then we will use this during parse actual page DOM dump
296
- actual.vOffset = -diff.vOffset;
297
- await actual.save();
298
- }
299
- if (diff.stabMethod === 'updown') {
300
- // this mean that we delete first 'diff.vOffset' line of pixels from baseline
301
- // then we will use this during parse actual page DOM dump
302
- baselineSnapshot.vOffset = -diff.vOffset;
303
- await baselineSnapshot.save();
304
- }
305
- }
306
- return diff;
307
- } catch (e) {
308
- const errMsg = `cannot compare snapshots: ${e}\n ${e.stack || e.toString()}`;
309
- log.error(errMsg, $this, logOpts);
310
- throw new Error(e);
311
- }
312
- }
313
-
314
- const isBaselineValid = (baseline, logOpts) => {
315
- const keys = [
316
- 'name', 'app', 'branch', 'browserName', 'viewport', 'os',
317
- 'createdDate', 'lastMarkedDate', 'markedAs', 'markedById', 'markedByUsername', 'snapshootId',
318
- ];
319
- // eslint-disable-next-line no-restricted-syntax
320
- for (const key of keys) {
321
- if (!baseline[key]) {
322
- log.error(`invalid baseline, the '${key}' property is empty`, $this, logOpts);
323
- return false;
324
- }
325
- }
326
- return true;
327
- };
328
-
329
- // copy marked* properties from baseline and baseline.snapshotId
330
- const updateCheckParamsFromBaseline = (params, baseline) => {
331
- const updatedParams = { ...params };
332
- updatedParams.baselineId = baseline.snapshootId;
333
- updatedParams.markedAs = baseline.markedAs;
334
- updatedParams.markedDate = baseline.lastMarkedDate;
335
- updatedParams.markedByUsername = baseline.markedByUsername;
336
- return updatedParams;
337
- };
338
-
339
- const prepareActualSnapshot = async (checkParam, snapshotFoundedByHashcode, logOpts) => {
340
- let currentSnapshot;
341
-
342
- const fileData = checkParam.files ? checkParam.files.file.data : false;
343
-
344
- if (snapshotFoundedByHashcode) {
345
- const fullFilename = `${config.defaultImagesPath}${snapshotFoundedByHashcode.filename}`;
346
- if (!fss.existsSync(fullFilename)) {
347
- throw new Error(`Couldn't find the baseline file: '${fullFilename}'`);
348
- }
349
-
350
- log.debug(`snapshot with such hashcode: '${checkParam.hashCode}' is already exists, will clone it`, $this, logOpts);
351
- currentSnapshot = await cloneSnapshot(snapshotFoundedByHashcode, checkParam.name);
352
- } else {
353
- log.debug(`snapshot with such hashcode: '${checkParam.hashCode}' does not exists, will create it`, $this, logOpts);
354
- currentSnapshot = await createSnapshot({
355
- name: checkParam.name,
356
- fileData,
357
- hashCode: checkParam.hashCode,
358
- });
359
- }
360
-
361
- return currentSnapshot;
362
- };
363
-
364
- async function isNeedFiles(checkParam, logOpts) {
365
- const snapshotFoundedByHashcode = await getSnapshotByImgHash(checkParam.hashCode);
366
-
367
- if (!checkParam.hashCode && !checkParam.files) {
368
- log.debug('hashCode or files parameters should be present', $this, logOpts);
369
- return { needFilesStatus: true, snapshotFoundedByHashcode };
370
- }
371
-
372
- if (!checkParam.files && !snapshotFoundedByHashcode) {
373
- log.debug(`cannot find the snapshot with hash: '${checkParam.hashCode}'`, $this, logOpts);
374
- return { needFilesStatus: true, snapshotFoundedByHashcode };
375
- }
376
- return { needFilesStatus: false, snapshotFoundedByHashcode };
377
- }
378
-
379
- async function inspectBaseline(newCheckParams, storedBaseline, checkIdent, currentSnapshot, logOpts) {
380
- // check if baseline exist, if this true set some check properties
381
- // if false set 'not_accepted' of "new" status
382
- let currentBaselineSnapshot = null;
383
- const params = {};
384
- params.failReasons = [];
385
- if (storedBaseline !== null) {
386
- log.debug(`a baseline for check name: '${newCheckParams.name}', id: '${storedBaseline.snapshootId}' is already exists`, $this, logOpts);
387
- if (!isBaselineValid(storedBaseline, logOpts)) {
388
- newCheckParams.failReasons.push('invalid_baseline');
389
- }
390
- Object.assign(params, updateCheckParamsFromBaseline(newCheckParams, storedBaseline));
391
- currentBaselineSnapshot = await Snapshot.findById(storedBaseline.snapshootId);
392
- } else {
393
- const checksWithSameIdent = await getNotPendingChecksByIdent(checkIdent);
394
- if (checksWithSameIdent.length > 0) {
395
- log.error(`checks with ident'${JSON.stringify(checkIdent)}' exist, but baseline is absent`, $this, logOpts);
396
- params.failReasons.push('not_accepted');
397
- params.baselineId = currentSnapshot.id;
398
- currentBaselineSnapshot = currentSnapshot;
399
- } else {
400
- params.baselineId = currentSnapshot.id;
401
- params.status = 'new';
402
- currentBaselineSnapshot = currentSnapshot;
403
- log.debug(`create the new check with params: '${prettyCheckParams(params)}'`, $this, logOpts);
404
- }
405
- }
406
- return { inspectBaselineParams: params, currentBaselineSnapshot };
407
- }
408
-
409
- /* check if we can ignore 1 px dimensions difference from the bottom */
410
- const ignoreDifferentResolutions = ({ height, width }) => {
411
- if ((width === 0) && (height === -1)) return true;
412
- if ((width === 0) && (height === 1)) return true;
413
- return false;
414
- };
415
-
416
- // checkParam.vShifting
417
- const compare = async (expectedSnapshot, actualSnapshot, newCheckParams, vShifting, skipSaveOnCompareError, currentUser) => {
418
- const logOpts = {
419
- scope: 'createCheck.compare',
420
- user: currentUser.username,
421
- itemType: 'check',
422
- msgType: 'COMPARE',
423
- };
424
-
425
- const executionTimer = process.hrtime();
426
- const params = {};
427
- params.failReasons = [...newCheckParams.failReasons];
428
-
429
- let checkCompareResult;
430
- let diffSnapshot;
431
-
432
- const areSnapshotsDifferent = (compareResult) => compareResult.rawMisMatchPercentage.toString() !== '0';
433
- const areSnapshotsWrongDimensions = (compareResult) => !compareResult.isSameDimensions
434
- && !ignoreDifferentResolutions(compareResult.dimensionDifference);
435
-
436
- /** compare actual with baseline if a check isn't new */
437
- if ((newCheckParams.status !== 'new') && (!params.failReasons.includes('not_accepted'))) {
438
- try {
439
- log.debug(`'the check with name: '${newCheckParams.name}' isn't new, make comparing'`, $this, logOpts);
440
- checkCompareResult = await compareSnapshots(expectedSnapshot, actualSnapshot, { vShifting });
441
- log.silly(`ignoreDifferentResolutions: '${ignoreDifferentResolutions(checkCompareResult.dimensionDifference)}'`);
442
- log.silly(`dimensionDifference: '${JSON.stringify(checkCompareResult.dimensionDifference)}`);
443
-
444
- if (areSnapshotsDifferent(checkCompareResult) || areSnapshotsWrongDimensions(checkCompareResult)) {
445
- let logMsg;
446
- if (areSnapshotsWrongDimensions(checkCompareResult)) {
447
- logMsg = 'snapshots have different dimensions';
448
- params.failReasons.push('wrong_dimensions');
449
- }
450
- if (areSnapshotsDifferent(checkCompareResult)) {
451
- logMsg = 'snapshots have differences';
452
- params.failReasons.push('different_images');
453
- }
454
-
455
- log.debug(logMsg, $this, logOpts);
456
- log.debug(`saving diff snapshot for check with name: '${newCheckParams.name}'`, $this, logOpts);
457
- if (!skipSaveOnCompareError) {
458
- diffSnapshot = await createSnapshot({ // reduce duplications!!!
459
- name: newCheckParams.name,
460
- fileData: checkCompareResult.getBuffer(),
461
- });
462
- }
463
- params.diffId = diffSnapshot.id;
464
- params.diffSnapshot = diffSnapshot;
465
- params.status = 'failed';
466
- } else {
467
- params.status = 'passed';
468
- }
469
-
470
- checkCompareResult.totalCheckHandleTime = process.hrtime(executionTimer)
471
- .toString();
472
- params.result = JSON.stringify(checkCompareResult, null, '\t');
473
- } catch (e) {
474
- params.updatedDate = Date.now();
475
- params.status = 'failed';
476
- params.result = { server_error: `error during comparing - ${e.stack || e.toString()}` };
477
- params.failReasons.push('internal_server_error');
478
- log.error(`error during comparing - ${e.stack || e.toString()}`, $this, logOpts);
479
- throw e;
480
- }
481
- }
482
-
483
- if (params.failReasons.length > 0) {
484
- params.status = 'failed';
485
- }
486
- return params;
487
- };
488
-
489
- const createCheckParams = (checkParam, suite, app, test, currentUser) => ({
490
- test: checkParam.testId,
491
- name: checkParam.name,
492
- status: 'pending',
493
- viewport: checkParam.viewport,
494
- browserName: checkParam.browserName,
495
- browserVersion: checkParam.browserVersion,
496
- browserFullVersion: checkParam.browserFullVersion,
497
- os: checkParam.os,
498
- updatedDate: Date.now(),
499
- suite: suite.id,
500
- app: app.id,
501
- branch: checkParam.branch,
502
- domDump: checkParam.domDump,
503
- run: test.run,
504
- creatorId: currentUser._id,
505
- creatorUsername: currentUser.username,
506
- failReasons: [],
507
- });
508
-
509
- const createCheck = async (checkParam, test, suite, app, currentUser, skipSaveOnCompareError = false) => {
510
- const logOpts = {
511
- scope: 'createCheck',
512
- user: currentUser.username,
513
- itemType: 'check',
514
- msgType: 'CREATE',
515
- };
516
- let actualSnapshot;
517
- let currentBaselineSnapshot;
518
-
519
- const newCheckParams = createCheckParams(checkParam, suite, app, test, currentUser);
520
- const checkIdent = buildIdentObject(newCheckParams);
521
-
522
- let check;
523
- let totalCheckHandleTime;
524
- let diffSnapshot;
525
-
526
- try {
527
- /**
528
- * Usually there are two stages of checking the creating Check request:
529
- * Phase 1
530
- * 1. Client sends request with 'req.body.hashcode' value but without 'req.files.file.data'
531
- * 2. The server finds for a snapshot with this image 'hashcode' and if found - go to Step 3 of Phase2,
532
- * if not - sends response "{status: 'requiredFileData', message: 'cannot found an image
533
- * with this hashcode, please add image file data and resend request'}"
534
- * Phase 2
535
- * 1. The client receives a response with incomplete status and resends the same request but,
536
- * with 'req.files.file.data' parameter
537
- * 2. The server creates a new snapshot based on these parameters
538
- * 3. The server makes the comparison and returns to the client some check response
539
- * with one of 'complete` status (eq: new, failed, passed)
540
- */
541
-
542
- /** PREPARE ACTUAL SNAPSHOT */
543
- /** look up the snapshot with same hashcode if didn't find, ask for file data */
544
- const { needFilesStatus, snapshotFoundedByHashcode } = await isNeedFiles(checkParam, logOpts);
545
- if (needFilesStatus) return { status: 'needFiles' };
546
-
547
- actualSnapshot = await prepareActualSnapshot(checkParam, snapshotFoundedByHashcode, logOpts);
548
- newCheckParams.actualSnapshotId = actualSnapshot.id;
549
-
550
- /** HANDLE BASELINE */
551
- log.info(`find a baseline for the check with identifier: '${JSON.stringify(checkIdent)}'`, $this, logOpts);
552
- const storedBaseline = await getBaseline(checkIdent);
553
-
554
- const inspectBaselineResult = await inspectBaseline(newCheckParams, storedBaseline, checkIdent, actualSnapshot, logOpts);
555
- Object.assign(newCheckParams, inspectBaselineResult.inspectBaselineParams);
556
- currentBaselineSnapshot = inspectBaselineResult.currentBaselineSnapshot;
557
-
558
- /** COMPARING SECTION */
559
- const compareResult = await compare(
560
- currentBaselineSnapshot,
561
- actualSnapshot,
562
- newCheckParams,
563
- checkParam.vShifting,
564
- skipSaveOnCompareError,
565
- currentUser,
566
- );
567
-
568
- Object.assign(newCheckParams, compareResult);
569
-
570
- log.debug(`create the new check document with params: '${prettyCheckParams(newCheckParams)}'`, $this, logOpts);
571
- check = await Check.create(newCheckParams);
572
- const savedCheck = await check.save();
573
-
574
- log.debug(`the check with id: '${check.id}', was created, will updated with data during creating process`, $this, logOpts);
575
- logOpts.ref = check.id;
576
- log.debug(`update test with check id: '${check.id}'`, $this, logOpts);
577
-
578
- test.checks.push(check.id);
579
- test.markedAs = await calculateAcceptedStatus(check.test);
580
- test.updatedDate = new Date();
581
-
582
- await test.save();
583
-
584
- // update test and suite
585
- log.debug('update suite and run', $this, logOpts);
586
-
587
- await orm.updateItemDate('VRSSuite', check.suite);
588
- await orm.updateItemDate('VRSRun', check.run);
589
-
590
- const lastSuccessCheck = await getLastSuccessCheck(checkIdent); // we need this?
591
-
592
- const result = {
593
- ...savedCheck.toObject(),
594
- currentSnapshot: actualSnapshot,
595
- expectedSnapshot: currentBaselineSnapshot,
596
- diffSnapshot: compareResult.diffSnapshot,
597
- executeTime: totalCheckHandleTime,
598
- lastSuccess: lastSuccessCheck ? (lastSuccessCheck).id : null,
599
- };
600
-
601
- if (diffSnapshot) result.diffSnapshot = diffSnapshot;
602
- return result;
603
- } catch (e) {
604
- // emergency check creation and test update
605
- if (!check) {
606
- newCheckParams.status = 'failed';
607
- newCheckParams.result = `{ "server error": "${e}" }`;
608
- newCheckParams.failReasons.push('internal_server_error');
609
-
610
- log.debug(`create the new check document with params: '${prettyCheckParams(newCheckParams)}'`, $this, logOpts);
611
- check = await Check.create(newCheckParams);
612
- await check.save();
613
- log.debug(`the check with id: '${check.id}', was created, will updated with data during creating process`, $this, logOpts);
614
- logOpts.ref = check.id;
615
- log.debug(`update test with check id: '${check.id}'`, $this, logOpts);
616
- test.checks.push(check.id);
617
- await test.save();
618
- }
619
- throw e;
620
- }
621
- };
622
-
623
- const getIdent = () => ident;
624
-
625
- const getBaselines = async (filter, options) => {
626
- const logOpts = {
627
- scope: 'getBaselines',
628
- itemType: 'baseline',
629
- msgType: 'GET',
630
- };
631
- const app = await App.findOne({ name: filter.app });
632
- if (!app) {
633
- log.error(`Cannot find the app: '${filter.app}'`, $this, logOpts);
634
- return {};
635
- }
636
- filter.app = app._id;
637
- log.debug(`Get baselines with filter: '${JSON.stringify(filter)}', options: '${JSON.stringify(options)}'`, $this, logOpts);
638
- return Baseline.paginate(filter, options);
639
- };
640
-
641
- module.exports = {
642
- startSession,
643
- endSession,
644
- createCheck,
645
- getIdent,
646
- // checkIfScreenshotHasBaselines,
647
- getBaselines,
648
- };
@@ -1,51 +0,0 @@
1
- /* eslint-disable valid-jsdoc */
2
- const mongoose = require('mongoose');
3
- const { removeEmptyProperties } = require('../utils/utils');
4
-
5
- const $this = this;
6
- $this.logMeta = {
7
- scope: 'generic.service',
8
- msgType: 'LOF',
9
- };
10
-
11
- /**
12
- * Query for users
13
- * @param {String} modelName - Item Name
14
- * @param {Object} filter - Mongo filter
15
- * @param {Object} options - Query options
16
- * @param {string} [options.sortBy] - Sort option in the format: sortField:(desc|asc)
17
- * @param {number} [options.limit] - Maximum number of results per page (default = 10)
18
- * @param {number} [options.page] - Current page (default = 1)
19
- * @returns {Promise<QueryResult>}
20
- */
21
- const get = async (modelName, filter, options) => {
22
- const itemModel = mongoose.model(modelName);
23
- return itemModel.paginate(filter, options);
24
- };
25
-
26
- const put = async (modelName, id, options, user) => {
27
- const itemModel = mongoose.model(modelName);
28
-
29
- const logOpts = {
30
- scope: 'generic.service.put',
31
- ref: id,
32
- itemType: modelName,
33
- msgType: 'UPDATE',
34
- user: user?.username,
35
- };
36
-
37
- const opts = removeEmptyProperties(options);
38
- // eslint-disable-next-line max-len
39
- log.debug(`start update '${modelName}' with id: '${id}', body: '${JSON.stringify(opts)}'`, $this, logOpts);
40
- const item = await itemModel.findByIdAndUpdate(id, options)
41
- .exec();
42
-
43
- await item.save();
44
- log.debug(`baseline with id: '${id}' and opts: '${JSON.stringify(opts)}' was updated`, $this, logOpts);
45
- return item;
46
- };
47
-
48
- module.exports = {
49
- get,
50
- put,
51
- };