complexqa_frontend_core 1.29.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 (60) hide show
  1. package/package.json +1 -1
  2. package/publish/api/autotest_case_api.js +78 -0
  3. package/publish/api/autotest_result_api.js +17 -0
  4. package/publish/api/autotest_run_api.js +36 -0
  5. package/publish/api/autotest_step_api.js +88 -0
  6. package/publish/api/autotest_suite_api.js +17 -0
  7. package/publish/api/file_app_api.js +76 -0
  8. package/publish/api/index.js +16 -0
  9. package/publish/api/object_repository_element_api.js +17 -0
  10. package/publish/api/object_repository_folder_api.js +17 -0
  11. package/publish/api/object_repository_page_api.js +17 -0
  12. package/publish/app_configuration/menu_configuration_main.js +14 -0
  13. package/publish/app_configuration/table/helpers/table_element_models.js +16 -0
  14. package/publish/app_configuration/table/sections/autotest_case.js +73 -0
  15. package/publish/app_configuration/table/sections/autotest_result.js +59 -0
  16. package/publish/app_configuration/table/sections/autotest_run.js +66 -0
  17. package/publish/app_configuration/table/sections/autotest_step.js +82 -0
  18. package/publish/app_configuration/table/sections/autotest_suite.js +42 -0
  19. package/publish/app_configuration/table/sections/object_repository_element.js +59 -0
  20. package/publish/app_configuration/table/sections/object_repository_folder.js +41 -0
  21. package/publish/app_configuration/table/sections/object_repository_page.js +55 -0
  22. package/publish/app_configuration/table/table_configuration.js +16 -0
  23. package/publish/index.js +28 -0
  24. package/publish/services/FileAppService.js +48 -0
  25. package/publish/types/element_translate/typeAttachment.i18n.js +22 -11
  26. package/publish/types/element_translate/typeAutotestCase.i18n.js +95 -0
  27. package/publish/types/element_translate/typeAutotestResult.i18n.js +77 -0
  28. package/publish/types/element_translate/typeAutotestRun.i18n.js +110 -0
  29. package/publish/types/element_translate/typeAutotestStep.i18n.js +80 -0
  30. package/publish/types/element_translate/typeAutotestSuite.i18n.js +40 -0
  31. package/publish/types/element_translate/typeCustomProperty.i18n.js +21 -6
  32. package/publish/types/element_translate/typeCustomPropertyValue.i18n.js +21 -6
  33. package/publish/types/element_translate/typeFile.i18n.js +21 -15
  34. package/publish/types/element_translate/typeObjectRepositoryElement.i18n.js +92 -0
  35. package/publish/types/element_translate/typeObjectRepositoryFolder.i18n.js +62 -0
  36. package/publish/types/element_translate/typeObjectRepositoryPage.i18n.js +43 -0
  37. package/publish/types/element_translate/typeTagRelation.i18n.js +18 -0
  38. package/publish/types/family_elements/autotest_step_actions/autotestStepActionCatalog.js +54 -0
  39. package/publish/types/family_elements/autotest_step_actions/autotestStepLocatorKind.js +56 -0
  40. package/publish/types/family_elements/autotest_step_actions/autotestStepTargetNormalizer.js +134 -0
  41. package/publish/types/family_elements/autotest_step_actions/typeAutotestStepAction.js +35 -0
  42. package/publish/types/family_elements/autotest_step_actions/typeAutotestStepActionVariants.js +148 -0
  43. package/publish/types/family_elements/autotest_step_actions/typeAutotestStepLocatorAction.js +12 -0
  44. package/publish/types/family_elements/autotest_step_actions/typeAutotestStepLocatorValueAction.js +13 -0
  45. package/publish/types/family_elements/typeAttachment.js +1 -1
  46. package/publish/types/family_elements/typeAutotestCase.js +220 -0
  47. package/publish/types/family_elements/typeAutotestResult.js +81 -0
  48. package/publish/types/family_elements/typeAutotestRun.js +165 -0
  49. package/publish/types/family_elements/typeAutotestStep.js +297 -0
  50. package/publish/types/family_elements/typeAutotestStepTarget.js +50 -0
  51. package/publish/types/family_elements/typeAutotestSuite.js +74 -0
  52. package/publish/types/family_elements/typeCustomProperty.js +1 -1
  53. package/publish/types/family_elements/typeObjectRepositoryElement.js +88 -0
  54. package/publish/types/family_elements/typeObjectRepositoryFolder.js +81 -0
  55. package/publish/types/family_elements/typeObjectRepositoryPage.js +77 -0
  56. package/publish/types/family_files/familyFile.js +2 -0
  57. package/publish/types/family_files/typeFileAutotestScreenshot.js +33 -0
  58. package/publish/types/family_files/typeFileFactory.js +3 -0
  59. package/publish/types/family_relation/typeCustomPropertyValue.js +7 -2
  60. package/publish/types/family_relation/typeTagRelation.js +30 -0
@@ -0,0 +1,165 @@
1
+ import { echo, is_object } from "../../utils/utils.js";
2
+ import { familyTestAutomation } from "../core/1_familyTestAutomation.js";
3
+ import { typeAutotestRun_i18n } from "../element_translate/typeAutotestRun.i18n.js";
4
+ import _ from 'underscore';
5
+
6
+
7
+ /**
8
+ * Запуск пачки автотестов. Контекст выполнения - браузер; стартовый домен - team_domain_id.
9
+ *
10
+ * @version v.1.0 (04/09/2026)
11
+ */
12
+ export class typeAutotestRun extends familyTestAutomation
13
+ {
14
+ autotest_run_id;
15
+ team_id;
16
+ project_id;
17
+ execution_context_id;
18
+ team_domain_id;
19
+ autotest_run_status;
20
+ pass_percent;
21
+ result_counts;
22
+ autotest_case_ids;
23
+ max_threads;
24
+ retry_count;
25
+ step_timeout_ms;
26
+ case_timeout_ms;
27
+ run_timeout_ms;
28
+ screenshot_on_failure;
29
+ consecutive_error_stop;
30
+ created_by_user_id;
31
+ started_at;
32
+ finished_at;
33
+ created_at;
34
+ updated_at;
35
+
36
+ primary_key = 'autotest_run_id';
37
+ api_key = 'autotest_run';
38
+
39
+ structure_scheme = {
40
+ autotest_run_id : 'integer | require',
41
+ team_id : 'integer | require',
42
+ project_id : 'integer | require',
43
+ execution_context_id : 'integer | require',
44
+ team_domain_id : 'integer | require',
45
+ autotest_run_status : 'string | enum | optional',
46
+ pass_percent : 'integer | optional',
47
+ result_counts : 'array | optional',
48
+ autotest_case_ids : 'array | optional',
49
+ max_threads : 'integer | optional',
50
+ retry_count : 'integer | optional',
51
+ step_timeout_ms : 'integer | optional',
52
+ case_timeout_ms : 'integer | optional',
53
+ run_timeout_ms : 'integer | optional',
54
+ screenshot_on_failure : 'integer | optional',
55
+ consecutive_error_stop : 'integer | optional',
56
+ created_by_user_id : 'integer | optional',
57
+ started_at : 'timestamp | optional',
58
+ finished_at : 'timestamp | optional',
59
+ created_at : 'timestamp | optional',
60
+ updated_at : 'timestamp | optional',
61
+ };
62
+
63
+ create_scheme = [
64
+ 'project_id',
65
+ 'execution_context_id',
66
+ 'team_domain_id',
67
+ 'autotest_case_ids',
68
+ 'max_threads',
69
+ 'retry_count',
70
+ 'step_timeout_ms',
71
+ 'case_timeout_ms',
72
+ 'run_timeout_ms',
73
+ 'screenshot_on_failure',
74
+ 'consecutive_error_stop',
75
+ ];
76
+
77
+ available_enum_values = {
78
+ autotest_run_status: [ 'PENDING', 'IN_PROGRESS', 'COMPLETED', 'CLOSED', 'CANCELLED' ],
79
+ };
80
+
81
+ enum_value_translate_matrix = typeAutotestRun_i18n.enum_value_translate_matrix;
82
+ attribute_name_translate_matrix = typeAutotestRun_i18n.attribute_name_translate_matrix;
83
+
84
+ status_color = {
85
+ PENDING : '#C4B040',
86
+ IN_PROGRESS: '#FD9A4F',
87
+ COMPLETED : '#009688',
88
+ CLOSED : '#E0E0E0',
89
+ CANCELLED : '#9E9E9E',
90
+ };
91
+
92
+
93
+ /**
94
+ * @param {object|false|undefined} data
95
+ */
96
+ constructor(data = false)
97
+ {
98
+ super();
99
+
100
+ if (data && is_object(data))
101
+ {
102
+ _.mapObject(data, (value, key) =>
103
+ {
104
+ if (this.hasOwnProperty(key))
105
+ {
106
+ this[ key ] = value;
107
+ }
108
+ });
109
+ }
110
+
111
+ return this;
112
+ }
113
+
114
+
115
+ /**
116
+ * @returns {string}
117
+ */
118
+ get_element_name()
119
+ {
120
+ return String(this.autotest_run_id ?? '');
121
+ }
122
+
123
+
124
+ /**
125
+ * @param {object|typeFunctionCallback} callback
126
+ * @returns {Promise<void>}
127
+ */
128
+ async cancel(callback)
129
+ {
130
+ if (!this.autotest_run_id)
131
+ {
132
+ throw new Error('Error #165-2216 - element has no autotest_run_id');
133
+ }
134
+
135
+ const payload = {
136
+ autotest_run_id: this.autotest_run_id,
137
+ };
138
+
139
+ if (typeof callback?.before === 'function')
140
+ {
141
+ callback.before({ payload });
142
+ }
143
+
144
+ return ApiService[ this.api_key ].cancel(payload).then((response) =>
145
+ {
146
+ if (typeof callback?.success === 'function')
147
+ {
148
+ callback.success({ response, payload });
149
+ }
150
+ }).catch((error) =>
151
+ {
152
+ echo({ error });
153
+ if (typeof callback?.error === 'function')
154
+ {
155
+ callback.error({ error, payload });
156
+ }
157
+ }).finally((response) =>
158
+ {
159
+ if (typeof callback?.final === 'function')
160
+ {
161
+ callback.final({ response, payload });
162
+ }
163
+ });
164
+ }
165
+ }
@@ -0,0 +1,297 @@
1
+ import { echo, is_object } from "../../utils/utils.js";
2
+ import { familyTestAutomation } from "../core/1_familyTestAutomation.js";
3
+ import { typeAutotestStep_i18n } from "../element_translate/typeAutotestStep.i18n.js";
4
+ import _ from 'underscore';
5
+
6
+
7
+ /**
8
+ * Шаг исполняемого автотеста. action_name - белый список интерпретатора Playwright.
9
+ *
10
+ * @version v.1.0 (04/09/2026)
11
+ */
12
+ export class typeAutotestStep extends familyTestAutomation
13
+ {
14
+ autotest_step_id;
15
+ autotest_case_id;
16
+ team_id;
17
+ sort_order;
18
+ action_name;
19
+ target;
20
+ value_text;
21
+ timeout_ms;
22
+ expected_value;
23
+ object_repository_page_id;
24
+ object_repository_element_id;
25
+ value_source_type;
26
+ value_source_field;
27
+ created_at;
28
+ updated_at;
29
+
30
+ primary_key = 'autotest_step_id';
31
+ api_key = 'autotest_step';
32
+
33
+ structure_scheme = {
34
+ autotest_step_id: 'integer | require',
35
+ autotest_case_id: 'integer | require',
36
+ team_id : 'integer | require',
37
+ sort_order : 'integer | optional',
38
+ action_name : 'string | enum | require',
39
+ target : 'typeAutotestStepTarget | optional',
40
+ value_text : 'string | optional',
41
+ timeout_ms : 'integer | optional',
42
+ expected_value : 'string | optional',
43
+ object_repository_page_id : 'integer | optional',
44
+ object_repository_element_id: 'integer | optional',
45
+ value_source_type : 'string | enum | optional',
46
+ value_source_field : 'string | optional',
47
+ created_at : 'timestamp | optional',
48
+ updated_at : 'timestamp | optional',
49
+ };
50
+
51
+ create_scheme = [
52
+ 'autotest_case_id',
53
+ 'action_name',
54
+ 'sort_order',
55
+ 'target',
56
+ 'value_text',
57
+ 'timeout_ms',
58
+ 'expected_value',
59
+ 'object_repository_page_id',
60
+ 'object_repository_element_id',
61
+ 'value_source_type',
62
+ 'value_source_field',
63
+ ];
64
+
65
+ available_enum_values = {
66
+ action_name: [
67
+ 'goto',
68
+ 'click',
69
+ 'dblclick',
70
+ 'fill',
71
+ 'type',
72
+ 'press',
73
+ 'check',
74
+ 'uncheck',
75
+ 'selectOption',
76
+ 'hover',
77
+ 'focus',
78
+ 'waitForSelector',
79
+ 'waitForURL',
80
+ 'waitForTimeout',
81
+ 'goBack',
82
+ 'goForward',
83
+ 'reload',
84
+ 'toBeVisible',
85
+ 'toHaveText',
86
+ 'toHaveURL',
87
+ 'toHaveAttribute',
88
+ ],
89
+ value_source_type: [
90
+ 'INLINE',
91
+ 'TEST_ACCOUNT',
92
+ ],
93
+ };
94
+
95
+ enum_value_translate_matrix = typeAutotestStep_i18n.enum_value_translate_matrix;
96
+ attribute_name_translate_matrix = typeAutotestStep_i18n.attribute_name_translate_matrix;
97
+
98
+
99
+ /**
100
+ * @param {object|false|undefined} data
101
+ */
102
+ constructor(data = false)
103
+ {
104
+ super();
105
+
106
+ if (data && is_object(data))
107
+ {
108
+ _.mapObject(data, (value, key) =>
109
+ {
110
+ if (this.hasOwnProperty(key))
111
+ {
112
+ this[ key ] = value;
113
+ }
114
+ });
115
+ }
116
+
117
+ return this;
118
+ }
119
+
120
+
121
+ /**
122
+ * @version v.1.0 (05/09/2026)
123
+ * @param element
124
+ * @param callback
125
+ */
126
+ increase_sort_order(element = false, callback)
127
+ {
128
+ if (!element)
129
+ {
130
+ element = this;
131
+ }
132
+
133
+ let payload = {
134
+ autotest_step_id: element.autotest_step_id
135
+ };
136
+
137
+ if (typeof callback?.before === 'function')
138
+ {
139
+ callback?.before({ payload });
140
+ }
141
+
142
+ return ApiService[ this.api_key ].increase_sort_order(payload).then((response) =>
143
+ {
144
+ if (typeof callback?.success === 'function')
145
+ {
146
+ callback?.success({ response, payload })
147
+ }
148
+ }).catch((error) =>
149
+ {
150
+ echo({ error });
151
+ if (typeof callback?.error === 'function')
152
+ {
153
+ callback?.error({ error, payload })
154
+ }
155
+ }).finally((response) =>
156
+ {
157
+ if (typeof callback?.final === 'function')
158
+ {
159
+ callback?.final({ response, payload })
160
+ }
161
+ });
162
+ }
163
+
164
+
165
+ /**
166
+ * @version v.1.0 (05/09/2026)
167
+ * @param element
168
+ * @param callback
169
+ */
170
+ decrease_sort_order(element = false, callback)
171
+ {
172
+ if (!element)
173
+ {
174
+ element = this;
175
+ }
176
+
177
+ let payload = {
178
+ autotest_step_id: element.autotest_step_id
179
+ };
180
+ if (typeof callback?.before === 'function')
181
+ {
182
+ callback?.before({ payload });
183
+ }
184
+
185
+ return ApiService[ this.api_key ].decrease_sort_order(payload).then((response) =>
186
+ {
187
+ if (typeof callback?.success === 'function')
188
+ {
189
+ callback?.success({ response, payload })
190
+ }
191
+ }).catch((error) =>
192
+ {
193
+ echo({ error });
194
+ if (typeof callback?.error === 'function')
195
+ {
196
+ callback?.error({ error, payload })
197
+ }
198
+ }).finally((response) =>
199
+ {
200
+ if (typeof callback?.final === 'function')
201
+ {
202
+ callback?.final({ response, payload })
203
+ }
204
+ });
205
+ }
206
+
207
+
208
+ /**
209
+ * Save action fields and target for one step.
210
+ *
211
+ * @version v.1.0 (05/09/2026)
212
+ * @param {object} payload
213
+ * @param {object} callback
214
+ */
215
+ save(payload = false, callback)
216
+ {
217
+ if (!payload)
218
+ {
219
+ payload = {
220
+ autotest_step_id: this.autotest_step_id,
221
+ action_name : this.action_name,
222
+ target : this.target,
223
+ value_text : this.value_text,
224
+ timeout_ms : this.timeout_ms,
225
+ expected_value : this.expected_value,
226
+ object_repository_page_id : this.object_repository_page_id,
227
+ object_repository_element_id: this.object_repository_element_id,
228
+ value_source_type : this.value_source_type,
229
+ value_source_field : this.value_source_field,
230
+ sort_order : this.sort_order,
231
+ };
232
+ }
233
+
234
+ if (typeof callback?.before === 'function')
235
+ {
236
+ callback?.before({ payload });
237
+ }
238
+
239
+ return ApiService[ this.api_key ].save(payload).then((response) =>
240
+ {
241
+ if (typeof callback?.success === 'function')
242
+ {
243
+ callback?.success({ response, payload })
244
+ }
245
+ }).catch((error) =>
246
+ {
247
+ echo({ error });
248
+ if (typeof callback?.error === 'function')
249
+ {
250
+ callback?.error({ error, payload })
251
+ }
252
+ }).finally((response) =>
253
+ {
254
+ if (typeof callback?.final === 'function')
255
+ {
256
+ callback?.final({ response, payload })
257
+ }
258
+ });
259
+ }
260
+
261
+
262
+ /**
263
+ * Save a JSON array of steps. Each item must include autotest_step_id.
264
+ *
265
+ * @version v.1.0 (05/09/2026)
266
+ * @param {object} payload
267
+ * @param {object} callback
268
+ */
269
+ save_json(payload, callback)
270
+ {
271
+ if (typeof callback?.before === 'function')
272
+ {
273
+ callback?.before({ payload });
274
+ }
275
+
276
+ return ApiService[ this.api_key ].save_json(payload).then((response) =>
277
+ {
278
+ if (typeof callback?.success === 'function')
279
+ {
280
+ callback?.success({ response, payload })
281
+ }
282
+ }).catch((error) =>
283
+ {
284
+ echo({ error });
285
+ if (typeof callback?.error === 'function')
286
+ {
287
+ callback?.error({ error, payload })
288
+ }
289
+ }).finally((response) =>
290
+ {
291
+ if (typeof callback?.final === 'function')
292
+ {
293
+ callback?.final({ response, payload })
294
+ }
295
+ });
296
+ }
297
+ }
@@ -0,0 +1,50 @@
1
+ import { familyTestAutomation } from "../core/1_familyTestAutomation.js";
2
+ import { is_object } from "../../utils/utils.js";
3
+ import { AUTOTEST_STEP_LOCATOR_KINDS } from "./autotest_step_actions/autotestStepLocatorKind.js";
4
+ import _ from 'underscore';
5
+
6
+
7
+ /**
8
+ * Цель шага автотеста (вложена в typeAutotestStep.target). Без API.
9
+ * Канон: kind + value + optional name.
10
+ *
11
+ * @version v.1.1 (05/09/2026)
12
+ */
13
+ export class typeAutotestStepTarget extends familyTestAutomation
14
+ {
15
+ kind;
16
+ value;
17
+ name;
18
+
19
+ structure_scheme = {
20
+ kind : 'string | enum | optional',
21
+ value: 'string | optional',
22
+ name : 'string | optional',
23
+ };
24
+
25
+ available_enum_values = {
26
+ kind: AUTOTEST_STEP_LOCATOR_KINDS,
27
+ };
28
+
29
+
30
+ /**
31
+ * @param {object|false|undefined} data
32
+ */
33
+ constructor(data = false)
34
+ {
35
+ super();
36
+
37
+ if (data && is_object(data))
38
+ {
39
+ _.mapObject(data, (value, key) =>
40
+ {
41
+ if (this.hasOwnProperty(key))
42
+ {
43
+ this[ key ] = value;
44
+ }
45
+ });
46
+ }
47
+
48
+ return this;
49
+ }
50
+ }
@@ -0,0 +1,74 @@
1
+ import { is_object } from "../../utils/utils.js";
2
+ import { familyTestAutomation } from "../core/1_familyTestAutomation.js";
3
+ import { typeAutotestSuite_i18n } from "../element_translate/typeAutotestSuite.i18n.js";
4
+ import _ from 'underscore';
5
+
6
+
7
+ /**
8
+ * Дерево сьютов автотестов.
9
+ *
10
+ * @version v.1.0 (04/09/2026)
11
+ */
12
+ export class typeAutotestSuite extends familyTestAutomation
13
+ {
14
+ autotest_suite_id;
15
+ team_id;
16
+ project_id;
17
+ parent_autotest_suite_id;
18
+ autotest_suite_title;
19
+ created_at;
20
+ updated_at;
21
+
22
+ primary_key = 'autotest_suite_id';
23
+ api_key = 'autotest_suite';
24
+
25
+ structure_scheme = {
26
+ autotest_suite_id : 'integer | require',
27
+ team_id : 'integer | require',
28
+ project_id : 'integer | require',
29
+ parent_autotest_suite_id: 'integer | optional',
30
+ autotest_suite_title : 'string | optional',
31
+ created_at : 'timestamp | optional',
32
+ updated_at : 'timestamp | optional',
33
+ };
34
+
35
+ create_scheme = [
36
+ 'project_id',
37
+ 'autotest_suite_title',
38
+ 'parent_autotest_suite_id',
39
+ ];
40
+
41
+ enum_value_translate_matrix = typeAutotestSuite_i18n.enum_value_translate_matrix;
42
+ attribute_name_translate_matrix = typeAutotestSuite_i18n.attribute_name_translate_matrix;
43
+
44
+
45
+ /**
46
+ * @param {object|false|undefined} data
47
+ */
48
+ constructor(data = false)
49
+ {
50
+ super();
51
+
52
+ if (data && is_object(data))
53
+ {
54
+ _.mapObject(data, (value, key) =>
55
+ {
56
+ if (this.hasOwnProperty(key))
57
+ {
58
+ this[ key ] = value;
59
+ }
60
+ });
61
+ }
62
+
63
+ return this;
64
+ }
65
+
66
+
67
+ /**
68
+ * @returns {string}
69
+ */
70
+ get_element_name()
71
+ {
72
+ return this.autotest_suite_title;
73
+ }
74
+ }
@@ -77,7 +77,7 @@ export class typeCustomProperty extends familyTestDocumentation
77
77
 
78
78
  static get_element_type_values()
79
79
  {
80
- return [ 'test_case', 'bug' ];
80
+ return [ 'test_case', 'bug', 'autotest_case', 'autotest_run', 'object_repository_page', 'object_repository_element', 'object_repository_folder' ];
81
81
  }
82
82
 
83
83
 
@@ -0,0 +1,88 @@
1
+ import { is_object } from "../../utils/utils.js";
2
+ import { familyTestAutomation } from "../core/1_familyTestAutomation.js";
3
+ import { typeObjectRepositoryElement_i18n } from "../element_translate/typeObjectRepositoryElement.i18n.js";
4
+ import { AUTOTEST_STEP_LOCATOR_KINDS } from "./autotest_step_actions/autotestStepLocatorKind.js";
5
+ import _ from 'underscore';
6
+
7
+
8
+ /**
9
+ * Object Repository element. Live locator: locator_kind + locator_value (+ locator_name for ROLE).
10
+ *
11
+ * @version v.1.0 (05/09/2026)
12
+ */
13
+ export class typeObjectRepositoryElement extends familyTestAutomation
14
+ {
15
+ object_repository_element_id;
16
+ team_id;
17
+ project_id;
18
+ object_repository_folder_id;
19
+ object_repository_element_title;
20
+ locator_kind;
21
+ locator_value;
22
+ locator_name;
23
+ created_at;
24
+ updated_at;
25
+
26
+ primary_key = 'object_repository_element_id';
27
+ api_key = 'object_repository_element';
28
+
29
+ structure_scheme = {
30
+ object_repository_element_id : 'integer | require',
31
+ team_id : 'integer | require',
32
+ project_id : 'integer | require',
33
+ object_repository_folder_id : 'integer | optional',
34
+ object_repository_element_title: 'string | optional',
35
+ locator_kind : 'string | enum | require',
36
+ locator_value : 'string | optional',
37
+ locator_name : 'string | optional',
38
+ created_at : 'timestamp | optional',
39
+ updated_at : 'timestamp | optional',
40
+ };
41
+
42
+ create_scheme = [
43
+ 'project_id',
44
+ 'object_repository_element_title',
45
+ 'object_repository_folder_id',
46
+ 'locator_kind',
47
+ 'locator_value',
48
+ 'locator_name',
49
+ ];
50
+
51
+ available_enum_values = {
52
+ locator_kind: AUTOTEST_STEP_LOCATOR_KINDS.slice(),
53
+ };
54
+
55
+ enum_value_translate_matrix = typeObjectRepositoryElement_i18n.enum_value_translate_matrix;
56
+ attribute_name_translate_matrix = typeObjectRepositoryElement_i18n.attribute_name_translate_matrix;
57
+
58
+
59
+ /**
60
+ * @param {object|false|undefined} data
61
+ */
62
+ constructor(data = false)
63
+ {
64
+ super();
65
+
66
+ if (data && is_object(data))
67
+ {
68
+ _.mapObject(data, (value, key) =>
69
+ {
70
+ if (this.hasOwnProperty(key))
71
+ {
72
+ this[ key ] = value;
73
+ }
74
+ });
75
+ }
76
+
77
+ return this;
78
+ }
79
+
80
+
81
+ /**
82
+ * @returns {string}
83
+ */
84
+ get_element_name()
85
+ {
86
+ return this.object_repository_element_title;
87
+ }
88
+ }