@testgorilla/tgo-coding-test 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
  2. package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
  3. package/{src/index.ts → index.d.ts} +2 -19
  4. package/lib/components/code-editor/code-editor.component.d.ts +54 -0
  5. package/lib/components/code-editor/code-editor.service.d.ts +12 -0
  6. package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
  7. package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
  8. package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
  9. package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
  10. package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
  11. package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
  12. package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
  13. package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
  14. package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
  15. package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
  16. package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
  17. package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
  18. package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
  19. package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
  20. package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
  21. package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
  22. package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
  23. package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
  24. package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
  25. package/lib/components/coding-question/coding-question.component.d.ts +45 -0
  26. package/lib/components/coding-section/coding-section.component.d.ts +52 -0
  27. package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
  28. package/lib/components/configurations/configurations.component.d.ts +40 -0
  29. package/lib/components/instructions/instructions.component.d.ts +48 -0
  30. package/lib/components/panel/panel.component.d.ts +12 -0
  31. package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
  32. package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
  33. package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
  34. package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
  35. package/lib/components/tests/test-results.component.d.ts +33 -0
  36. package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
  37. package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
  38. package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
  39. package/lib/config/tgo-coding-test.config.d.ts +24 -0
  40. package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
  41. package/lib/config/tgo-coding-test.token.d.ts +9 -0
  42. package/lib/models/auto-saved-data.d.ts +42 -0
  43. package/lib/models/code-event.d.ts +15 -0
  44. package/lib/models/coderunner-execution-results.d.ts +51 -0
  45. package/lib/models/configs.d.ts +15 -0
  46. package/lib/models/language-change-action.d.ts +4 -0
  47. package/lib/models/lat-languages.d.ts +8 -0
  48. package/lib/models/mixpanel-events.d.ts +3 -0
  49. package/lib/models/mode.d.ts +5 -0
  50. package/lib/models/paste-data.d.ts +4 -0
  51. package/lib/models/programming-language.d.ts +8 -0
  52. package/lib/models/test-cases.d.ts +67 -0
  53. package/lib/models/theme.d.ts +4 -0
  54. package/lib/models/translations.d.ts +1 -0
  55. package/lib/models/view-mode.d.ts +6 -0
  56. package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
  57. package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
  58. package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
  59. package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
  60. package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
  61. package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
  62. package/lib/services/coding-test-config.service.d.ts +38 -0
  63. package/lib/services/configurations.service.d.ts +37 -0
  64. package/lib/services/lib-coding-test.service.d.ts +69 -0
  65. package/lib/services/storage.service.d.ts +83 -0
  66. package/lib/services/test-cases.service.d.ts +12 -0
  67. package/lib/services/theme.service.d.ts +17 -0
  68. package/lib/utils/additional-languages/erlang.d.ts +37 -0
  69. package/lib/utils/resize-element.d.ts +2 -0
  70. package/lib/utils/time-to-ms.util.d.ts +1 -0
  71. package/package.json +17 -3
  72. package/shared/index.d.ts +4 -0
  73. package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
  74. package/shared/lib/components/audio-animation/index.d.ts +1 -0
  75. package/shared/lib/components/index.d.ts +2 -0
  76. package/shared/lib/components/vimeo-video/index.d.ts +1 -0
  77. package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
  78. package/shared/lib/models/answer.d.ts +17 -0
  79. package/shared/lib/models/assessment.d.ts +80 -0
  80. package/shared/lib/models/environment.d.ts +1 -0
  81. package/shared/lib/models/index.d.ts +8 -0
  82. package/shared/lib/models/question-component.d.ts +54 -0
  83. package/shared/lib/models/question.d.ts +102 -0
  84. package/shared/lib/models/test.d.ts +81 -0
  85. package/shared/lib/models/translations.d.ts +1 -0
  86. package/shared/lib/models/window.d.ts +6 -0
  87. package/shared/lib/services/api/api.service.d.ts +25 -0
  88. package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
  89. package/shared/lib/services/environment/environment.service.d.ts +6 -0
  90. package/shared/lib/services/index.d.ts +9 -0
  91. package/shared/lib/services/localization/languages.model.d.ts +15 -0
  92. package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
  93. package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
  94. package/shared/lib/services/media/media.service.d.ts +29 -0
  95. package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
  96. package/shared/lib/services/theme/theme.service.d.ts +8 -0
  97. package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
  98. package/shared/test-mocks/index.d.ts +2 -0
  99. package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
  100. package/.eslintrc.json +0 -46
  101. package/jest.config.ts +0 -26
  102. package/ng-package.json +0 -14
  103. package/project.json +0 -48
  104. package/src/lib/components/.gitkeep +0 -0
  105. package/src/lib/components/code-editor/code-editor.component.html +0 -10
  106. package/src/lib/components/code-editor/code-editor.component.scss +0 -21
  107. package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
  108. package/src/lib/components/code-editor/code-editor.component.ts +0 -368
  109. package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
  110. package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
  111. package/src/lib/components/code-editor/code-editor.service.ts +0 -94
  112. package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
  113. package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
  114. package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
  115. package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
  116. package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
  117. package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
  118. package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
  119. package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
  120. package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
  121. package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
  122. package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
  123. package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
  124. package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
  125. package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
  126. package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
  127. package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
  128. package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
  129. package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
  130. package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
  131. package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
  132. package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
  133. package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
  134. package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
  135. package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
  136. package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
  137. package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
  138. package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
  139. package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
  140. package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
  141. package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
  142. package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
  143. package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
  144. package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
  145. package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
  146. package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
  147. package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
  148. package/src/lib/components/coding-question/coding-question.component.html +0 -78
  149. package/src/lib/components/coding-question/coding-question.component.scss +0 -75
  150. package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
  151. package/src/lib/components/coding-question/coding-question.component.ts +0 -101
  152. package/src/lib/components/coding-section/coding-section.component.html +0 -82
  153. package/src/lib/components/coding-section/coding-section.component.scss +0 -64
  154. package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
  155. package/src/lib/components/coding-section/coding-section.component.ts +0 -186
  156. package/src/lib/components/coding-test.module.ts +0 -124
  157. package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
  158. package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
  159. package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
  160. package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -36
  161. package/src/lib/components/configurations/configurations.component.html +0 -57
  162. package/src/lib/components/configurations/configurations.component.scss +0 -42
  163. package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
  164. package/src/lib/components/configurations/configurations.component.ts +0 -97
  165. package/src/lib/components/instructions/instructions.component.html +0 -41
  166. package/src/lib/components/instructions/instructions.component.scss +0 -173
  167. package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
  168. package/src/lib/components/instructions/instructions.component.ts +0 -137
  169. package/src/lib/components/panel/panel.component.html +0 -19
  170. package/src/lib/components/panel/panel.component.scss +0 -41
  171. package/src/lib/components/panel/panel.component.spec.ts +0 -40
  172. package/src/lib/components/panel/panel.component.ts +0 -33
  173. package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
  174. package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
  175. package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
  176. package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -154
  177. package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
  178. package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
  179. package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
  180. package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -204
  181. package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
  182. package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
  183. package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
  184. package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -101
  185. package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
  186. package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
  187. package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
  188. package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -17
  189. package/src/lib/components/tests/test-results.component.html +0 -119
  190. package/src/lib/components/tests/test-results.component.scss +0 -189
  191. package/src/lib/components/tests/test-results.component.spec.ts +0 -140
  192. package/src/lib/components/tests/test-results.component.ts +0 -97
  193. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
  194. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
  195. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
  196. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -278
  197. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
  198. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
  199. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
  200. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -578
  201. package/src/lib/config/tgo-coding-test.config.ts +0 -26
  202. package/src/lib/config/tgo-coding-test.token.ts +0 -21
  203. package/src/lib/models/.gitkeep +0 -0
  204. package/src/lib/models/auto-saved-data.ts +0 -51
  205. package/src/lib/models/code-event.ts +0 -17
  206. package/src/lib/models/coderunner-execution-results.ts +0 -58
  207. package/src/lib/models/coding-lib.mocks.ts +0 -246
  208. package/src/lib/models/configs.ts +0 -18
  209. package/src/lib/models/language-change-action.ts +0 -4
  210. package/src/lib/models/lat-languages.ts +0 -12
  211. package/src/lib/models/mixpanel-events.ts +0 -3
  212. package/src/lib/models/mode.ts +0 -5
  213. package/src/lib/models/paste-data.ts +0 -4
  214. package/src/lib/models/programming-language.ts +0 -9
  215. package/src/lib/models/test-cases.ts +0 -74
  216. package/src/lib/models/theme.ts +0 -5
  217. package/src/lib/models/translations.ts +0 -1
  218. package/src/lib/models/view-mode.ts +0 -6
  219. package/src/lib/services/.gitkeep +0 -0
  220. package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
  221. package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
  222. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
  223. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
  224. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
  225. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
  226. package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
  227. package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
  228. package/src/lib/services/coding-test-config.service.ts +0 -48
  229. package/src/lib/services/configurations.service.mocks.ts +0 -77
  230. package/src/lib/services/configurations.service.spec.ts +0 -79
  231. package/src/lib/services/configurations.service.ts +0 -111
  232. package/src/lib/services/index.ts +0 -0
  233. package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
  234. package/src/lib/services/lib-coding-test.service.ts +0 -157
  235. package/src/lib/services/local-storage.service.mocks.ts +0 -22
  236. package/src/lib/services/storage.service.spec.ts +0 -1119
  237. package/src/lib/services/storage.service.ts +0 -729
  238. package/src/lib/services/test-cases.service.spec.ts +0 -53
  239. package/src/lib/services/test-cases.service.ts +0 -29
  240. package/src/lib/services/theme.service.spec.ts +0 -76
  241. package/src/lib/services/theme.service.ts +0 -34
  242. package/src/lib/styles/mixins.scss +0 -86
  243. package/src/lib/styles/styles.scss +0 -112
  244. package/src/lib/styles/variables.scss +0 -105
  245. package/src/lib/utils/.gitkeep +0 -0
  246. package/src/lib/utils/additional-languages/erlang.ts +0 -115
  247. package/src/lib/utils/resize-element.ts +0 -15
  248. package/src/lib/utils/time-to-ms.util.ts +0 -10
  249. package/src/test-setup.ts +0 -3
  250. package/tsconfig.json +0 -19
  251. package/tsconfig.lib.json +0 -19
  252. package/tsconfig.lib.prod.json +0 -10
  253. package/tsconfig.spec.json +0 -17
  254. /package/{src/assets → assets}/i18n/en.json +0 -0
  255. /package/{src/lib/components/code-editor/helpers/index.ts → lib/components/code-editor/helpers/index.d.ts} +0 -0
@@ -1,134 +0,0 @@
1
- import { TestBed, waitForAsync } from '@angular/core/testing';
2
- import { CoderunnerApiService } from './coderunner-api.service';
3
- import { NO_ERRORS_SCHEMA } from '@angular/core';
4
- import {
5
- ApiService,
6
- getTranslocoModule,
7
- } from '@testgorilla/tgo-test-shared';
8
- import { of } from 'rxjs';
9
- import { SnackbarService } from '@testgorilla/tgo-ui';
10
- import { CodingTestConfigService } from '../../services/coding-test-config.service';
11
-
12
- // todo: add tests to check return type
13
- describe('CoderunnerApiService', () => {
14
- let service: CoderunnerApiService;
15
- let apiService: ApiService;
16
- const baseUrl = 'www.some-test-url.com';
17
- const invitationUuid = '123-456-789';
18
- const testResultId = 123789;
19
- const questionId = 123;
20
- const questionResultId = 789;
21
- const code = 'lorem ipsum';
22
- const language = 'python';
23
- const testCases = [
24
- {
25
- input: '1 2 3',
26
- solution: '3 4 5',
27
- },
28
- ];
29
- const headers = {};
30
-
31
- beforeEach(waitForAsync(() => {
32
- TestBed.configureTestingModule({
33
- providers: [
34
- CoderunnerApiService,
35
- {
36
- provide: ApiService,
37
- useValue: {
38
- post: jest.fn().mockReturnValue(of({})),
39
- getInvitationUUID: jest.fn().mockReturnValue(invitationUuid),
40
- },
41
- },
42
- {
43
- provide: CodingTestConfigService,
44
- useValue: {
45
- getCoderunnerV2Endpoint: jest.fn().mockReturnValue(baseUrl),
46
- },
47
- },
48
- { provide: SnackbarService, useValue: { error: jest.fn() } },
49
- ],
50
- imports: [getTranslocoModule()],
51
- schemas: [NO_ERRORS_SCHEMA],
52
- });
53
-
54
- service = TestBed.inject(CoderunnerApiService);
55
- apiService = TestBed.inject(ApiService);
56
- }));
57
-
58
- describe('when runPublicTest$ is called', () => {
59
- const expectedUrl = `${baseUrl}/api/attempts/public/`;
60
-
61
- it('should call api service with POST and proper params', () => {
62
- const spy = jest.spyOn(apiService, 'post');
63
-
64
- service.runPublicTest$(code, testCases, language);
65
-
66
- expect(spy).toHaveBeenCalledWith(
67
- expectedUrl,
68
- {
69
- question_id: 0,
70
- code,
71
- language,
72
- testcases: testCases,
73
- question_result_id: 0,
74
- },
75
- headers,
76
- expect.any(Function),
77
- true
78
- );
79
- });
80
- });
81
-
82
- describe('when runPreviewTest$ is called', () => {
83
- const expectedUrl = `${baseUrl}/api/attempts/preview/`;
84
-
85
- it('should call api service with POST and proper params', () => {
86
- const spy = jest.spyOn(apiService, 'post');
87
-
88
- service.runPreviewTest$(testResultId, code, testCases, language);
89
-
90
- expect(spy).toHaveBeenCalledWith(
91
- expectedUrl,
92
- {
93
- code,
94
- language,
95
- testcases: testCases,
96
- test_result_id: testResultId,
97
- },
98
- headers,
99
- expect.any(Function),
100
- true
101
- );
102
- });
103
- });
104
-
105
- describe('when runNonPreviewTest$ is called', () => {
106
- const expectedUrl = `${baseUrl}/api/attempts/`;
107
-
108
- it('should call api service with POST and proper params', () => {
109
- const spy = jest.spyOn(apiService, 'post');
110
-
111
- service.runNonPreviewTest$(
112
- questionId,
113
- questionResultId,
114
- code,
115
- testCases,
116
- language
117
- );
118
-
119
- expect(spy).toHaveBeenCalledWith(
120
- expectedUrl,
121
- {
122
- question_id: questionId,
123
- question_result_id: questionResultId,
124
- code,
125
- language,
126
- testcases: testCases,
127
- },
128
- headers,
129
- expect.any(Function),
130
- true
131
- );
132
- });
133
- });
134
- });
@@ -1,105 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { ApiService } from '@testgorilla/tgo-test-shared';
3
- import { EMPTY, Observable, throwError } from 'rxjs';
4
- import { LATFormattedTestCases, SqlTestCase } from '../../models/test-cases';
5
- import { CoderunnerAttemptModel } from '../../models/coderunner-execution-results';
6
- import { HttpErrorResponse } from '@angular/common/http';
7
- import { SnackbarService } from '@testgorilla/tgo-ui';
8
- import { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';
9
- import { translate } from '@ngneat/transloco';
10
- import { CodeEvent, CodeEventResponse } from '../../models/code-event';
11
- import { CodingTestConfigService } from '../coding-test-config.service';
12
-
13
- @Injectable()
14
- export class CoderunnerApiService {
15
- private readonly snackbarService = inject(SnackbarService);
16
- private readonly apiService = inject(ApiService);
17
- private readonly configService = inject(CodingTestConfigService);
18
-
19
- private readonly CR2Url = `${this.configService.getCoderunnerV2Endpoint()}/`;
20
-
21
- // todo: will public preview be supported by mFE? if not - remove this
22
- runPublicTest$(
23
- code: string,
24
- testcases: LATFormattedTestCases[] | SqlTestCase[],
25
- language: string
26
- ): Observable<CoderunnerAttemptModel> {
27
- return this.apiService.post(
28
- `${this.CR2Url}api/attempts/public/`,
29
- {
30
- question_id: 0,
31
- language,
32
- code,
33
- testcases,
34
- question_result_id: 0,
35
- },
36
- {},
37
- this.handleError.bind(this),
38
- true
39
- );
40
- }
41
-
42
- runPreviewTest$(
43
- test_result_id: number,
44
- code: string,
45
- testcases: LATFormattedTestCases[] | SqlTestCase[],
46
- language: string
47
- ): Observable<CoderunnerAttemptModel> {
48
- return this.apiService.post(
49
- `${this.CR2Url}api/attempts/preview/`,
50
- {
51
- language,
52
- code,
53
- testcases,
54
- test_result_id,
55
- },
56
- {},
57
- this.handleError.bind(this),
58
- true
59
- );
60
- }
61
-
62
- runNonPreviewTest$(
63
- question_id: number,
64
- question_result_id: number,
65
- code: string,
66
- testcases: LATFormattedTestCases[] | SqlTestCase[],
67
- language: string
68
- ): Observable<CoderunnerAttemptModel> {
69
- return this.apiService.post(
70
- `${this.CR2Url}api/attempts/`,
71
- {
72
- question_id,
73
- language,
74
- code,
75
- testcases,
76
- question_result_id,
77
- },
78
- {},
79
- this.handleError.bind(this),
80
- true
81
- );
82
- }
83
-
84
- sendCodeEvent$(event: CodeEvent): Observable<CodeEventResponse> {
85
- return this.apiService.post(
86
- `${this.CR2Url}api/events/`,
87
- event,
88
- {},
89
- this.handleError.bind(this),
90
- true
91
- );
92
- }
93
-
94
- private handleError({ error }: HttpErrorResponse): Observable<never> {
95
- if (error.detail) {
96
- return throwError(() => error);
97
- }
98
-
99
- const genericErrorText = translate(
100
- `${ROOT_TRANSLATIONS_SCOPE}.ERRORS.SYSTEM_ERROR`
101
- );
102
- this.snackbarService.error(genericErrorText);
103
- return EMPTY;
104
- }
105
- }
@@ -1,161 +0,0 @@
1
- import { TestBed, waitForAsync } from '@angular/core/testing';
2
- import {
3
- CodingTestTourMode,
4
- CodingTestTourService,
5
- } from './coding-test-tour.service';
6
- import { NO_ERRORS_SCHEMA } from '@angular/core';
7
- import { getTranslocoModule } from '@testgorilla/tgo-test-shared';
8
- import { GuidedTourService } from 'ngx-guided-tour';
9
-
10
- describe('CodingTestTourService', () => {
11
- let service: CodingTestTourService;
12
- let guidedTourService: GuidedTourService;
13
- let startTourSpy: jest.SpyInstance;
14
-
15
- const minimumScreenSize = 599;
16
- const tourId = 'lat-coding-tour';
17
- const tourSelectors = [
18
- '#language-dropdown',
19
- '#test-cases',
20
- '#configuration-ide-button',
21
- ];
22
- const practiceQuestionSelector = '#question-section';
23
- const submitStepSelector = '[data-tourId*="question-next-finish-button"]';
24
-
25
- beforeEach(waitForAsync(() => {
26
- TestBed.configureTestingModule({
27
- providers: [
28
- CodingTestTourService,
29
- {
30
- provide: GuidedTourService,
31
- useValue: {
32
- currentTourStepCount: 10,
33
- skipTour: jest.fn(),
34
- startTour: jest.fn(),
35
- },
36
- },
37
- ],
38
- imports: [getTranslocoModule()],
39
- schemas: [NO_ERRORS_SCHEMA],
40
- });
41
-
42
- service = TestBed.inject(CodingTestTourService);
43
- guidedTourService = TestBed.inject(GuidedTourService);
44
- }));
45
-
46
- describe('when init is called', () => {
47
- beforeEach(() => {
48
- startTourSpy = jest.spyOn(guidedTourService, 'startTour');
49
- Object.defineProperty(window, 'innerWidth', {
50
- value: minimumScreenSize + 1,
51
- });
52
- });
53
-
54
- describe('and window innerWidth is MORE than minimum screen size', () => {
55
- describe('and mode is PracticeQuestion', () => {
56
- it('should start tour with proper steps', () => {
57
- const stepsExpectedList = [
58
- practiceQuestionSelector,
59
- ...tourSelectors,
60
- submitStepSelector,
61
- ].map((selector) =>
62
- expect.objectContaining({
63
- selector,
64
- })
65
- );
66
-
67
- service.init(CodingTestTourMode.PracticeQuestion);
68
-
69
- expect(startTourSpy).toHaveBeenCalledWith(
70
- expect.objectContaining({
71
- tourId,
72
- useOrb: false,
73
- minimumScreenSize,
74
- steps: expect.arrayContaining(stepsExpectedList),
75
- })
76
- );
77
- });
78
- });
79
-
80
- describe('and mode is RealQuestion', () => {
81
- it('should start tour with proper steps', () => {
82
- const stepsExpectedList = tourSelectors.map((selector) =>
83
- expect.objectContaining({
84
- selector,
85
- })
86
- );
87
-
88
- service.init(CodingTestTourMode.PracticeQuestion);
89
-
90
- expect(startTourSpy).toHaveBeenCalledWith(
91
- expect.objectContaining({
92
- tourId,
93
- useOrb: false,
94
- minimumScreenSize,
95
- steps: expect.arrayContaining(stepsExpectedList),
96
- })
97
- );
98
- });
99
- });
100
- });
101
-
102
- describe('and window innerWidth is LESS than minimum screen size', () => {
103
- it('should NOT start tour', () => {
104
- Object.defineProperty(window, 'innerWidth', {
105
- value: minimumScreenSize - 1,
106
- });
107
-
108
- service.init(CodingTestTourMode.RealQuestion);
109
-
110
- expect(startTourSpy).not.toHaveBeenCalled();
111
- });
112
- });
113
-
114
- it('should publish guided tour id', (done) => {
115
- service.init(CodingTestTourMode.RealQuestion);
116
-
117
- service.activeGuidedTourId$.subscribe((value) => {
118
- expect(value).toEqual(tourId);
119
- done();
120
- });
121
- });
122
-
123
- afterEach(() => {
124
- startTourSpy.mockRestore();
125
- });
126
- });
127
-
128
- describe('when skipTour is called', () => {
129
- let skipTourSpy: jest.SpyInstance;
130
-
131
- beforeEach(() => {
132
- skipTourSpy = jest.spyOn(guidedTourService, 'skipTour');
133
- });
134
-
135
- describe('and there is currentTourStepCount', () => {
136
- it('should call guidedTourService skipTour', () => {
137
- Object.defineProperty(guidedTourService, 'currentTourStepCount', {
138
- get: jest.fn().mockReturnValue(1),
139
- });
140
- service.skipTour();
141
-
142
- expect(skipTourSpy).toHaveBeenCalled();
143
- });
144
- });
145
-
146
- describe('and there is NO currentTourStepCount', () => {
147
- it('should NOT call guidedTourService skipTour', () => {
148
- Object.defineProperty(guidedTourService, 'currentTourStepCount', {
149
- get: jest.fn().mockReturnValue(null),
150
- });
151
- service.skipTour();
152
-
153
- expect(skipTourSpy).not.toHaveBeenCalled();
154
- });
155
- });
156
-
157
- afterEach(() => {
158
- skipTourSpy.mockRestore();
159
- });
160
- });
161
- });
@@ -1,100 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { translate } from '@ngneat/transloco';
3
- import {
4
- GuidedTour,
5
- GuidedTourService,
6
- Orientation,
7
- TourStep,
8
- } from 'ngx-guided-tour';
9
- import { BehaviorSubject } from 'rxjs';
10
-
11
- import { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';
12
-
13
- export const enum CodingTestTourMode {
14
- PracticeQuestion = 'practice',
15
- RealQuestion = 'real',
16
- }
17
-
18
- @Injectable()
19
- export class CodingTestTourService {
20
- private readonly translationContext = `${ROOT_TRANSLATIONS_SCOPE}.TOUR.`;
21
- private readonly guidedTourId = 'lat-coding-tour';
22
- private readonly MINIMUM_SCREEN_SIZE = 599;
23
-
24
- private activeGuidedTourIdSub$ = new BehaviorSubject('');
25
- activeGuidedTourId$ = this.activeGuidedTourIdSub$.asObservable();
26
-
27
- constructor(private guidedTourService: GuidedTourService) {}
28
-
29
- init(mode: CodingTestTourMode): void {
30
- this.start(mode);
31
- }
32
-
33
- skipTour(): void {
34
- // currentTourStepCount checks if there is a currentTour before checking stepCount.
35
- if (this.guidedTourService.currentTourStepCount) {
36
- this.guidedTourService.skipTour();
37
- }
38
- }
39
-
40
- private start(mode: CodingTestTourMode) {
41
- if (window.innerWidth > this.MINIMUM_SCREEN_SIZE) {
42
- this.guidedTourService.startTour(this.getTour(mode));
43
- }
44
- this.publishActiveGuidedTourId();
45
- }
46
-
47
- private publishActiveGuidedTourId(): void {
48
- this.activeGuidedTourIdSub$.next(this.guidedTourId);
49
- }
50
-
51
- private getTour(mode: CodingTestTourMode): GuidedTour {
52
- let steps: TourStep[] = [];
53
- const step1 = {
54
- title: translate(`${this.translationContext}STEP_1.TITLE`),
55
- selector: '#question-section',
56
- content: translate(`${this.translationContext}STEP_1.MESSAGE`),
57
- orientation: Orientation.Right,
58
- };
59
- const step2 = {
60
- title: translate(`${this.translationContext}STEP_2.TITLE`),
61
- selector: '#language-dropdown',
62
- content: translate(`${this.translationContext}STEP_2.MESSAGE`),
63
- orientation: Orientation.Bottom,
64
- };
65
- const step3 = {
66
- title: translate(`${this.translationContext}STEP_3.TITLE`),
67
- selector: '#test-cases',
68
- content: translate(`${this.translationContext}STEP_3.MESSAGE`),
69
- orientation: Orientation.Top,
70
- };
71
- const step4 = {
72
- title: translate(`${this.translationContext}STEP_4.TITLE`),
73
- selector: '#configuration-ide-button',
74
- content: translate(`${this.translationContext}STEP_4.MESSAGE`),
75
- orientation: Orientation.BottomRight,
76
- };
77
- const step5 = {
78
- title: translate(`${this.translationContext}STEP_5.TITLE`),
79
- selector: '[data-tourId*="question-next-finish-button"]',
80
- content: translate(`${this.translationContext}STEP_5.MESSAGE`),
81
- orientation: Orientation.Bottom,
82
- };
83
-
84
- switch (mode) {
85
- case CodingTestTourMode.PracticeQuestion:
86
- steps = [step1, step2, step3, step4, step5];
87
- break;
88
- case CodingTestTourMode.RealQuestion:
89
- steps = [step2, step3, step4];
90
- break;
91
- }
92
-
93
- return {
94
- tourId: this.guidedTourId,
95
- useOrb: false,
96
- minimumScreenSize: this.MINIMUM_SCREEN_SIZE,
97
- steps,
98
- };
99
- }
100
- }