@testgorilla/tgo-coding-test 0.0.1 → 1.0.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 (354) hide show
  1. package/README.md +49 -2
  2. package/esm2022/index.mjs +12 -0
  3. package/esm2022/lib/components/code-editor/code-editor.component.mjs +335 -0
  4. package/esm2022/lib/components/code-editor/code-editor.service.mjs +72 -0
  5. package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +40 -0
  6. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +11 -0
  7. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +2 -0
  8. package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +41 -0
  9. package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +42 -0
  10. package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +42 -0
  11. package/esm2022/lib/components/code-editor/helpers/index.mjs +16 -0
  12. package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +42 -0
  13. package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +26 -0
  14. package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +42 -0
  15. package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +26 -0
  16. package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +26 -0
  17. package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +26 -0
  18. package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +26 -0
  19. package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +41 -0
  20. package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +34 -0
  21. package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +40 -0
  22. package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +41 -0
  23. package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +2 -0
  24. package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +2 -0
  25. package/esm2022/lib/components/coding-question/coding-question.component.mjs +126 -0
  26. package/esm2022/lib/components/coding-section/coding-section.component.mjs +188 -0
  27. package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +38 -0
  28. package/esm2022/lib/components/configurations/configurations.component.mjs +97 -0
  29. package/esm2022/lib/components/instructions/instructions.component.mjs +139 -0
  30. package/esm2022/lib/components/panel/panel.component.mjs +34 -0
  31. package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +169 -0
  32. package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +198 -0
  33. package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +96 -0
  34. package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +21 -0
  35. package/esm2022/lib/components/tests/test-results.component.mjs +127 -0
  36. package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +280 -0
  37. package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +476 -0
  38. package/esm2022/lib/config/index.mjs +2 -0
  39. package/esm2022/lib/config/tgo-coding-test.config.mjs +2 -0
  40. package/esm2022/lib/config/tgo-coding-test.provider.mjs +34 -0
  41. package/esm2022/lib/config/tgo-coding-test.token.mjs +14 -0
  42. package/esm2022/lib/models/auto-saved-data.mjs +2 -0
  43. package/esm2022/lib/models/code-event.mjs +2 -0
  44. package/esm2022/lib/models/coderunner-execution-results.mjs +2 -0
  45. package/esm2022/lib/models/configs.mjs +2 -0
  46. package/esm2022/lib/models/language-change-action.mjs +2 -0
  47. package/esm2022/lib/models/lat-languages.mjs +3 -0
  48. package/esm2022/lib/models/mixpanel-events.mjs +2 -0
  49. package/esm2022/lib/models/mode.mjs +2 -0
  50. package/esm2022/lib/models/paste-data.mjs +2 -0
  51. package/esm2022/lib/models/programming-language.mjs +2 -0
  52. package/esm2022/lib/models/test-cases.mjs +7 -0
  53. package/esm2022/lib/models/theme.mjs +2 -0
  54. package/esm2022/lib/models/translations.mjs +2 -0
  55. package/esm2022/lib/models/view-mode.mjs +8 -0
  56. package/esm2022/lib/pipes/memoize-func.pipe.mjs +39 -0
  57. package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +19 -0
  58. package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +58 -0
  59. package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +89 -0
  60. package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +490 -0
  61. package/esm2022/lib/services/candidate-coding-test-services/index.mjs +5 -0
  62. package/esm2022/lib/services/coding-test-config.service.mjs +51 -0
  63. package/esm2022/lib/services/configurations.service.mjs +89 -0
  64. package/esm2022/lib/services/lib-coding-test.service.mjs +106 -0
  65. package/esm2022/lib/services/storage.service.mjs +624 -0
  66. package/esm2022/lib/services/test-cases.service.mjs +30 -0
  67. package/esm2022/lib/services/theme.service.mjs +36 -0
  68. package/esm2022/lib/utils/additional-languages/erlang.mjs +103 -0
  69. package/esm2022/lib/utils/resize-element.mjs +13 -0
  70. package/esm2022/lib/utils/time-to-ms.util.mjs +11 -0
  71. package/esm2022/shared/index.mjs +5 -0
  72. package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +114 -0
  73. package/esm2022/shared/lib/components/audio-animation/index.mjs +2 -0
  74. package/esm2022/shared/lib/components/index.mjs +3 -0
  75. package/esm2022/shared/lib/components/vimeo-video/index.mjs +2 -0
  76. package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +101 -0
  77. package/esm2022/shared/lib/models/answer.mjs +2 -0
  78. package/esm2022/shared/lib/models/assessment.mjs +2 -0
  79. package/esm2022/shared/lib/models/environment.mjs +2 -0
  80. package/esm2022/shared/lib/models/index.mjs +9 -0
  81. package/esm2022/shared/lib/models/question-component.mjs +2 -0
  82. package/esm2022/shared/lib/models/question.mjs +2 -0
  83. package/esm2022/shared/lib/models/test.mjs +2 -0
  84. package/esm2022/shared/lib/models/translations.mjs +2 -0
  85. package/esm2022/shared/lib/models/window.mjs +2 -0
  86. package/esm2022/shared/lib/services/api/api.service.mjs +97 -0
  87. package/esm2022/shared/lib/services/api/mocked-api.service.mjs +131 -0
  88. package/esm2022/shared/lib/services/environment/environment.service.mjs +13 -0
  89. package/esm2022/shared/lib/services/index.mjs +10 -0
  90. package/esm2022/shared/lib/services/localization/languages.model.mjs +19 -0
  91. package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +27 -0
  92. package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +11 -0
  93. package/esm2022/shared/lib/services/media/media.service.mjs +129 -0
  94. package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +30 -0
  95. package/esm2022/shared/lib/services/theme/theme.service.mjs +24 -0
  96. package/esm2022/shared/test-mocks/assessment-test.mock.mjs +112 -0
  97. package/esm2022/shared/test-mocks/index.mjs +3 -0
  98. package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +39 -0
  99. package/esm2022/testgorilla-tgo-coding-test.mjs +5 -0
  100. package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
  101. package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
  102. package/{src/index.ts → index.d.ts} +2 -19
  103. package/lib/components/code-editor/code-editor.component.d.ts +54 -0
  104. package/lib/components/code-editor/code-editor.service.d.ts +12 -0
  105. package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
  106. package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
  107. package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
  108. package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
  109. package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
  110. package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
  111. package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
  112. package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
  113. package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
  114. package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
  115. package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
  116. package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
  117. package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
  118. package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
  119. package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
  120. package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
  121. package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
  122. package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
  123. package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
  124. package/lib/components/coding-question/coding-question.component.d.ts +45 -0
  125. package/lib/components/coding-section/coding-section.component.d.ts +52 -0
  126. package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
  127. package/lib/components/configurations/configurations.component.d.ts +40 -0
  128. package/lib/components/instructions/instructions.component.d.ts +48 -0
  129. package/lib/components/panel/panel.component.d.ts +12 -0
  130. package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
  131. package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
  132. package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
  133. package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
  134. package/lib/components/tests/test-results.component.d.ts +33 -0
  135. package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
  136. package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
  137. package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
  138. package/lib/config/tgo-coding-test.config.d.ts +24 -0
  139. package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
  140. package/lib/config/tgo-coding-test.token.d.ts +9 -0
  141. package/lib/models/auto-saved-data.d.ts +42 -0
  142. package/lib/models/code-event.d.ts +15 -0
  143. package/lib/models/coderunner-execution-results.d.ts +51 -0
  144. package/lib/models/configs.d.ts +15 -0
  145. package/lib/models/language-change-action.d.ts +4 -0
  146. package/lib/models/lat-languages.d.ts +8 -0
  147. package/lib/models/mixpanel-events.d.ts +3 -0
  148. package/lib/models/mode.d.ts +5 -0
  149. package/lib/models/paste-data.d.ts +4 -0
  150. package/lib/models/programming-language.d.ts +8 -0
  151. package/lib/models/test-cases.d.ts +67 -0
  152. package/lib/models/theme.d.ts +4 -0
  153. package/lib/models/translations.d.ts +1 -0
  154. package/lib/models/view-mode.d.ts +6 -0
  155. package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
  156. package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
  157. package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
  158. package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
  159. package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
  160. package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
  161. package/lib/services/coding-test-config.service.d.ts +38 -0
  162. package/lib/services/configurations.service.d.ts +37 -0
  163. package/lib/services/lib-coding-test.service.d.ts +69 -0
  164. package/lib/services/storage.service.d.ts +83 -0
  165. package/lib/services/test-cases.service.d.ts +12 -0
  166. package/lib/services/theme.service.d.ts +17 -0
  167. package/lib/utils/additional-languages/erlang.d.ts +37 -0
  168. package/lib/utils/resize-element.d.ts +2 -0
  169. package/lib/utils/time-to-ms.util.d.ts +1 -0
  170. package/package.json +18 -7
  171. package/shared/index.d.ts +4 -0
  172. package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
  173. package/shared/lib/components/audio-animation/index.d.ts +1 -0
  174. package/shared/lib/components/index.d.ts +2 -0
  175. package/shared/lib/components/vimeo-video/index.d.ts +1 -0
  176. package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
  177. package/shared/lib/models/answer.d.ts +17 -0
  178. package/shared/lib/models/assessment.d.ts +80 -0
  179. package/shared/lib/models/environment.d.ts +1 -0
  180. package/shared/lib/models/index.d.ts +8 -0
  181. package/shared/lib/models/question-component.d.ts +54 -0
  182. package/shared/lib/models/question.d.ts +102 -0
  183. package/shared/lib/models/test.d.ts +81 -0
  184. package/shared/lib/models/translations.d.ts +1 -0
  185. package/shared/lib/models/window.d.ts +6 -0
  186. package/shared/lib/services/api/api.service.d.ts +25 -0
  187. package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
  188. package/shared/lib/services/environment/environment.service.d.ts +6 -0
  189. package/shared/lib/services/index.d.ts +9 -0
  190. package/shared/lib/services/localization/languages.model.d.ts +15 -0
  191. package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
  192. package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
  193. package/shared/lib/services/media/media.service.d.ts +29 -0
  194. package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
  195. package/shared/lib/services/theme/theme.service.d.ts +8 -0
  196. package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
  197. package/shared/test-mocks/index.d.ts +2 -0
  198. package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
  199. package/.eslintrc.json +0 -45
  200. package/jest.config.ts +0 -21
  201. package/ng-package.json +0 -14
  202. package/project.json +0 -36
  203. package/src/lib/components/.gitkeep +0 -0
  204. package/src/lib/components/code-editor/code-editor.component.html +0 -10
  205. package/src/lib/components/code-editor/code-editor.component.scss +0 -21
  206. package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
  207. package/src/lib/components/code-editor/code-editor.component.ts +0 -369
  208. package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
  209. package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
  210. package/src/lib/components/code-editor/code-editor.service.ts +0 -94
  211. package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
  212. package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
  213. package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
  214. package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
  215. package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
  216. package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
  217. package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
  218. package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
  219. package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
  220. package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
  221. package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
  222. package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
  223. package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
  224. package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
  225. package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
  226. package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
  227. package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
  228. package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
  229. package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
  230. package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
  231. package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
  232. package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
  233. package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
  234. package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
  235. package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
  236. package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
  237. package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
  238. package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
  239. package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
  240. package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
  241. package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
  242. package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
  243. package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
  244. package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
  245. package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
  246. package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
  247. package/src/lib/components/coding-question/coding-question.component.html +0 -78
  248. package/src/lib/components/coding-question/coding-question.component.scss +0 -76
  249. package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
  250. package/src/lib/components/coding-question/coding-question.component.ts +0 -102
  251. package/src/lib/components/coding-section/coding-section.component.html +0 -82
  252. package/src/lib/components/coding-section/coding-section.component.scss +0 -64
  253. package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
  254. package/src/lib/components/coding-section/coding-section.component.ts +0 -187
  255. package/src/lib/components/coding-test.module.ts +0 -124
  256. package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
  257. package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
  258. package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
  259. package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -37
  260. package/src/lib/components/configurations/configurations.component.html +0 -57
  261. package/src/lib/components/configurations/configurations.component.scss +0 -42
  262. package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
  263. package/src/lib/components/configurations/configurations.component.ts +0 -98
  264. package/src/lib/components/instructions/instructions.component.html +0 -41
  265. package/src/lib/components/instructions/instructions.component.scss +0 -167
  266. package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
  267. package/src/lib/components/instructions/instructions.component.ts +0 -138
  268. package/src/lib/components/panel/panel.component.html +0 -19
  269. package/src/lib/components/panel/panel.component.scss +0 -41
  270. package/src/lib/components/panel/panel.component.spec.ts +0 -40
  271. package/src/lib/components/panel/panel.component.ts +0 -34
  272. package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
  273. package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
  274. package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
  275. package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -155
  276. package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
  277. package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
  278. package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
  279. package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -205
  280. package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
  281. package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
  282. package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
  283. package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -102
  284. package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
  285. package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
  286. package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
  287. package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -18
  288. package/src/lib/components/tests/test-results.component.html +0 -119
  289. package/src/lib/components/tests/test-results.component.scss +0 -189
  290. package/src/lib/components/tests/test-results.component.spec.ts +0 -140
  291. package/src/lib/components/tests/test-results.component.ts +0 -98
  292. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
  293. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
  294. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
  295. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -279
  296. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
  297. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
  298. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
  299. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -575
  300. package/src/lib/config/tgo-coding-test.config.ts +0 -26
  301. package/src/lib/config/tgo-coding-test.token.ts +0 -21
  302. package/src/lib/models/.gitkeep +0 -0
  303. package/src/lib/models/auto-saved-data.ts +0 -51
  304. package/src/lib/models/code-event.ts +0 -17
  305. package/src/lib/models/coderunner-execution-results.ts +0 -58
  306. package/src/lib/models/coding-lib.mocks.ts +0 -246
  307. package/src/lib/models/configs.ts +0 -18
  308. package/src/lib/models/language-change-action.ts +0 -4
  309. package/src/lib/models/lat-languages.ts +0 -12
  310. package/src/lib/models/mixpanel-events.ts +0 -3
  311. package/src/lib/models/mode.ts +0 -5
  312. package/src/lib/models/paste-data.ts +0 -4
  313. package/src/lib/models/programming-language.ts +0 -9
  314. package/src/lib/models/test-cases.ts +0 -74
  315. package/src/lib/models/theme.ts +0 -5
  316. package/src/lib/models/translations.ts +0 -1
  317. package/src/lib/models/view-mode.ts +0 -6
  318. package/src/lib/services/.gitkeep +0 -0
  319. package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
  320. package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
  321. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
  322. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
  323. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
  324. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
  325. package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
  326. package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
  327. package/src/lib/services/coding-test-config.service.ts +0 -48
  328. package/src/lib/services/configurations.service.mocks.ts +0 -77
  329. package/src/lib/services/configurations.service.spec.ts +0 -79
  330. package/src/lib/services/configurations.service.ts +0 -111
  331. package/src/lib/services/index.ts +0 -0
  332. package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
  333. package/src/lib/services/lib-coding-test.service.ts +0 -157
  334. package/src/lib/services/local-storage.service.mocks.ts +0 -22
  335. package/src/lib/services/storage.service.spec.ts +0 -1120
  336. package/src/lib/services/storage.service.ts +0 -729
  337. package/src/lib/services/test-cases.service.spec.ts +0 -53
  338. package/src/lib/services/test-cases.service.ts +0 -29
  339. package/src/lib/services/theme.service.spec.ts +0 -76
  340. package/src/lib/services/theme.service.ts +0 -34
  341. package/src/lib/styles/mixins.scss +0 -86
  342. package/src/lib/styles/styles.scss +0 -112
  343. package/src/lib/styles/variables.scss +0 -105
  344. package/src/lib/utils/.gitkeep +0 -0
  345. package/src/lib/utils/additional-languages/erlang.ts +0 -115
  346. package/src/lib/utils/resize-element.ts +0 -15
  347. package/src/lib/utils/time-to-ms.util.ts +0 -10
  348. package/src/test-setup.ts +0 -1
  349. package/tsconfig.json +0 -16
  350. package/tsconfig.lib.json +0 -12
  351. package/tsconfig.lib.prod.json +0 -9
  352. package/tsconfig.spec.json +0 -13
  353. /package/{src/assets → assets}/i18n/en.json +0 -0
  354. /package/{src/lib/components/code-editor/helpers/index.ts → lib/components/code-editor/helpers/index.d.ts} +0 -0
@@ -1,843 +0,0 @@
1
- import { Injectable, signal } from '@angular/core';
2
- import { translate } from '@ngneat/transloco';
3
- import {
4
- ApplicationTheme,
5
- ConfirmDialogComponent,
6
- DialogService,
7
- SnackbarService,
8
- } from '@testgorilla/tgo-ui';
9
- import {
10
- MixpanelService,
11
- TestResultRead,
12
- } from '@testgorilla/tgo-test-shared';
13
- import {
14
- CustomTestCase,
15
- ExampleTestCase,
16
- TestCaseDeletionAction,
17
- TestCaseDeletionData,
18
- } from '../../models/test-cases';
19
- import { LibCodingTestService, ResetCodeAction } from '../lib-coding-test.service';
20
- import { CodeEditorLanguages } from '../../components/code-editor/helpers/code-editor-helper.model';
21
- import {
22
- BehaviorSubject,
23
- Observable,
24
- Subject,
25
- filter,
26
- of,
27
- takeUntil,
28
- throwError,
29
- } from 'rxjs';
30
- import { catchError, map, switchMap, take, tap } from 'rxjs/operators';
31
- import { CodeEvent, CodeEventResponse } from '../../models/code-event';
32
- import {
33
- CodeRunnerTestCaseExecutionOutputModel,
34
- CoderunnerAttemptModel,
35
- CoderunnerTestCaseExecutionModel,
36
- CodingTestsResultsModel,
37
- TIMEOUT_SIGNAL,
38
- } from '../../models/coderunner-execution-results';
39
- import { MixpanelEvents } from '../../models/mixpanel-events';
40
- import {
41
- ProgrammingLanguage,
42
- ProgrammingLanguageVersioned,
43
- } from '../../models/programming-language';
44
- import {
45
- GroupedTestCasesResult,
46
- LATFormattedTestCases,
47
- SqlTestCase,
48
- Testcase,
49
- } from '../../models/test-cases';
50
- import { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';
51
- import { CoderunnerApiService } from './coderunner-api.service';
52
-
53
- interface CustomError {
54
- detail?: string;
55
- }
56
-
57
- @Injectable()
58
- export class CodingTestService {
59
- readonly translationContext = `${ROOT_TRANSLATIONS_SCOPE}.CODING_LIB.`;
60
-
61
- private codingTestResults: CodingTestsResultsModel = {
62
- listResponse: [],
63
- resume: {
64
- ok: 0,
65
- error: 0,
66
- total: 0,
67
- },
68
- };
69
- private currentLanguage!: ProgrammingLanguage;
70
- private codingTestResutsSubj$ = new BehaviorSubject(this.codingTestResults);
71
- codingTestResults$ = this.codingTestResutsSubj$.asObservable();
72
-
73
- isTestResultsLoading = signal<boolean>(false);
74
-
75
- private unsubscribe$ = new Subject<void>();
76
-
77
- private sqlTestCases!: SqlTestCase[];
78
- private isSQLTest = false;
79
-
80
- constructor(
81
- private coderunnerApiService: CoderunnerApiService,
82
- private libCodingTestService: LibCodingTestService,
83
- private mixpanel: MixpanelService,
84
- private snackBar: SnackbarService,
85
- private dialog: DialogService
86
- ) {}
87
-
88
- private getBaseExampleTestCase = (id: number, index: number) => ({
89
- id: id ?? 0,
90
- name: `Example ${index + 1}`,
91
- preloaded: true,
92
- });
93
-
94
- transformToExampleLATtestCase = (
95
- testcase: Testcase,
96
- index: number
97
- ): ExampleTestCase => ({
98
- ...this.getBaseExampleTestCase(testcase.id!, index),
99
- expectedOutput: testcase.solution ?? '',
100
- input: testcase.input,
101
- });
102
-
103
- transformToExampleSQLTestCase = (
104
- testcase: SqlTestCase,
105
- index: number
106
- ): ExampleTestCase => ({
107
- ...this.getBaseExampleTestCase(testcase.id!, index),
108
- expectedOutput: testcase.result ?? '',
109
- });
110
-
111
- setSqlTestCases(sqlTestCases: SqlTestCase[]) {
112
- this.sqlTestCases = sqlTestCases;
113
- }
114
-
115
- getSqlTestCases(): SqlTestCase[] {
116
- return this.sqlTestCases;
117
- }
118
-
119
- handleResetCodeModal(applicationTheme: ApplicationTheme, companyColor: string): void {
120
- const modalTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.RESET_CODE.`;
121
- const modalData = {
122
- confirmButtonText: translate(`${modalTranslationContext}SUBMIT`),
123
- title: translate(`${modalTranslationContext}TITLE`),
124
- message: translate(`${modalTranslationContext}MESSAGE`),
125
- color: companyColor,
126
- };
127
- const dialogRef = this.dialog.open(ConfirmDialogComponent, {
128
- applicationTheme,
129
- size: 'small',
130
- extraData: modalData,
131
- });
132
-
133
- dialogRef
134
- .afterClosed()
135
- .pipe(filter(Boolean), take(1))
136
- .subscribe(() => {
137
- this.libCodingTestService.confirmReset();
138
- });
139
- }
140
-
141
- listenDeleteCustomTestCases(): Observable<TestCaseDeletionData> {
142
- return this.libCodingTestService.testCaseDeletion$.pipe(
143
- filter(({ action }) => action === TestCaseDeletionAction.Try)
144
- );
145
- }
146
-
147
- handleDeleteTestCaseModal(
148
- index: number,
149
- applicationTheme: ApplicationTheme,
150
- companyColor: string
151
- ): void {
152
- const deleteTestCaseTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.DELETE_TEST_CASE.`;
153
- const modalData = {
154
- title: translate(`${deleteTestCaseTranslationContext}TITLE`),
155
- message: translate(`${deleteTestCaseTranslationContext}MESSAGE`),
156
- confirmButtonText: translate(`${deleteTestCaseTranslationContext}SUBMIT`),
157
- color: companyColor,
158
- };
159
- const dialogRef = this.dialog.open(ConfirmDialogComponent, {
160
- applicationTheme,
161
- size: 'small',
162
- extraData: modalData,
163
- });
164
-
165
- dialogRef
166
- .afterClosed()
167
- .pipe(filter(Boolean), take(1))
168
- .subscribe(() => {
169
- this.libCodingTestService.confirmTestCaseDeletion(index);
170
- });
171
- }
172
-
173
- handleLanguageChangeModal(
174
- questionResultId: number,
175
- selectedLanguage?: ProgrammingLanguage,
176
- applicationTheme: ApplicationTheme = 'light',
177
- companyColor?: string,
178
- ): void {
179
- const modalLangChangeTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.LANGUAGE_CHANGE.`;
180
- const modalData = {
181
- confirmButtonText: translate(
182
- `${modalLangChangeTranslationContext}SUBMIT`
183
- ),
184
- title: translate(`${modalLangChangeTranslationContext}TITLE`),
185
- message: translate(`${modalLangChangeTranslationContext}MESSAGE`),
186
- ...(companyColor && { color: companyColor }),
187
- };
188
-
189
- const dialogRef = this.dialog.open(ConfirmDialogComponent, {
190
- applicationTheme,
191
- size: 'small',
192
- extraData: modalData,
193
- });
194
-
195
- dialogRef
196
- .afterClosed()
197
- .pipe(take(1))
198
- .subscribe((result) => {
199
- if (result) {
200
- this.libCodingTestService.confirmLanguageChange();
201
- if (selectedLanguage) {
202
- this.setCurrentLanguageLAT(selectedLanguage);
203
- this.sendLanguageChangeEvent$(questionResultId);
204
- }
205
- } else {
206
- this.libCodingTestService.cancelLanguageChange();
207
- }
208
- });
209
- }
210
-
211
- setCurrentLanguageLAT(language: ProgrammingLanguage): void {
212
- this.currentLanguage = language;
213
- }
214
-
215
- listenCodingTestChanges(): Observable<ResetCodeAction> {
216
- return this.libCodingTestService.codeReset$.pipe(
217
- filter((val) => val === ResetCodeAction.Try)
218
- );
219
- }
220
-
221
- runTest(
222
- resultId: number,
223
- code: string,
224
- isLAT = true,
225
- isSQL = false,
226
- // todo: remove from everywhere or comment temporarily?
227
- publicPreview = false,
228
- preview = false,
229
- id = 0,
230
- testResultId = 0,
231
- testData?: TestResultRead
232
- ): void {
233
- this.preRunTests();
234
- if (isSQL) {
235
- this.getSQLrequest(
236
- resultId,
237
- testResultId,
238
- code,
239
- id,
240
- publicPreview,
241
- preview
242
- );
243
- } else if (isLAT) {
244
- const testCases: (ExampleTestCase | CustomTestCase)[] =
245
- this.libCodingTestService.getValidTestCases();
246
- const testCasesFormatted = testCases.map((testCase) => ({
247
- input: testCase.input,
248
- solution: testCase.expectedOutput,
249
- })) as LATFormattedTestCases[];
250
- this.libCodingTestService.currentLanguage$
251
- .pipe(take(1))
252
- .subscribe((language) => {
253
- const runReq$ = this.getLATrequest(
254
- id,
255
- resultId,
256
- testResultId,
257
- code,
258
- testCasesFormatted as LATFormattedTestCases[],
259
- language,
260
- publicPreview,
261
- preview
262
- );
263
- this.runLAT(
264
- runReq$,
265
- publicPreview,
266
- preview,
267
- testData || ({} as TestResultRead),
268
- testCases,
269
- code,
270
- resultId
271
- );
272
- });
273
- }
274
- }
275
-
276
- sendCopypasteEvent$(
277
- code: string,
278
- copiedText: string,
279
- questionResultId: number
280
- ): Observable<CodeEventResponse> {
281
- const event: CodeEvent = this.getBaseEvent({
282
- code,
283
- event_type: 'COPYPASTE',
284
- extra_payload: copiedText,
285
- question_result_id: questionResultId,
286
- });
287
-
288
- return this.coderunnerApiService.sendCodeEvent$(event);
289
- }
290
-
291
- sendAutosaveEvent$(
292
- code: string,
293
- questionResultId: number
294
- ): Observable<CodeEventResponse> {
295
- const event: CodeEvent = this.getBaseEvent({
296
- code,
297
- event_type: 'AUTOSAVE',
298
- question_result_id: questionResultId,
299
- });
300
-
301
- return this.coderunnerApiService
302
- .sendCodeEvent$(event)
303
- .pipe(catchError((err) => of(err)));
304
- }
305
-
306
- private sendLanguageChangeEvent$(questionResultId: number): void {
307
- const event: CodeEvent = this.getBaseEvent({
308
- event_type: 'SWITCH',
309
- question_result_id: questionResultId,
310
- });
311
-
312
- this.coderunnerApiService.sendCodeEvent$(event).pipe(take(1)).subscribe();
313
- }
314
-
315
- private getBaseEvent(event: Partial<CodeEvent>): CodeEvent {
316
- let language = '';
317
-
318
- if (this.isSQLTest) {
319
- language = ProgrammingLanguageVersioned.SQLite;
320
- } else {
321
- const { name, version } = this.currentLanguage;
322
- language = `${name}-${version}`;
323
- }
324
-
325
- const baseEvent: Partial<CodeEvent> = {
326
- code: '',
327
- extra_payload: '',
328
- attempt_id: null,
329
- language,
330
- };
331
-
332
- return { ...baseEvent, ...event } as CodeEvent;
333
- }
334
-
335
- private sendCodeEvent$(
336
- attemptId: string,
337
- questionResultId: number,
338
- code: string
339
- ): Observable<CodeEventResponse> {
340
- const event: CodeEvent = this.getBaseEvent({
341
- code,
342
- attempt_id: attemptId,
343
- event_type: 'ATTEMPT',
344
- question_result_id: questionResultId,
345
- });
346
-
347
- return this.coderunnerApiService.sendCodeEvent$(event);
348
- }
349
-
350
- private countTestResults(
351
- executions: CoderunnerTestCaseExecutionModel[] | undefined
352
- ): {
353
- passed: number;
354
- error: number;
355
- total: number;
356
- } {
357
- if (executions) {
358
- return executions.reduce(
359
- (acc, response) => {
360
- if (response.evaluation.testcase) {
361
- acc.passed++;
362
- } else {
363
- acc.error++;
364
- }
365
- acc.total++;
366
- return acc;
367
- },
368
- { passed: 0, error: 0, total: 0 }
369
- );
370
- }
371
- return { passed: 0, error: 0, total: 0 };
372
- }
373
-
374
- private handleTestCasesResult(
375
- testCasesResultObject: CodingTestsResultsModel
376
- ): void {
377
- this.codingTestResults = testCasesResultObject;
378
- this.publishTestResults();
379
- this.isTestResultsLoading.set(false);
380
- }
381
-
382
- private getSQLrequest(
383
- resultId: number,
384
- testResultId: number,
385
- code: string,
386
- id: number,
387
- publicPreview: boolean,
388
- preview: boolean
389
- ): void {
390
- const testCases: SqlTestCase[] = this.getSqlTestCases();
391
- let runReq$: Observable<CoderunnerAttemptModel>;
392
- if (publicPreview) {
393
- runReq$ = this.coderunnerApiService.runPublicTest$(
394
- code,
395
- testCases,
396
- ProgrammingLanguageVersioned.SQLite
397
- );
398
- } else if (preview) {
399
- runReq$ = this.coderunnerApiService.runPreviewTest$(
400
- testResultId,
401
- code,
402
- testCases,
403
- ProgrammingLanguageVersioned.SQLite
404
- );
405
- } else {
406
- runReq$ = this.coderunnerApiService.runNonPreviewTest$(
407
- id,
408
- resultId,
409
- code,
410
- testCases,
411
- ProgrammingLanguageVersioned.SQLite
412
- );
413
- }
414
- this.runSql(runReq$, testCases, resultId, !publicPreview && !preview, code);
415
- }
416
-
417
- private runSql(
418
- runReq$: Observable<CoderunnerAttemptModel>,
419
- testCases: SqlTestCase[],
420
- questionResultId: number,
421
- isActualQuestion: boolean,
422
- code: string
423
- ) {
424
- let attemptId = '';
425
-
426
- runReq$
427
- .pipe(
428
- catchError((err) => {
429
- this.finalizeReq(err);
430
- return throwError(() => err);
431
- }),
432
- tap((res) => this.finalizeReq(res as CustomError)),
433
- tap(({ id }) => (attemptId = id ?? '')),
434
- switchMap((responseArray: CoderunnerAttemptModel) =>
435
- of(responseArray.executions).pipe(
436
- map((executions) => this.countTestResults(executions)),
437
- map((countResult) => {
438
- const sqlExecutedSuccessfullyCopy = translate(
439
- `${this.translationContext}TEST_RESULTS.TEST_CASES.SQL_EXECUTED_SUCCESSFULLY`
440
- );
441
- const noOutputCopies = this.getNoOutputCopies();
442
-
443
- return {
444
- resume: {
445
- ok: countResult.passed,
446
- error: countResult.error,
447
- total: countResult.total,
448
- },
449
- listResponse: responseArray.executions?.map(
450
- ({ run, evaluation }: CoderunnerTestCaseExecutionModel) => ({
451
- actualOutput: run.stdout
452
- ? run.stdout
453
- : run.stderr || run.signal === TIMEOUT_SIGNAL
454
- ? noOutputCopies['noResponse']
455
- : noOutputCopies['noOutput'],
456
- logs: this.getCoderunnerLogs(
457
- run,
458
- TIMEOUT_SIGNAL,
459
- noOutputCopies['timeoutError'],
460
- sqlExecutedSuccessfullyCopy
461
- ),
462
- status: evaluation.testcase ? 'passed' : 'error',
463
- })
464
- ),
465
- } as CodingTestsResultsModel;
466
- }),
467
- tap((testCasesResultObject) =>
468
- this.handleTestCasesResult(testCasesResultObject)
469
- )
470
- )
471
- ),
472
- switchMap(() =>
473
- this.getSendCodeEventStream$(
474
- isActualQuestion,
475
- attemptId,
476
- questionResultId,
477
- code
478
- )
479
- )
480
- )
481
- .subscribe();
482
- }
483
-
484
- private getLATrequest(
485
- id: number,
486
- resultId: number,
487
- testResultId: number,
488
- code: string,
489
- testCasesFormatted: LATFormattedTestCases[],
490
- language: CodeEditorLanguages,
491
- publicPreview: boolean,
492
- preview: boolean
493
- ): Observable<CoderunnerAttemptModel> {
494
- if (publicPreview) {
495
- return this.coderunnerApiService.runPublicTest$(
496
- code,
497
- testCasesFormatted,
498
- `${language}-${this.libCodingTestService.getVersion()}`
499
- );
500
- } else if (preview) {
501
- return this.coderunnerApiService.runPreviewTest$(
502
- testResultId,
503
- code,
504
- testCasesFormatted,
505
- `${language}-${this.libCodingTestService.getVersion()}`
506
- );
507
- } else {
508
- return this.coderunnerApiService.runNonPreviewTest$(
509
- id,
510
- resultId,
511
- code,
512
- testCasesFormatted,
513
- `${language}-${this.libCodingTestService.getVersion()}`
514
- );
515
- }
516
- }
517
-
518
- setIsSQLTest(isSQL: boolean): void {
519
- this.isSQLTest = isSQL;
520
- }
521
-
522
- private runLAT(
523
- runCodeRequest$: Observable<CoderunnerAttemptModel>,
524
- isPublicPreviewLAT: boolean,
525
- isPractice = false,
526
- testData: TestResultRead,
527
- testCases: ExampleTestCase[] | CustomTestCase[],
528
- code: string,
529
- questionResultId: number
530
- ): void {
531
- const pistonRegex = /\/piston\/[^/ ]+(\/[^/ ]+)*/g;
532
- const reqStartTime = performance.now();
533
- let reqEndTime: number;
534
- let attemptId = '';
535
-
536
- runCodeRequest$
537
- .pipe(
538
- catchError((err) => {
539
- this.finalizeReq(err);
540
- return throwError(() => err);
541
- }),
542
- tap((res) => this.finalizeReq(res as CustomError)),
543
- tap(() => (reqEndTime = performance.now())),
544
- tap(({ id }) => (attemptId = id ?? '')),
545
- switchMap((responseArray: CoderunnerAttemptModel) =>
546
- of(responseArray.executions).pipe(
547
- map((executions) => (executions ? executions : [])),
548
- map((executions: CoderunnerTestCaseExecutionModel[]) =>
549
- executions.map((x) => {
550
- if (x.run.stderr) {
551
- x.run.stderr = x.run.stderr.replace(pistonRegex, '');
552
- }
553
- if (x.run.stdout) {
554
- x.run.stdout = x.run.stdout.replace(pistonRegex, '');
555
- }
556
- return x;
557
- })
558
- ),
559
- map((executions) => this.countTestResults(executions)),
560
- map((countResult) => {
561
- if (!isPublicPreviewLAT) {
562
- const responseTime = Math.round(reqEndTime - reqStartTime);
563
- this.trackTestcasesRun(
564
- testData,
565
- countResult,
566
- responseArray.executions || [],
567
- responseTime,
568
- testCases
569
- );
570
- }
571
- const noOutputCopies = this.getNoOutputCopies();
572
- const executedSuccessfullyCopy = translate(
573
- `${this.translationContext}TEST_RESULTS.TEST_CASES.EXECUTED_SUCCESSFULLY`
574
- );
575
-
576
- return {
577
- resume: {
578
- ok: countResult.passed,
579
- error: countResult.error,
580
- total: countResult.total,
581
- },
582
- listResponse: responseArray.executions?.map(
583
- ({
584
- run,
585
- evaluation,
586
- compile,
587
- }: CoderunnerTestCaseExecutionModel) => ({
588
- actualOutput: run.stdout
589
- ? run.stdout
590
- : run.stderr || run.signal === TIMEOUT_SIGNAL
591
- ? noOutputCopies['noResponse']
592
- : noOutputCopies['noOutput'],
593
- logs: this.getCoderunnerLogs(
594
- run,
595
- TIMEOUT_SIGNAL,
596
- noOutputCopies['timeoutError'],
597
- executedSuccessfullyCopy,
598
- compile
599
- ),
600
- status: evaluation.testcase ? 'passed' : 'error',
601
- })
602
- ),
603
- } as CodingTestsResultsModel;
604
- }),
605
- tap((testCasesResultObject) =>
606
- this.handleTestCasesResult(testCasesResultObject)
607
- )
608
- )
609
- ),
610
- switchMap(() =>
611
- this.getSendCodeEventStream$(
612
- !isPractice && !isPublicPreviewLAT,
613
- attemptId,
614
- questionResultId,
615
- code
616
- )
617
- )
618
- )
619
- .subscribe();
620
- }
621
-
622
- private finalizeReq(err: CustomError): void {
623
- this.isTestResultsLoading.set(false);
624
- if (err.detail) {
625
- this.snackBar.error(err.detail);
626
- }
627
- }
628
-
629
- private getNoOutputCopies(): { [key: string]: string } {
630
- return {
631
- noResponse: translate(
632
- `${this.translationContext}TEST_RESULTS.TEST_CASES.NO_RESPONSE`
633
- ),
634
- noOutput: translate(
635
- `${this.translationContext}TEST_RESULTS.TEST_CASES.NONE`
636
- ),
637
- timeoutError: translate(
638
- `${this.translationContext}TEST_RESULTS.TEST_CASES.TIMEOUT_ERROR`
639
- ),
640
- };
641
- }
642
-
643
- private getSendCodeEventStream$(
644
- isActualQuestion: boolean,
645
- attemptId: string,
646
- questionResultId: number,
647
- code: string
648
- ): Observable<CodeEventResponse> {
649
- if (isActualQuestion) {
650
- return this.sendCodeEvent$(attemptId, questionResultId, code);
651
- } else {
652
- return of({} as CodeEventResponse);
653
- }
654
- }
655
-
656
- // todo: check if we need this anymore due to MFE providers specificity
657
- unsubscribeAll(): void {
658
- this.unsubscribe$.next();
659
- this.unsubscribe$.complete();
660
- }
661
-
662
- resetRunTestSummary(): void {
663
- this.codingTestResults = {
664
- listResponse: [],
665
- resume: {
666
- ok: 0,
667
- error: 0,
668
- total: 0,
669
- },
670
- };
671
-
672
- this.publishTestResults();
673
- }
674
-
675
- trackConfigChanged(isPracticeQuestion = false): void {
676
- this.libCodingTestService.configFieldChanged$
677
- .pipe(takeUntil(this.unsubscribe$))
678
- .subscribe((config) => {
679
- const { settingInstance, changedKey, newValueString } =
680
- this.getMixpanelSettingsData(isPracticeQuestion, config);
681
-
682
- this.mixpanel.track(MixpanelEvents.ChangedSettings, {
683
- coderunner_setting: changedKey,
684
- coderunner_setting_new_value: newValueString,
685
- coderunner_setting_instance: settingInstance,
686
- });
687
- });
688
- }
689
-
690
- private getCoderunnerLogs(
691
- run: CodeRunnerTestCaseExecutionOutputModel,
692
- TIMEOUT_SIGNAL: string,
693
- timeoutErrorCopy: string,
694
- executedSuccessfullyCopy: string,
695
- compile?: CodeRunnerTestCaseExecutionOutputModel,
696
- isSQL?: boolean
697
- ): string {
698
- if (isSQL) {
699
- return run?.stderr === TIMEOUT_SIGNAL
700
- ? run.stderr
701
- : executedSuccessfullyCopy;
702
- } else if (run?.stderr) {
703
- return run.stderr === compile?.stderr
704
- ? run.stderr
705
- : `${run.stderr}\n${compile?.stderr || ''}`;
706
- } else if (run.signal === TIMEOUT_SIGNAL) {
707
- return timeoutErrorCopy;
708
- }
709
- return executedSuccessfullyCopy;
710
- }
711
-
712
- private trackTestcasesRun(
713
- testData: TestResultRead,
714
- countResult: { [key: string]: number },
715
- testCasesExecutions: CoderunnerTestCaseExecutionModel[],
716
- responseTime: number,
717
- testCases: ExampleTestCase[] | CustomTestCase[]
718
- ): void {
719
- const {
720
- instance,
721
- customPassed,
722
- customFailed,
723
- examplePassed,
724
- exampleFailed,
725
- customEmpty,
726
- testUuid,
727
- testName,
728
- } = this.getMixpanelTestCasesData(
729
- testData,
730
- countResult,
731
- testCasesExecutions,
732
- testCases
733
- );
734
-
735
- this.mixpanel.track('Candidate ran tests in Coderunner', {
736
- coding_test_uuid: testUuid,
737
- coding_test_name: testName,
738
- coderunner_test_instance: instance,
739
- custom_testcases_passed: customPassed,
740
- custom_testcases_failed: customFailed,
741
- custom_testcases_empty: customEmpty,
742
- example_testcases_passed: examplePassed,
743
- example_testcases_failed: exampleFailed,
744
- coderunner_response_time: responseTime,
745
- });
746
- }
747
-
748
- private preRunTests() {
749
- this.isTestResultsLoading.set(true);
750
- this.resetRunTestSummary();
751
- }
752
-
753
- private getMixpanelTestCasesData(
754
- testData: TestResultRead,
755
- { total }: { [key: string]: number },
756
- testCasesExecutions: CoderunnerTestCaseExecutionModel[],
757
- validTestCases: ExampleTestCase[] | CustomTestCase[]
758
- ) {
759
- const allTestCasesCount = this.libCodingTestService.getTestCasesCount();
760
- const customEmpty = allTestCasesCount - total || 0;
761
- const instance = this.getMixpanelInstanceValue(!!testData.is_preview_mode);
762
- const { uuid: testUuid } = testData;
763
- const { name: testName } = testData.test ?? { name: '' };
764
- const mixpanelResults = this.getGroupedTestCaseResult(
765
- testCasesExecutions,
766
- validTestCases
767
- );
768
-
769
- return {
770
- testUuid: testUuid?.replace(/-/g, ''),
771
- testName,
772
- instance,
773
- customEmpty,
774
- customPassed: mixpanelResults.custom.passed,
775
- customFailed: mixpanelResults.custom.failed,
776
- examplePassed: mixpanelResults.example.passed,
777
- exampleFailed: mixpanelResults.example.failed,
778
- };
779
- }
780
-
781
- private getGroupedTestCaseResult(
782
- testCasesExecutions: CoderunnerTestCaseExecutionModel[],
783
- validTestCases: ExampleTestCase[] | CustomTestCase[]
784
- ): GroupedTestCasesResult {
785
- const groupedResult = {
786
- custom: {
787
- failed: 0,
788
- passed: 0,
789
- },
790
- example: {
791
- failed: 0,
792
- passed: 0,
793
- },
794
- };
795
-
796
- testCasesExecutions.forEach(({ input: resultInput, evaluation }) => {
797
- const localTestCase = validTestCases.find(
798
- ({ input }) => resultInput === input
799
- );
800
- const mixpanelResultBody = localTestCase?.preloaded
801
- ? groupedResult.example
802
- : groupedResult.custom;
803
-
804
- if (evaluation?.testcase) {
805
- mixpanelResultBody.passed++;
806
- } else {
807
- mixpanelResultBody.failed++;
808
- }
809
- });
810
-
811
- return groupedResult;
812
- }
813
-
814
- private getMixpanelSettingsData(
815
- isPracticeQuestion: boolean,
816
- config: { [key: string]: boolean | string | number }
817
- ) {
818
- const settingInstance = this.getMixpanelInstanceValue(isPracticeQuestion);
819
- const changedKey = Object.keys(config)[0];
820
- const THEME_IDENTIFIER = 'theme-';
821
- let changedValue: boolean | string | number = config[changedKey];
822
- let newValueString;
823
-
824
- if (typeof changedValue === 'boolean') {
825
- newValueString = changedValue ? 'ON' : 'OFF';
826
- } else {
827
- changedValue = String(changedValue);
828
- newValueString = changedValue.includes(THEME_IDENTIFIER)
829
- ? changedValue.replace(THEME_IDENTIFIER, '')
830
- : changedValue;
831
- }
832
-
833
- return { settingInstance, changedKey, newValueString };
834
- }
835
-
836
- private getMixpanelInstanceValue(isPracticeQuestion: boolean) {
837
- return isPracticeQuestion ? 'practice question' : 'real test';
838
- }
839
-
840
- private publishTestResults() {
841
- this.codingTestResutsSubj$.next({ ...this.codingTestResults });
842
- }
843
- }