@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.
- package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
- package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
- package/{src/index.ts → index.d.ts} +2 -19
- package/lib/components/code-editor/code-editor.component.d.ts +54 -0
- package/lib/components/code-editor/code-editor.service.d.ts +12 -0
- package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
- package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
- package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
- package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
- package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
- package/lib/components/coding-question/coding-question.component.d.ts +45 -0
- package/lib/components/coding-section/coding-section.component.d.ts +52 -0
- package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
- package/lib/components/configurations/configurations.component.d.ts +40 -0
- package/lib/components/instructions/instructions.component.d.ts +48 -0
- package/lib/components/panel/panel.component.d.ts +12 -0
- package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
- package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
- package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
- package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
- package/lib/components/tests/test-results.component.d.ts +33 -0
- package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
- package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
- package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
- package/lib/config/tgo-coding-test.config.d.ts +24 -0
- package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
- package/lib/config/tgo-coding-test.token.d.ts +9 -0
- package/lib/models/auto-saved-data.d.ts +42 -0
- package/lib/models/code-event.d.ts +15 -0
- package/lib/models/coderunner-execution-results.d.ts +51 -0
- package/lib/models/configs.d.ts +15 -0
- package/lib/models/language-change-action.d.ts +4 -0
- package/lib/models/lat-languages.d.ts +8 -0
- package/lib/models/mixpanel-events.d.ts +3 -0
- package/lib/models/mode.d.ts +5 -0
- package/lib/models/paste-data.d.ts +4 -0
- package/lib/models/programming-language.d.ts +8 -0
- package/lib/models/test-cases.d.ts +67 -0
- package/lib/models/theme.d.ts +4 -0
- package/lib/models/translations.d.ts +1 -0
- package/lib/models/view-mode.d.ts +6 -0
- package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
- package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
- package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
- package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
- package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
- package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
- package/lib/services/coding-test-config.service.d.ts +38 -0
- package/lib/services/configurations.service.d.ts +37 -0
- package/lib/services/lib-coding-test.service.d.ts +69 -0
- package/lib/services/storage.service.d.ts +83 -0
- package/lib/services/test-cases.service.d.ts +12 -0
- package/lib/services/theme.service.d.ts +17 -0
- package/lib/utils/additional-languages/erlang.d.ts +37 -0
- package/lib/utils/resize-element.d.ts +2 -0
- package/lib/utils/time-to-ms.util.d.ts +1 -0
- package/package.json +17 -3
- package/shared/index.d.ts +4 -0
- package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
- package/shared/lib/components/audio-animation/index.d.ts +1 -0
- package/shared/lib/components/index.d.ts +2 -0
- package/shared/lib/components/vimeo-video/index.d.ts +1 -0
- package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
- package/shared/lib/models/answer.d.ts +17 -0
- package/shared/lib/models/assessment.d.ts +80 -0
- package/shared/lib/models/environment.d.ts +1 -0
- package/shared/lib/models/index.d.ts +8 -0
- package/shared/lib/models/question-component.d.ts +54 -0
- package/shared/lib/models/question.d.ts +102 -0
- package/shared/lib/models/test.d.ts +81 -0
- package/shared/lib/models/translations.d.ts +1 -0
- package/shared/lib/models/window.d.ts +6 -0
- package/shared/lib/services/api/api.service.d.ts +25 -0
- package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
- package/shared/lib/services/environment/environment.service.d.ts +6 -0
- package/shared/lib/services/index.d.ts +9 -0
- package/shared/lib/services/localization/languages.model.d.ts +15 -0
- package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
- package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
- package/shared/lib/services/media/media.service.d.ts +29 -0
- package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
- package/shared/lib/services/theme/theme.service.d.ts +8 -0
- package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
- package/shared/test-mocks/index.d.ts +2 -0
- package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
- package/.eslintrc.json +0 -46
- package/jest.config.ts +0 -26
- package/ng-package.json +0 -14
- package/project.json +0 -48
- package/src/lib/components/.gitkeep +0 -0
- package/src/lib/components/code-editor/code-editor.component.html +0 -10
- package/src/lib/components/code-editor/code-editor.component.scss +0 -21
- package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
- package/src/lib/components/code-editor/code-editor.component.ts +0 -368
- package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
- package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
- package/src/lib/components/code-editor/code-editor.service.ts +0 -94
- package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
- package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
- package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
- package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
- package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
- package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
- package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
- package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
- package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
- package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
- package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
- package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
- package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
- package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
- package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
- package/src/lib/components/coding-question/coding-question.component.html +0 -78
- package/src/lib/components/coding-question/coding-question.component.scss +0 -75
- package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
- package/src/lib/components/coding-question/coding-question.component.ts +0 -101
- package/src/lib/components/coding-section/coding-section.component.html +0 -82
- package/src/lib/components/coding-section/coding-section.component.scss +0 -64
- package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
- package/src/lib/components/coding-section/coding-section.component.ts +0 -186
- package/src/lib/components/coding-test.module.ts +0 -124
- package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
- package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
- package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
- package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -36
- package/src/lib/components/configurations/configurations.component.html +0 -57
- package/src/lib/components/configurations/configurations.component.scss +0 -42
- package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
- package/src/lib/components/configurations/configurations.component.ts +0 -97
- package/src/lib/components/instructions/instructions.component.html +0 -41
- package/src/lib/components/instructions/instructions.component.scss +0 -173
- package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
- package/src/lib/components/instructions/instructions.component.ts +0 -137
- package/src/lib/components/panel/panel.component.html +0 -19
- package/src/lib/components/panel/panel.component.scss +0 -41
- package/src/lib/components/panel/panel.component.spec.ts +0 -40
- package/src/lib/components/panel/panel.component.ts +0 -33
- package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
- package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
- package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
- package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -154
- package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
- package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
- package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
- package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -204
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -101
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -17
- package/src/lib/components/tests/test-results.component.html +0 -119
- package/src/lib/components/tests/test-results.component.scss +0 -189
- package/src/lib/components/tests/test-results.component.spec.ts +0 -140
- package/src/lib/components/tests/test-results.component.ts +0 -97
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -278
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -578
- package/src/lib/config/tgo-coding-test.config.ts +0 -26
- package/src/lib/config/tgo-coding-test.token.ts +0 -21
- package/src/lib/models/.gitkeep +0 -0
- package/src/lib/models/auto-saved-data.ts +0 -51
- package/src/lib/models/code-event.ts +0 -17
- package/src/lib/models/coderunner-execution-results.ts +0 -58
- package/src/lib/models/coding-lib.mocks.ts +0 -246
- package/src/lib/models/configs.ts +0 -18
- package/src/lib/models/language-change-action.ts +0 -4
- package/src/lib/models/lat-languages.ts +0 -12
- package/src/lib/models/mixpanel-events.ts +0 -3
- package/src/lib/models/mode.ts +0 -5
- package/src/lib/models/paste-data.ts +0 -4
- package/src/lib/models/programming-language.ts +0 -9
- package/src/lib/models/test-cases.ts +0 -74
- package/src/lib/models/theme.ts +0 -5
- package/src/lib/models/translations.ts +0 -1
- package/src/lib/models/view-mode.ts +0 -6
- package/src/lib/services/.gitkeep +0 -0
- package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
- package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
- package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
- package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
- package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
- package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
- package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
- package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
- package/src/lib/services/coding-test-config.service.ts +0 -48
- package/src/lib/services/configurations.service.mocks.ts +0 -77
- package/src/lib/services/configurations.service.spec.ts +0 -79
- package/src/lib/services/configurations.service.ts +0 -111
- package/src/lib/services/index.ts +0 -0
- package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
- package/src/lib/services/lib-coding-test.service.ts +0 -157
- package/src/lib/services/local-storage.service.mocks.ts +0 -22
- package/src/lib/services/storage.service.spec.ts +0 -1119
- package/src/lib/services/storage.service.ts +0 -729
- package/src/lib/services/test-cases.service.spec.ts +0 -53
- package/src/lib/services/test-cases.service.ts +0 -29
- package/src/lib/services/theme.service.spec.ts +0 -76
- package/src/lib/services/theme.service.ts +0 -34
- package/src/lib/styles/mixins.scss +0 -86
- package/src/lib/styles/styles.scss +0 -112
- package/src/lib/styles/variables.scss +0 -105
- package/src/lib/utils/.gitkeep +0 -0
- package/src/lib/utils/additional-languages/erlang.ts +0 -115
- package/src/lib/utils/resize-element.ts +0 -15
- package/src/lib/utils/time-to-ms.util.ts +0 -10
- package/src/test-setup.ts +0 -3
- package/tsconfig.json +0 -19
- package/tsconfig.lib.json +0 -19
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
- /package/{src/assets → assets}/i18n/en.json +0 -0
- /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
|
-
}
|