@testgorilla/tgo-coding-test 0.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 (163) hide show
  1. package/.eslintrc.json +45 -0
  2. package/README.md +257 -0
  3. package/jest.config.ts +21 -0
  4. package/ng-package.json +14 -0
  5. package/package.json +33 -0
  6. package/project.json +36 -0
  7. package/src/assets/i18n/en.json +124 -0
  8. package/src/index.ts +30 -0
  9. package/src/lib/components/.gitkeep +0 -0
  10. package/src/lib/components/code-editor/code-editor.component.html +10 -0
  11. package/src/lib/components/code-editor/code-editor.component.scss +21 -0
  12. package/src/lib/components/code-editor/code-editor.component.spec.ts +136 -0
  13. package/src/lib/components/code-editor/code-editor.component.ts +369 -0
  14. package/src/lib/components/code-editor/code-editor.mocks.ts +28 -0
  15. package/src/lib/components/code-editor/code-editor.service.spec.ts +160 -0
  16. package/src/lib/components/code-editor/code-editor.service.ts +94 -0
  17. package/src/lib/components/code-editor/helpers/c-helper.spec.ts +39 -0
  18. package/src/lib/components/code-editor/helpers/c-helper.ts +51 -0
  19. package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +30 -0
  20. package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +16 -0
  21. package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +24 -0
  22. package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +67 -0
  23. package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +40 -0
  24. package/src/lib/components/code-editor/helpers/cpp-helper.ts +52 -0
  25. package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +42 -0
  26. package/src/lib/components/code-editor/helpers/csharp-helper.ts +55 -0
  27. package/src/lib/components/code-editor/helpers/go-helper.spec.ts +41 -0
  28. package/src/lib/components/code-editor/helpers/go-helper.ts +54 -0
  29. package/src/lib/components/code-editor/helpers/index.ts +15 -0
  30. package/src/lib/components/code-editor/helpers/java-helper.spec.ts +41 -0
  31. package/src/lib/components/code-editor/helpers/java-helper.ts +54 -0
  32. package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +39 -0
  33. package/src/lib/components/code-editor/helpers/javascript-helper.ts +32 -0
  34. package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +41 -0
  35. package/src/lib/components/code-editor/helpers/kotlin-helper.ts +54 -0
  36. package/src/lib/components/code-editor/helpers/php-helper.spec.ts +39 -0
  37. package/src/lib/components/code-editor/helpers/php-helper.ts +32 -0
  38. package/src/lib/components/code-editor/helpers/python-helper.spec.ts +39 -0
  39. package/src/lib/components/code-editor/helpers/python-helper.ts +32 -0
  40. package/src/lib/components/code-editor/helpers/r-helper.spec.ts +39 -0
  41. package/src/lib/components/code-editor/helpers/r-helper.ts +32 -0
  42. package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +39 -0
  43. package/src/lib/components/code-editor/helpers/ruby-helper.ts +32 -0
  44. package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +41 -0
  45. package/src/lib/components/code-editor/helpers/scala-helper.ts +53 -0
  46. package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +87 -0
  47. package/src/lib/components/code-editor/helpers/sql-helper.ts +44 -0
  48. package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +40 -0
  49. package/src/lib/components/code-editor/helpers/swift-helper.ts +51 -0
  50. package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +40 -0
  51. package/src/lib/components/code-editor/helpers/typescript-helper.ts +52 -0
  52. package/src/lib/components/code-editor/models/code-editor.model.ts +9 -0
  53. package/src/lib/components/code-editor/models/coding-snapshot.model.ts +4 -0
  54. package/src/lib/components/coding-question/coding-question.component.html +78 -0
  55. package/src/lib/components/coding-question/coding-question.component.scss +76 -0
  56. package/src/lib/components/coding-question/coding-question.component.spec.ts +85 -0
  57. package/src/lib/components/coding-question/coding-question.component.ts +102 -0
  58. package/src/lib/components/coding-section/coding-section.component.html +82 -0
  59. package/src/lib/components/coding-section/coding-section.component.scss +64 -0
  60. package/src/lib/components/coding-section/coding-section.component.spec.ts +257 -0
  61. package/src/lib/components/coding-section/coding-section.component.ts +187 -0
  62. package/src/lib/components/coding-test.module.ts +124 -0
  63. package/src/lib/components/common/truncated-text/truncated-text.component.html +6 -0
  64. package/src/lib/components/common/truncated-text/truncated-text.component.scss +18 -0
  65. package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +84 -0
  66. package/src/lib/components/common/truncated-text/truncated-text.component.ts +37 -0
  67. package/src/lib/components/configurations/configurations.component.html +57 -0
  68. package/src/lib/components/configurations/configurations.component.scss +42 -0
  69. package/src/lib/components/configurations/configurations.component.spec.ts +186 -0
  70. package/src/lib/components/configurations/configurations.component.ts +98 -0
  71. package/src/lib/components/instructions/instructions.component.html +41 -0
  72. package/src/lib/components/instructions/instructions.component.scss +167 -0
  73. package/src/lib/components/instructions/instructions.component.spec.ts +106 -0
  74. package/src/lib/components/instructions/instructions.component.ts +138 -0
  75. package/src/lib/components/panel/panel.component.html +19 -0
  76. package/src/lib/components/panel/panel.component.scss +41 -0
  77. package/src/lib/components/panel/panel.component.spec.ts +40 -0
  78. package/src/lib/components/panel/panel.component.ts +34 -0
  79. package/src/lib/components/runnable-editor/runnable-editor.component.html +75 -0
  80. package/src/lib/components/runnable-editor/runnable-editor.component.scss +55 -0
  81. package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +124 -0
  82. package/src/lib/components/runnable-editor/runnable-editor.component.ts +155 -0
  83. package/src/lib/components/tests/test-cases/test-cases.component.html +135 -0
  84. package/src/lib/components/tests/test-cases/test-cases.component.scss +220 -0
  85. package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +401 -0
  86. package/src/lib/components/tests/test-cases/test-cases.component.ts +205 -0
  87. package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +94 -0
  88. package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +103 -0
  89. package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +122 -0
  90. package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +102 -0
  91. package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +16 -0
  92. package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +49 -0
  93. package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +22 -0
  94. package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +18 -0
  95. package/src/lib/components/tests/test-results.component.html +119 -0
  96. package/src/lib/components/tests/test-results.component.scss +189 -0
  97. package/src/lib/components/tests/test-results.component.spec.ts +140 -0
  98. package/src/lib/components/tests/test-results.component.ts +98 -0
  99. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +96 -0
  100. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +6 -0
  101. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +599 -0
  102. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +279 -0
  103. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +36 -0
  104. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +183 -0
  105. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +883 -0
  106. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +575 -0
  107. package/src/lib/config/index.ts +3 -0
  108. package/src/lib/config/tgo-coding-test.config.ts +26 -0
  109. package/src/lib/config/tgo-coding-test.provider.ts +38 -0
  110. package/src/lib/config/tgo-coding-test.token.ts +21 -0
  111. package/src/lib/models/.gitkeep +0 -0
  112. package/src/lib/models/auto-saved-data.ts +51 -0
  113. package/src/lib/models/code-event.ts +17 -0
  114. package/src/lib/models/coderunner-execution-results.ts +58 -0
  115. package/src/lib/models/coding-lib.mocks.ts +246 -0
  116. package/src/lib/models/configs.ts +18 -0
  117. package/src/lib/models/language-change-action.ts +4 -0
  118. package/src/lib/models/lat-languages.ts +12 -0
  119. package/src/lib/models/mixpanel-events.ts +3 -0
  120. package/src/lib/models/mode.ts +5 -0
  121. package/src/lib/models/paste-data.ts +4 -0
  122. package/src/lib/models/programming-language.ts +9 -0
  123. package/src/lib/models/test-cases.ts +74 -0
  124. package/src/lib/models/theme.ts +5 -0
  125. package/src/lib/models/translations.ts +1 -0
  126. package/src/lib/models/view-mode.ts +6 -0
  127. package/src/lib/pipes/memoize-func.pipe.ts +34 -0
  128. package/src/lib/services/.gitkeep +0 -0
  129. package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +40 -0
  130. package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +15 -0
  131. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +134 -0
  132. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +105 -0
  133. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +161 -0
  134. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +100 -0
  135. package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +1524 -0
  136. package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +843 -0
  137. package/src/lib/services/candidate-coding-test-services/index.ts +4 -0
  138. package/src/lib/services/coding-test-config.service.ts +48 -0
  139. package/src/lib/services/configurations.service.mocks.ts +77 -0
  140. package/src/lib/services/configurations.service.spec.ts +79 -0
  141. package/src/lib/services/configurations.service.ts +111 -0
  142. package/src/lib/services/index.ts +0 -0
  143. package/src/lib/services/lib-coding-test.service.spec.ts +265 -0
  144. package/src/lib/services/lib-coding-test.service.ts +157 -0
  145. package/src/lib/services/local-storage.service.mocks.ts +22 -0
  146. package/src/lib/services/storage.service.spec.ts +1120 -0
  147. package/src/lib/services/storage.service.ts +729 -0
  148. package/src/lib/services/test-cases.service.spec.ts +53 -0
  149. package/src/lib/services/test-cases.service.ts +29 -0
  150. package/src/lib/services/theme.service.spec.ts +76 -0
  151. package/src/lib/services/theme.service.ts +34 -0
  152. package/src/lib/styles/mixins.scss +86 -0
  153. package/src/lib/styles/styles.scss +112 -0
  154. package/src/lib/styles/variables.scss +105 -0
  155. package/src/lib/utils/.gitkeep +0 -0
  156. package/src/lib/utils/additional-languages/erlang.ts +115 -0
  157. package/src/lib/utils/resize-element.ts +15 -0
  158. package/src/lib/utils/time-to-ms.util.ts +10 -0
  159. package/src/test-setup.ts +1 -0
  160. package/tsconfig.json +16 -0
  161. package/tsconfig.lib.json +12 -0
  162. package/tsconfig.lib.prod.json +9 -0
  163. package/tsconfig.spec.json +13 -0
@@ -0,0 +1,157 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { BehaviorSubject, map, merge, Observable, ReplaySubject, skip, Subject } from 'rxjs';
3
+ import { CodeEditorLanguages } from '../components/code-editor/helpers/code-editor-helper.model';
4
+ import { LanguageChangeAction } from '../models/language-change-action';
5
+ import { CustomTestCase, ExampleTestCase, TestCaseDeletionAction, TestCaseDeletionData } from '../models/test-cases';
6
+ import { Themes } from '../models/theme';
7
+ import { ConfigurationsService } from './configurations.service';
8
+
9
+ export const enum ResetCodeAction {
10
+ Try = 'try',
11
+ Confirm = 'confirm',
12
+ }
13
+
14
+ declare global {
15
+ interface Window {
16
+ monaco: any;
17
+ hljs: any;
18
+ }
19
+ }
20
+
21
+ @Injectable({
22
+ providedIn: 'root',
23
+ })
24
+ export class LibCodingTestService {
25
+ private readonly configurationsService = inject(ConfigurationsService);
26
+
27
+ private codeResetSubj$ = new Subject<ResetCodeAction>();
28
+ codeReset$: Observable<ResetCodeAction> = this.codeResetSubj$.asObservable();
29
+
30
+ private codeChangeSubj$ = new Subject<string>();
31
+ codeChange$: Observable<string> = this.codeChangeSubj$.asObservable();
32
+
33
+ private isFullscreenSubj$ = new BehaviorSubject<boolean>(false);
34
+ isFullscreen$: Observable<boolean> = this.isFullscreenSubj$.asObservable();
35
+
36
+ private isBoilerplateLoadingSub$ = new BehaviorSubject<boolean>(true);
37
+ isBoilerplateLoading$: Observable<boolean> = this.isBoilerplateLoadingSub$.asObservable();
38
+
39
+ themeChanged$: Observable<Themes> = this.configurationsService.colorTheme$;
40
+
41
+ private languageChangeSub$ = new Subject<LanguageChangeAction>();
42
+ languageChange$: Observable<LanguageChangeAction> = this.languageChangeSub$.asObservable();
43
+
44
+ private testCaseDeletionSub$ = new Subject<TestCaseDeletionData>();
45
+ testCaseDeletion$: Observable<TestCaseDeletionData> = this.testCaseDeletionSub$.asObservable();
46
+
47
+ private currentLanguageSub$ = new ReplaySubject<CodeEditorLanguages>(1);
48
+ currentLanguage$: Observable<CodeEditorLanguages> = this.currentLanguageSub$.asObservable();
49
+
50
+ private clearSavedCodeSub$ = new Subject<boolean>();
51
+ clearSavedCode$ = this.clearSavedCodeSub$.asObservable();
52
+
53
+ private clearLastLangSub$ = new Subject<boolean>();
54
+ clearLastLang$ = this.clearLastLangSub$.asObservable();
55
+
56
+ private startGuidedTourSubj$ = new Subject<void>();
57
+ startGuidedTour$ = this.startGuidedTourSubj$.asObservable();
58
+
59
+ private testCases: (ExampleTestCase | CustomTestCase)[];
60
+
61
+ initCode: string;
62
+ private version: string;
63
+
64
+ configFieldChanged$ = merge(
65
+ this.isFullscreen$.pipe(
66
+ skip(1),
67
+ map(isFullscreen => ({
68
+ 'Full screen': isFullscreen,
69
+ }))
70
+ ),
71
+ this.configurationsService.configFieldChanged$
72
+ );
73
+
74
+ setFullscreen(isEnabled: boolean): void {
75
+ this.isFullscreenSubj$.next(isEnabled);
76
+ }
77
+
78
+ resetCode(): void {
79
+ this.codeResetSubj$.next(ResetCodeAction.Try);
80
+ }
81
+
82
+ startGuidedTour(): void {
83
+ this.startGuidedTourSubj$.next();
84
+ }
85
+
86
+ confirmReset(): void {
87
+ this.codeResetSubj$.next(ResetCodeAction.Confirm);
88
+ }
89
+
90
+ changeCurrentCode(code: string): void {
91
+ this.codeChangeSubj$.next(code);
92
+ }
93
+
94
+ cancelLanguageChange(): void {
95
+ this.languageChangeSub$.next(LanguageChangeAction.Cancel);
96
+ }
97
+
98
+ confirmLanguageChange(): void {
99
+ this.languageChangeSub$.next(LanguageChangeAction.Confirm);
100
+ }
101
+
102
+ handleTestCaseDeletion(index: number): void {
103
+ this.testCaseDeletionSub$.next({ action: TestCaseDeletionAction.Try, index });
104
+ }
105
+
106
+ confirmTestCaseDeletion(index: number): void {
107
+ this.testCaseDeletionSub$.next({ action: TestCaseDeletionAction.Confirm, index });
108
+ }
109
+
110
+ changeCurrentLanguage(value: CodeEditorLanguages): void {
111
+ this.currentLanguageSub$.next(value);
112
+ }
113
+
114
+ updateTestCases(testCases: (ExampleTestCase | CustomTestCase)[]) {
115
+ this.testCases = testCases;
116
+ }
117
+
118
+ getTestCases(): (ExampleTestCase | CustomTestCase)[] {
119
+ return this.testCases;
120
+ }
121
+
122
+ getValidTestCases(): (ExampleTestCase | CustomTestCase)[] {
123
+ return this.testCases.filter(({ input, expectedOutput }) => input && expectedOutput);
124
+ }
125
+
126
+ getTestCasesCount(): number {
127
+ return this.testCases?.length || 0;
128
+ }
129
+
130
+ setVersion(version: string) {
131
+ this.version = version;
132
+ }
133
+
134
+ getVersion(): string {
135
+ return this.version;
136
+ }
137
+
138
+ setInitCode(code: string) {
139
+ this.initCode = code;
140
+ }
141
+
142
+ getInitCode(): string {
143
+ return this.initCode;
144
+ }
145
+
146
+ setBoilerplateLoadingStatus(value: boolean) {
147
+ this.isBoilerplateLoadingSub$.next(value);
148
+ }
149
+
150
+ triggerClearSavedCode(): void {
151
+ this.clearSavedCodeSub$.next(true);
152
+ }
153
+
154
+ clearLastLanguageSelected(): void {
155
+ this.clearLastLangSub$.next(true);
156
+ }
157
+ }
@@ -0,0 +1,22 @@
1
+ import { StorageStrategy, SyncStorage } from 'ngx-webstorage';
2
+
3
+ export class LocalStorageServiceStub extends SyncStorage {
4
+ protected strategy: StorageStrategy<any>;
5
+ private data = {};
6
+ constructor(strategy: StorageStrategy<any>) {
7
+ super(strategy);
8
+ }
9
+ retrieve(key: string): any {
10
+ return this.data[key];
11
+ }
12
+ store(key: string, value: any): any {
13
+ this.data[key] = value;
14
+ return this.data[key];
15
+ }
16
+ clear(key: string): void {
17
+ delete this.data[key];
18
+ }
19
+ getStrategyName(): string {
20
+ return this.strategy.name;
21
+ }
22
+ }