complexqa_frontend_core 1.28.1 → 1.30.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 (68) hide show
  1. package/package.json +1 -1
  2. package/publish/api/api_abstract_element_class.js +35 -0
  3. package/publish/api/autotest_case_api.js +78 -0
  4. package/publish/api/autotest_result_api.js +17 -0
  5. package/publish/api/autotest_run_api.js +36 -0
  6. package/publish/api/autotest_step_api.js +88 -0
  7. package/publish/api/autotest_suite_api.js +17 -0
  8. package/publish/api/file_app_api.js +76 -0
  9. package/publish/api/index.js +16 -0
  10. package/publish/api/object_repository_element_api.js +17 -0
  11. package/publish/api/object_repository_folder_api.js +17 -0
  12. package/publish/api/object_repository_page_api.js +17 -0
  13. package/publish/app_configuration/menu_configuration_main.js +14 -0
  14. package/publish/app_configuration/table/helpers/table_element_models.js +16 -0
  15. package/publish/app_configuration/table/sections/autotest_case.js +73 -0
  16. package/publish/app_configuration/table/sections/autotest_result.js +59 -0
  17. package/publish/app_configuration/table/sections/autotest_run.js +66 -0
  18. package/publish/app_configuration/table/sections/autotest_step.js +82 -0
  19. package/publish/app_configuration/table/sections/autotest_suite.js +42 -0
  20. package/publish/app_configuration/table/sections/object_repository_element.js +59 -0
  21. package/publish/app_configuration/table/sections/object_repository_folder.js +41 -0
  22. package/publish/app_configuration/table/sections/object_repository_page.js +55 -0
  23. package/publish/app_configuration/table/sections/test_case_step.js +66 -66
  24. package/publish/app_configuration/table/table_configuration.js +16 -0
  25. package/publish/index.js +28 -0
  26. package/publish/services/FileAppService.js +48 -0
  27. package/publish/types/core/0_familyGeneralElement.js +43 -0
  28. package/publish/types/element_translate/typeAttachment.i18n.js +22 -11
  29. package/publish/types/element_translate/typeAutotestCase.i18n.js +95 -0
  30. package/publish/types/element_translate/typeAutotestResult.i18n.js +77 -0
  31. package/publish/types/element_translate/typeAutotestRun.i18n.js +110 -0
  32. package/publish/types/element_translate/typeAutotestStep.i18n.js +80 -0
  33. package/publish/types/element_translate/typeAutotestSuite.i18n.js +40 -0
  34. package/publish/types/element_translate/typeCustomProperty.i18n.js +21 -6
  35. package/publish/types/element_translate/typeCustomPropertyValue.i18n.js +21 -6
  36. package/publish/types/element_translate/typeFile.i18n.js +21 -15
  37. package/publish/types/element_translate/typeObjectRepositoryElement.i18n.js +92 -0
  38. package/publish/types/element_translate/typeObjectRepositoryFolder.i18n.js +62 -0
  39. package/publish/types/element_translate/typeObjectRepositoryPage.i18n.js +43 -0
  40. package/publish/types/element_translate/typeTagRelation.i18n.js +18 -0
  41. package/publish/types/element_translate/typeTestCase.i18n.js +414 -414
  42. package/publish/types/element_translate/typeTestCaseStep.i18n.js +179 -179
  43. package/publish/types/family_elements/0_familyGeneralElement.js +43 -0
  44. package/publish/types/family_elements/autotest_step_actions/autotestStepActionCatalog.js +54 -0
  45. package/publish/types/family_elements/autotest_step_actions/autotestStepLocatorKind.js +56 -0
  46. package/publish/types/family_elements/autotest_step_actions/autotestStepTargetNormalizer.js +134 -0
  47. package/publish/types/family_elements/autotest_step_actions/typeAutotestStepAction.js +35 -0
  48. package/publish/types/family_elements/autotest_step_actions/typeAutotestStepActionVariants.js +148 -0
  49. package/publish/types/family_elements/autotest_step_actions/typeAutotestStepLocatorAction.js +12 -0
  50. package/publish/types/family_elements/autotest_step_actions/typeAutotestStepLocatorValueAction.js +13 -0
  51. package/publish/types/family_elements/typeAttachment.js +1 -1
  52. package/publish/types/family_elements/typeAutotestCase.js +220 -0
  53. package/publish/types/family_elements/typeAutotestResult.js +81 -0
  54. package/publish/types/family_elements/typeAutotestRun.js +165 -0
  55. package/publish/types/family_elements/typeAutotestStep.js +297 -0
  56. package/publish/types/family_elements/typeAutotestStepTarget.js +50 -0
  57. package/publish/types/family_elements/typeAutotestSuite.js +74 -0
  58. package/publish/types/family_elements/typeCustomProperty.js +1 -1
  59. package/publish/types/family_elements/typeObjectRepositoryElement.js +88 -0
  60. package/publish/types/family_elements/typeObjectRepositoryFolder.js +81 -0
  61. package/publish/types/family_elements/typeObjectRepositoryPage.js +77 -0
  62. package/publish/types/family_elements/typeTestCase.js +5 -6
  63. package/publish/types/family_elements/typeTestCaseStep.js +2 -2
  64. package/publish/types/family_files/familyFile.js +2 -0
  65. package/publish/types/family_files/typeFileAutotestScreenshot.js +33 -0
  66. package/publish/types/family_files/typeFileFactory.js +3 -0
  67. package/publish/types/family_relation/typeCustomPropertyValue.js +7 -2
  68. package/publish/types/family_relation/typeTagRelation.js +30 -0
@@ -0,0 +1,66 @@
1
+ import { typeAutotestRun } from '../../../types/family_elements/typeAutotestRun.js';
2
+ import { UserService } from '../../../services/UserService.js';
3
+ import { createColumn, createGoToColumn, createPrimaryKeyColumn, createRowSelectColumn } from '../helpers/column_factory.js';
4
+ import { createListingFor, registerSection } from '../helpers/section_registry.js';
5
+
6
+
7
+ function build_autotest_run_listing_columns(locale, { include_select = true } = {})
8
+ {
9
+ const model = new typeAutotestRun();
10
+ const columns = [];
11
+
12
+ if (include_select)
13
+ {
14
+ columns.push(createRowSelectColumn());
15
+ }
16
+
17
+ columns.push(createPrimaryKeyColumn(model, locale));
18
+ columns.push(createColumn(model, locale, 'autotest_run_status', {
19
+ width : '150',
20
+ is_editable: false,
21
+ is_required: true,
22
+ }));
23
+ columns.push(createColumn(model, locale, 'pass_percent', {
24
+ width : '180',
25
+ is_editable: false,
26
+ is_filter : false,
27
+ is_required: false,
28
+ }));
29
+ columns.push(createColumn(model, locale, 'execution_context_id', {
30
+ width : '220',
31
+ is_editable: false,
32
+ is_required: true,
33
+ }));
34
+ columns.push(createColumn(model, locale, 'team_domain_id', {
35
+ width : '180',
36
+ is_editable: false,
37
+ is_required: true,
38
+ }));
39
+ columns.push(createColumn(model, locale, 'tags', {
40
+ width : '220',
41
+ is_editable: false,
42
+ is_sortable: false,
43
+ is_required: false,
44
+ }));
45
+ columns.push(createColumn(model, locale, 'started_at', { width: '170', is_required: true }));
46
+ columns.push(createColumn(model, locale, 'finished_at', { width: '170', is_required: true }));
47
+ columns.push(createGoToColumn(model, locale));
48
+
49
+ return columns;
50
+ }
51
+
52
+
53
+ /**
54
+ * Секции `autotest_run`: `listing` — отдельный listing от `test_run`.
55
+ *
56
+ * @param {Object} config
57
+ * @returns {void}
58
+ */
59
+ export function bootstrap_autotest_run(config)
60
+ {
61
+ const locale = UserService.get_current_language();
62
+
63
+ registerSection(config, 'autotest_run', 'listing', build_autotest_run_listing_columns(locale), {
64
+ for: createListingFor([ 'project_id' ], { add: [ 'tags' ] }),
65
+ });
66
+ }
@@ -0,0 +1,82 @@
1
+ import { typeAutotestStep } from '../../../types/family_elements/typeAutotestStep.js';
2
+ import { UserService } from '../../../services/UserService.js';
3
+ import { createColumn, createGoToColumn } from '../helpers/column_factory.js';
4
+ import { createListingFor, registerSection } from '../helpers/section_registry.js';
5
+ import { typeTableColumn } from '../../../types/family_service/typeTableColumn.js';
6
+
7
+
8
+ function build_autotest_step_listing_columns(locale)
9
+ {
10
+ const model = new typeAutotestStep();
11
+
12
+ return [
13
+ createColumn(model, locale, 'sort_order', {
14
+ width : '120',
15
+ sort_order : '0',
16
+ default_sort: 'asc',
17
+ is_editable : true,
18
+ is_filter : false,
19
+ }),
20
+ createColumn(model, locale, 'action_name', {
21
+ width : '180',
22
+ is_editable: true,
23
+ is_required: true,
24
+ is_filter : false,
25
+ is_sortable: false,
26
+ }),
27
+ createColumn(model, locale, 'target', {
28
+ width : '280',
29
+ is_editable: true,
30
+ is_filter : false,
31
+ is_sortable: false,
32
+ }),
33
+ createColumn(model, locale, 'value_text', {
34
+ width : '360',
35
+ is_editable: true,
36
+ is_title : true,
37
+ is_filter : false,
38
+ is_sortable: false,
39
+ }),
40
+ createColumn(model, locale, 'timeout_ms', {
41
+ width : '140',
42
+ is_editable: true,
43
+ is_filter : false,
44
+ is_sortable: false,
45
+ }),
46
+ new typeTableColumn({
47
+ header_name : '',
48
+ field : 'autotest_step_id',
49
+ width : '80',
50
+ sort_order : '99',
51
+ is_sortable : false,
52
+ is_filter : false,
53
+ is_editable : false,
54
+ column_kind : 'sort_action',
55
+ }),
56
+ ];
57
+ }
58
+
59
+
60
+ /**
61
+ * Секции `autotest_step`: `listing` - шаги на карточке автотеста.
62
+ *
63
+ * @param {Object} config
64
+ * @returns {void}
65
+ */
66
+ export function bootstrap_autotest_step(config)
67
+ {
68
+ const locale = UserService.get_current_language();
69
+ const model = new typeAutotestStep();
70
+
71
+ registerSection(config, 'autotest_step', 'listing', build_autotest_step_listing_columns(locale), {
72
+ for: createListingFor([ 'autotest_case_id' ]),
73
+ });
74
+ registerSection(config, 'autotest_step', 'where_used', [
75
+ createColumn(model, locale, 'autotest_case_id', { width: '140' }),
76
+ createColumn(model, locale, 'action_name', { width: '180' }),
77
+ createColumn(model, locale, 'sort_order', { width: '120' }),
78
+ createGoToColumn(model, locale),
79
+ ], {
80
+ for: createListingFor([ 'object_repository_page_id', 'object_repository_element_id' ], { add: [ 'autotest_case' ] }),
81
+ });
82
+ }
@@ -0,0 +1,42 @@
1
+ import { typeAutotestSuite } from '../../../types/family_elements/typeAutotestSuite.js';
2
+ import { UserService } from '../../../services/UserService.js';
3
+ import { createColumn, createGoToColumn, createPrimaryKeyColumn, createRowSelectColumn } from '../helpers/column_factory.js';
4
+ import { createListingFor, registerSection } from '../helpers/section_registry.js';
5
+
6
+
7
+ function build_autotest_suite_listing_columns(locale, { include_select = true } = {})
8
+ {
9
+ const model = new typeAutotestSuite();
10
+ const columns = [];
11
+
12
+ if (include_select)
13
+ {
14
+ columns.push(createRowSelectColumn());
15
+ }
16
+
17
+ columns.push(createPrimaryKeyColumn(model, locale));
18
+ columns.push(createColumn(model, locale, 'autotest_suite_title', {
19
+ width : '480',
20
+ is_editable: true,
21
+ is_required: true,
22
+ is_title : true,
23
+ }));
24
+ columns.push(createColumn(model, locale, 'created_at', { width: '170', is_required: true }));
25
+ columns.push(createGoToColumn(model, locale));
26
+
27
+ return columns;
28
+ }
29
+
30
+
31
+ /**
32
+ * @param {Object} config
33
+ * @returns {void}
34
+ */
35
+ export function bootstrap_autotest_suite(config)
36
+ {
37
+ const locale = UserService.get_current_language();
38
+
39
+ registerSection(config, 'autotest_suite', 'listing', build_autotest_suite_listing_columns(locale), {
40
+ for: createListingFor([ 'project_id' ]),
41
+ });
42
+ }
@@ -0,0 +1,59 @@
1
+ import { typeObjectRepositoryElement } from '../../../types/family_elements/typeObjectRepositoryElement.js';
2
+ import { UserService } from '../../../services/UserService.js';
3
+ import { createColumn, createGoToColumn, createPrimaryKeyColumn, createRowSelectColumn } from '../helpers/column_factory.js';
4
+ import { createListingFor, registerSection } from '../helpers/section_registry.js';
5
+
6
+
7
+ function build_object_repository_element_listing_columns(locale, { include_select = true } = {})
8
+ {
9
+ const model = new typeObjectRepositoryElement();
10
+ const columns = [];
11
+
12
+ if (include_select)
13
+ {
14
+ columns.push(createRowSelectColumn());
15
+ }
16
+
17
+ columns.push(createPrimaryKeyColumn(model, locale));
18
+ columns.push(createColumn(model, locale, 'object_repository_element_title', {
19
+ width : '280',
20
+ is_editable: true,
21
+ is_required: true,
22
+ is_title : true,
23
+ }));
24
+ columns.push(createColumn(model, locale, 'locator_kind', {
25
+ width : '140',
26
+ is_editable: true,
27
+ }));
28
+ columns.push(createColumn(model, locale, 'locator_value', {
29
+ width : '220',
30
+ is_editable: true,
31
+ }));
32
+ columns.push(createColumn(model, locale, 'tags', {
33
+ width : '220',
34
+ is_editable: false,
35
+ is_sortable: false,
36
+ is_required: false,
37
+ }));
38
+ columns.push(createColumn(model, locale, 'created_at', { width: '170', is_required: true }));
39
+ columns.push(createGoToColumn(model, locale));
40
+
41
+ return columns;
42
+ }
43
+
44
+
45
+ /**
46
+ * @param {Object} config
47
+ * @returns {void}
48
+ */
49
+ export function bootstrap_object_repository_element(config)
50
+ {
51
+ const locale = UserService.get_current_language();
52
+
53
+ registerSection(config, 'object_repository_element', 'listing', build_object_repository_element_listing_columns(locale), {
54
+ for: createListingFor([ 'project_id', 'object_repository_folder_id' ], { add: [ 'tags' ] }),
55
+ });
56
+ registerSection(config, 'object_repository_element', 'picker', build_object_repository_element_listing_columns(locale, { include_select: true }), {
57
+ for: createListingFor([ 'project_id' ]),
58
+ });
59
+ }
@@ -0,0 +1,41 @@
1
+ import { typeObjectRepositoryFolder } from '../../../types/family_elements/typeObjectRepositoryFolder.js';
2
+ import { UserService } from '../../../services/UserService.js';
3
+ import { createColumn, createPrimaryKeyColumn, createRowSelectColumn } from '../helpers/column_factory.js';
4
+ import { createListingFor, registerSection } from '../helpers/section_registry.js';
5
+
6
+
7
+ function build_object_repository_folder_listing_columns(locale, { include_select = true } = {})
8
+ {
9
+ const model = new typeObjectRepositoryFolder();
10
+ const columns = [];
11
+
12
+ if (include_select)
13
+ {
14
+ columns.push(createRowSelectColumn());
15
+ }
16
+
17
+ columns.push(createPrimaryKeyColumn(model, locale));
18
+ columns.push(createColumn(model, locale, 'object_repository_folder_title', {
19
+ width : '480',
20
+ is_editable: true,
21
+ is_required: true,
22
+ is_title : true,
23
+ }));
24
+ columns.push(createColumn(model, locale, 'created_at', { width: '170', is_required: true }));
25
+
26
+ return columns;
27
+ }
28
+
29
+
30
+ /**
31
+ * @param {Object} config
32
+ * @returns {void}
33
+ */
34
+ export function bootstrap_object_repository_folder(config)
35
+ {
36
+ const locale = UserService.get_current_language();
37
+
38
+ registerSection(config, 'object_repository_folder', 'listing', build_object_repository_folder_listing_columns(locale), {
39
+ for: createListingFor([ 'project_id', 'parent_object_repository_folder_id', 'object_repository_folder_kind' ], { add: [ 'tags' ] }),
40
+ });
41
+ }
@@ -0,0 +1,55 @@
1
+ import { typeObjectRepositoryPage } from '../../../types/family_elements/typeObjectRepositoryPage.js';
2
+ import { UserService } from '../../../services/UserService.js';
3
+ import { createColumn, createGoToColumn, createPrimaryKeyColumn, createRowSelectColumn } from '../helpers/column_factory.js';
4
+ import { createListingFor, registerSection } from '../helpers/section_registry.js';
5
+
6
+
7
+ function build_object_repository_page_listing_columns(locale, { include_select = true } = {})
8
+ {
9
+ const model = new typeObjectRepositoryPage();
10
+ const columns = [];
11
+
12
+ if (include_select)
13
+ {
14
+ columns.push(createRowSelectColumn());
15
+ }
16
+
17
+ columns.push(createPrimaryKeyColumn(model, locale));
18
+ columns.push(createColumn(model, locale, 'object_repository_page_title', {
19
+ width : '320',
20
+ is_editable: true,
21
+ is_required: true,
22
+ is_title : true,
23
+ }));
24
+ columns.push(createColumn(model, locale, 'path', {
25
+ width : '280',
26
+ is_editable: true,
27
+ }));
28
+ columns.push(createColumn(model, locale, 'tags', {
29
+ width : '220',
30
+ is_editable: false,
31
+ is_sortable: false,
32
+ is_required: false,
33
+ }));
34
+ columns.push(createColumn(model, locale, 'created_at', { width: '170', is_required: true }));
35
+ columns.push(createGoToColumn(model, locale));
36
+
37
+ return columns;
38
+ }
39
+
40
+
41
+ /**
42
+ * @param {Object} config
43
+ * @returns {void}
44
+ */
45
+ export function bootstrap_object_repository_page(config)
46
+ {
47
+ const locale = UserService.get_current_language();
48
+
49
+ registerSection(config, 'object_repository_page', 'listing', build_object_repository_page_listing_columns(locale), {
50
+ for: createListingFor([ 'project_id', 'object_repository_folder_id' ], { add: [ 'tags' ] }),
51
+ });
52
+ registerSection(config, 'object_repository_page', 'picker', build_object_repository_page_listing_columns(locale, { include_select: true }), {
53
+ for: createListingFor([ 'project_id' ]),
54
+ });
55
+ }
@@ -1,66 +1,66 @@
1
- import { typeTestCaseStep } from '../../../types/family_elements/typeTestCaseStep.js';
2
- import { UserService } from '../../../services/UserService.js';
3
- import { createColumn } from '../helpers/column_factory.js';
4
- import { createListingFor, registerSection } from '../helpers/section_registry.js';
5
- import { typeTableColumn } from '../../../types/family_service/typeTableColumn.js';
6
-
7
- function build_test_case_step_shared_columns(locale)
8
- {
9
- const model = new typeTestCaseStep();
10
-
11
- return [
12
- createColumn(model, locale, 'sort_order', {
13
- width : '150',
14
- sort_order : '0',
15
- default_sort: 'asc',
16
- is_editable : true,
17
- }),
18
- createColumn(model, locale, 'step_element', { width: '200', is_editable: true }),
19
- createColumn(model, locale, 'step_element_action', { width: '200', is_editable: true }),
20
- createColumn(model, locale, 'step_excepted_result', {
21
- width : '480',
22
- is_editable: true,
23
- is_title : true,
24
- }),
25
- new typeTableColumn({
26
- header_name : '',
27
- field : 'test_case_step_id',
28
- width : '80',
29
- sort_order : '99',
30
- is_sortable : false,
31
- is_filter : false,
32
- is_editable : false,
33
- column_kind : 'sort_action',
34
- }),
35
- ];
36
- }
37
-
38
- function build_test_case_steps_columns(locale)
39
- {
40
- return build_test_case_step_shared_columns(locale);
41
- }
42
-
43
- function build_test_case_presteps_columns(locale)
44
- {
45
- return build_test_case_step_shared_columns(locale);
46
- }
47
-
48
- /**
49
- * Секции `test_case_step`: `steps`, `presteps` (шаги и престепы тест-кейса).
50
- *
51
- * @param {Object<string, Object<string, { config: import('../../../types/family_service/typeTableConfiguration.js').typeTableConfiguration }>>} config
52
- * @returns {void}
53
- */
54
- export function bootstrap_test_case_step(config)
55
- {
56
- const locale = UserService.get_current_language();
57
- const embedded_for = createListingFor([ 'test_case_id', 'test_case_step_type' ]);
58
-
59
- registerSection(config, 'test_case_step', 'steps', build_test_case_steps_columns(locale), {
60
- for: embedded_for,
61
- });
62
-
63
- registerSection(config, 'test_case_step', 'presteps', build_test_case_presteps_columns(locale), {
64
- for: embedded_for,
65
- });
66
- }
1
+ import { typeTestCaseStep } from '../../../types/family_elements/typeTestCaseStep.js';
2
+ import { UserService } from '../../../services/UserService.js';
3
+ import { createColumn } from '../helpers/column_factory.js';
4
+ import { createListingFor, registerSection } from '../helpers/section_registry.js';
5
+ import { typeTableColumn } from '../../../types/family_service/typeTableColumn.js';
6
+
7
+ function build_test_case_step_shared_columns(locale)
8
+ {
9
+ const model = new typeTestCaseStep();
10
+
11
+ return [
12
+ createColumn(model, locale, 'sort_order', {
13
+ width : '150',
14
+ sort_order : '0',
15
+ default_sort: 'asc',
16
+ is_editable : true,
17
+ }),
18
+ createColumn(model, locale, 'step_element', { width: '200', is_editable: true }),
19
+ createColumn(model, locale, 'step_element_action', { width: '200', is_editable: true }),
20
+ createColumn(model, locale, 'step_expected_result', {
21
+ width : '480',
22
+ is_editable: true,
23
+ is_title : true,
24
+ }),
25
+ new typeTableColumn({
26
+ header_name : '',
27
+ field : 'test_case_step_id',
28
+ width : '80',
29
+ sort_order : '99',
30
+ is_sortable : false,
31
+ is_filter : false,
32
+ is_editable : false,
33
+ column_kind : 'sort_action',
34
+ }),
35
+ ];
36
+ }
37
+
38
+ function build_test_case_steps_columns(locale)
39
+ {
40
+ return build_test_case_step_shared_columns(locale);
41
+ }
42
+
43
+ function build_test_case_presteps_columns(locale)
44
+ {
45
+ return build_test_case_step_shared_columns(locale);
46
+ }
47
+
48
+ /**
49
+ * Секции `test_case_step`: `steps`, `presteps` (шаги и престепы тест-кейса).
50
+ *
51
+ * @param {Object<string, Object<string, { config: import('../../../types/family_service/typeTableConfiguration.js').typeTableConfiguration }>>} config
52
+ * @returns {void}
53
+ */
54
+ export function bootstrap_test_case_step(config)
55
+ {
56
+ const locale = UserService.get_current_language();
57
+ const embedded_for = createListingFor([ 'test_case_id', 'test_case_step_type' ]);
58
+
59
+ registerSection(config, 'test_case_step', 'steps', build_test_case_steps_columns(locale), {
60
+ for: embedded_for,
61
+ });
62
+
63
+ registerSection(config, 'test_case_step', 'presteps', build_test_case_presteps_columns(locale), {
64
+ for: embedded_for,
65
+ });
66
+ }
@@ -19,6 +19,14 @@ import { bootstrap_user } from './sections/user.js';
19
19
  import { bootstrap_team } from './sections/team.js';
20
20
  import { bootstrap_project } from './sections/project.js';
21
21
  import { bootstrap_text_document } from './sections/text_document.js';
22
+ import { bootstrap_autotest_case } from './sections/autotest_case.js';
23
+ import { bootstrap_autotest_suite } from './sections/autotest_suite.js';
24
+ import { bootstrap_autotest_run } from './sections/autotest_run.js';
25
+ import { bootstrap_autotest_result } from './sections/autotest_result.js';
26
+ import { bootstrap_autotest_step } from './sections/autotest_step.js';
27
+ import { bootstrap_object_repository_folder } from './sections/object_repository_folder.js';
28
+ import { bootstrap_object_repository_page } from './sections/object_repository_page.js';
29
+ import { bootstrap_object_repository_element } from './sections/object_repository_element.js';
22
30
  import { localizeTableSection } from './helpers/column_locale.js';
23
31
 
24
32
  /**
@@ -134,6 +142,14 @@ export class TableConfiguration extends abstractAppConfiguration
134
142
  bootstrap_team(this.config);
135
143
  bootstrap_project(this.config);
136
144
  bootstrap_text_document(this.config);
145
+ bootstrap_autotest_case(this.config);
146
+ bootstrap_autotest_suite(this.config);
147
+ bootstrap_autotest_run(this.config);
148
+ bootstrap_autotest_result(this.config);
149
+ bootstrap_autotest_step(this.config);
150
+ bootstrap_object_repository_folder(this.config);
151
+ bootstrap_object_repository_page(this.config);
152
+ bootstrap_object_repository_element(this.config);
137
153
 
138
154
  this.state.loaded = true;
139
155
  }
package/publish/index.js CHANGED
@@ -14,6 +14,33 @@ export { typeTestCase } from './types/family_elements/typeTestCase.js';
14
14
  export { typeTestCaseStep } from './types/family_elements/typeTestCaseStep.js';
15
15
  export { typeTestRun } from './types/family_elements/typeTestRun.js'
16
16
  export { typeTestRunResult } from './types/family_elements/typeTestRunResult.js'
17
+ export { typeAutotestCase } from './types/family_elements/typeAutotestCase.js';
18
+ export { typeAutotestSuite } from './types/family_elements/typeAutotestSuite.js';
19
+ export { typeAutotestStep } from './types/family_elements/typeAutotestStep.js';
20
+ export { typeAutotestStepTarget } from './types/family_elements/typeAutotestStepTarget.js';
21
+ export { typeAutotestStepAction } from './types/family_elements/autotest_step_actions/typeAutotestStepAction.js';
22
+ export { typeAutotestStepLocatorAction } from './types/family_elements/autotest_step_actions/typeAutotestStepLocatorAction.js';
23
+ export { typeAutotestStepLocatorValueAction } from './types/family_elements/autotest_step_actions/typeAutotestStepLocatorValueAction.js';
24
+ export {
25
+ list_autotest_step_actions,
26
+ get_autotest_step_action_entry,
27
+ get_autotest_step_action_class,
28
+ is_autotest_step_action_known,
29
+ } from './types/family_elements/autotest_step_actions/autotestStepActionCatalog.js';
30
+ export {
31
+ AUTOTEST_STEP_LOCATOR_KINDS,
32
+ AUTOTEST_STEP_PLAYWRIGHT_ROLES,
33
+ is_autotest_step_locator_kind,
34
+ } from './types/family_elements/autotest_step_actions/autotestStepLocatorKind.js';
35
+ export {
36
+ hydrate_autotest_step_target,
37
+ build_autotest_step_target_storage,
38
+ } from './types/family_elements/autotest_step_actions/autotestStepTargetNormalizer.js';
39
+ export { typeAutotestRun } from './types/family_elements/typeAutotestRun.js';
40
+ export { typeAutotestResult } from './types/family_elements/typeAutotestResult.js';
41
+ export { typeObjectRepositoryFolder } from './types/family_elements/typeObjectRepositoryFolder.js';
42
+ export { typeObjectRepositoryPage } from './types/family_elements/typeObjectRepositoryPage.js';
43
+ export { typeObjectRepositoryElement } from './types/family_elements/typeObjectRepositoryElement.js';
17
44
  export { typeTestAccount } from './types/family_elements/typeTestAccount.js'
18
45
  export {typeBug} from './types/family_elements/typeBug.js';
19
46
  export { typeTag } from './types/family_elements/typeTag.js';
@@ -50,6 +77,7 @@ export { typeEvent } from './types/family_events/typeEvent.js';
50
77
  export { familyFile } from './types/family_files/familyFile.js';
51
78
  export { typeFile } from './types/family_files/typeFile.js';
52
79
  export { typeFileScreenshot } from './types/family_files/typeFileScreenshot.js';
80
+ export { typeFileAutotestScreenshot } from './types/family_files/typeFileAutotestScreenshot.js';
53
81
  export { typeFileHtml } from './types/family_files/typeFileHtml.js';
54
82
  export { typeFilePostman } from './types/family_files/typeFilePostman.js';
55
83
  export { typeFileVideo } from './types/family_files/typeFileVideo.js';
@@ -355,4 +355,52 @@ export class FileAppService extends abstractService
355
355
 
356
356
  return result;
357
357
  }
358
+
359
+
360
+ /**
361
+ * Team / project Files listing.
362
+ *
363
+ * @param {object} [payload]
364
+ * @param {number} [payload.project_id]
365
+ *
366
+ * @returns {Promise<object>}
367
+ */
368
+ static async list_team_files(payload = {})
369
+ {
370
+ const api = FileAppService.#get_api_service();
371
+ const wrap = await api.file_app.list_team_files(payload);
372
+ const row = await wrap?.response;
373
+
374
+ return row && typeof row === 'object' ? row : { items: [] };
375
+ }
376
+
377
+
378
+ /**
379
+ * Soft-delete many files (also clears attachment links on Main).
380
+ *
381
+ * @param {string[]} file_uuids
382
+ *
383
+ * @returns {Promise<object>}
384
+ */
385
+ static async delete_files(file_uuids)
386
+ {
387
+ const api = FileAppService.#get_api_service();
388
+ const wrap = await api.file_app.delete_files({ file_uuids });
389
+
390
+ return await wrap?.response;
391
+ }
392
+
393
+
394
+ /**
395
+ * @param {string} file_uuid
396
+ *
397
+ * @returns {Promise<object>}
398
+ */
399
+ static async delete_file(file_uuid)
400
+ {
401
+ const api = FileAppService.#get_api_service();
402
+ const wrap = await api.file_app.delete_file({ file_uuid });
403
+
404
+ return await wrap?.response;
405
+ }
358
406
  }
@@ -418,6 +418,49 @@ export class familyGeneralElement
418
418
  }
419
419
 
420
420
 
421
+ /**
422
+ * Mass create. Payload: `{ items: object[] }`.
423
+ *
424
+ * @param {object} payload
425
+ * @param {array} payload.items
426
+ * @param {typeFunctionCallback|object|false} callback
427
+ * @version v.1.0 (29/08/2026)
428
+ */
429
+ async create_mass(payload, callback)
430
+ {
431
+ if (!this.api_key)
432
+ {
433
+ throw new Error('Error #249-2215 - element has no api_key');
434
+ }
435
+
436
+ if (typeof callback?.before === 'function')
437
+ {
438
+ callback?.before({ payload });
439
+ }
440
+
441
+ return ApiService[ this.api_key ].create_mass(payload).then((response) =>
442
+ {
443
+ if (typeof callback?.success === 'function')
444
+ {
445
+ callback?.success({ response, payload })
446
+ }
447
+ }).catch((error) =>
448
+ {
449
+ echo({ error });
450
+ if (typeof callback?.error === 'function')
451
+ {
452
+ callback?.error({ error, payload })
453
+ }
454
+ }).finally((response) =>
455
+ {
456
+ if (typeof callback?.final === 'function')
457
+ {
458
+ callback?.final({ response, payload })
459
+ }
460
+ });
461
+ }
462
+
463
+
421
464
  /**
422
465
  * Обновление целой модели элемента
423
466
  *