Skip to content

Commit 16d174a

Browse files
Merge branch 'main' into aishkan/secure-settings-scope
2 parents 07d926b + 1ce2320 commit 16d174a

File tree

10 files changed

+92
-37
lines changed

10 files changed

+92
-37
lines changed

.github/workflows/actions.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ on:
99
jobs:
1010
tests:
1111
runs-on: ubuntu-latest
12+
permissions:
13+
contents: read
1214
strategy:
1315
fail-fast: false
1416
matrix:
@@ -27,6 +29,8 @@ jobs:
2729

2830
linter:
2931
runs-on: ubuntu-latest
32+
permissions:
33+
contents: read
3034
steps:
3135
- uses: zendesk/checkout@v3
3236
- uses: zendesk/setup-ruby@v1
@@ -40,6 +44,8 @@ jobs:
4044
needs: tests
4145
if: always()
4246
runs-on: ubuntu-latest
47+
permissions:
48+
actions: read
4349
steps:
4450
- run: |
4551
if ${{ needs.tests.result == 'success' }}

config/locales/en.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,49 @@ en:
132132
contains an invalid object reference in object_triggers. Trigger \"%{item_identifier}\"
133133
references object \"%{object_key}\" which does not exist in the objects
134134
array.
135+
excessive_custom_objects_v2_trigger_conditions_v2: The requirements.json
136+
file contains too many custom object trigger conditions. The current
137+
limit is %{max} conditions per trigger. This app has %{count} conditions
138+
for trigger %{trigger_key}.
139+
excessive_custom_objects_v2_trigger_actions_v2: The requirements.json
140+
file contains too many custom object trigger actions. The current limit
141+
is %{max} actions per trigger. This app has %{count} actions for trigger
142+
%{trigger_key}.
143+
missing_cov2_trigger_schema_key_v2: 'The requirements.json file is missing
144+
custom object trigger schema key for trigger %{trigger_key} in object
145+
%{object_key}. The following key is required: %{missing_key}.'
146+
empty_cov2_trigger_conditions_v2: The requirements.json file contains
147+
an empty conditions array for custom object trigger %{trigger_key} in
148+
object %{object_key}.
149+
invalid_cov2_requirements_structure_v2: The requirements.json file contains
150+
an invalid custom_objects_v2 structure. The custom_objects_v2 requirements
151+
must be an object.
152+
invalid_cov2_trigger_actions_structure_v2: The requirements.json file
153+
contains an invalid custom object trigger actions structure. The actions
154+
field must be an array for trigger %{trigger_key}.
155+
empty_cov2_trigger_actions_v2: The requirements.json file contains empty
156+
custom object trigger actions. At least one action must be specified
157+
for trigger %{trigger_key}.
158+
invalid_objects_structure_in_cov2_requirements_v2: The requirements.json
159+
file contains an invalid objects structure. The objects field must be
160+
an array.
161+
invalid_object_fields_structure_in_cov2_requirements_v2: The requirements.json
162+
file contains an invalid object_fields structure. The object_fields
163+
field must be an array.
164+
invalid_object_triggers_structure_in_cov2_requirements_v2: The requirements.json
165+
file contains an invalid object_triggers structure. The object_triggers
166+
field must be an array.
167+
invalid_cov2_object_reference_in_fields_v2: The requirements.json file
168+
contains an invalid object reference in object_fields. Field %{item_identifier}
169+
references object %{object_key} which does not exist in the objects
170+
array.
171+
invalid_cov2_object_reference_in_triggers_v2: The requirements.json file
172+
contains an invalid object reference in object_triggers. Trigger %{item_identifier}
173+
references object %{object_key} which does not exist in the objects
174+
array.
175+
invalid_cov2_trigger_conditions_structure_v2: The requirements.json file
176+
contains an invalid custom object trigger conditions structure. Conditions
177+
must be a hash with all and any arrays for trigger %{trigger_key}.
135178
missing_required_fields: 'Missing required fields in requirements.json:
136179
"%{field}" is required in "%{identifier}"'
137180
duplicate_requirements:

config/locales/translations/zendesk_apps_support.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ parts:
192192
title: 'App builder job: requirements file contains invalid custom object trigger conditions structure. Conditions must be an object (a set of key-value pairs, like { "all": [], "any": [] } in JSON) with "all" and "any" arrays as keys. Leave requirements.json, "all" and "any" as is (do not translate)'
193193
value: 'The requirements.json file contains an invalid custom object trigger conditions structure. Conditions must be a hash with "all" and "any" arrays for trigger %{trigger_title}.'
194194
screenshot: "https://drive.google.com/file/d/1c4Hgk8OXscco_cwOfCX5r8Ub3k_-umrr/view?usp=sharing"
195+
obsolete: "2025-12-31"
195196
- translation:
196197
key: "txt.apps.admin.error.app_build.invalid_cov2_trigger_actions_structure"
197198
title: "App builder job: requirements file contains an invalid custom object trigger actions structure. Actions must be an array. 'actions' is part of requirements file. Leave requirements.json and 'actions' as is (do not translate)"
@@ -304,6 +305,11 @@ parts:
304305
title: 'App builder job: requirements file contains an invalid object reference in object_triggers for Custom Objects V2. Do not translate "requirements.json", %{item_identifier}, %{object_key}. Do not translate "object_triggers" as it is part of schema.'
305306
value: 'The requirements.json file contains an invalid object reference in object_triggers. Trigger %{item_identifier} references object %{object_key} which does not exist in the objects array.'
306307
screenshot: "https://drive.google.com/file/d/1hwmWbFPd5_XtoY6gpyy7FZ9niHppRe2m/view?usp=sharing"
308+
- translation:
309+
key: "txt.apps.admin.error.app_build.invalid_cov2_trigger_conditions_structure_v2"
310+
title: 'App builder job: requirements file contains invalid custom object trigger conditions structure. Conditions must be an object (a set of key-value pairs, like { "all": [], "any": [] } in JSON) with "all" and "any" arrays as keys. Do not translate "requirements.json". Do not translate "all" and "any" as it is part of schema.'
311+
value: 'The requirements.json file contains an invalid custom object trigger conditions structure. Conditions must be a hash with all and any arrays for trigger %{trigger_key}.'
312+
screenshot: "https://drive.google.com/file/d/1q9S42EyNDE1GPk8A32LT0n2ZQiBpuCEW/view?usp=sharing"
307313
- translation:
308314
key: "txt.apps.admin.error.app_build.missing_required_fields"
309315
title: "App builder job: required key missing in requirements, e.g. \"title\" is required in \"my_custom_email_target\""

lib/zendesk_apps_support/validations/custom_objects_v2/constants.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ module Constants
4949
MAX_PAYLOAD_SIZE_BYTES = 1_048_576 # 1 MB in bytes
5050

5151
REFERENCE_VALIDATION_CONFIG = {
52-
SCHEMA_KEYS[:object_fields] => { identifier: KEY, error: :invalid_cov2_object_reference_in_fields },
53-
SCHEMA_KEYS[:object_triggers] => { identifier: TITLE, error: :invalid_cov2_object_reference_in_triggers }
52+
SCHEMA_KEYS[:object_fields] => { identifier: KEY, error: :invalid_cov2_object_reference_in_fields_v2 },
53+
SCHEMA_KEYS[:object_triggers] => { identifier: KEY, error: :invalid_cov2_object_reference_in_triggers_v2 }
5454
}.freeze
5555
end
5656
end

lib/zendesk_apps_support/validations/custom_objects_v2/custom_objects_v2.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ def validate_overall_requirements_structure(requirements)
5151
end
5252

5353
[
54-
validate_collection_is_array(objects, :invalid_objects_structure_in_cov2_requirements),
55-
validate_collection_is_array(object_fields, :invalid_object_fields_structure_in_cov2_requirements),
56-
validate_collection_is_array(object_triggers, :invalid_object_triggers_structure_in_cov2_requirements)
54+
validate_collection_is_array(objects, :invalid_objects_structure_in_cov2_requirements_v2),
55+
validate_collection_is_array(object_fields, :invalid_object_fields_structure_in_cov2_requirements_v2),
56+
validate_collection_is_array(object_triggers, :invalid_object_triggers_structure_in_cov2_requirements_v2)
5757
].flatten
5858
end
5959

6060
def validate_structural_requirements(requirements)
61-
return [ValidationError.new(:invalid_cov2_requirements_structure)] unless requirements.is_a?(Hash)
61+
return [ValidationError.new(:invalid_cov2_requirements_structure_v2)] unless requirements.is_a?(Hash)
6262
return [ValidationError.new(:empty_cov2_requirements)] if requirements.empty?
6363

6464
[]

lib/zendesk_apps_support/validations/custom_objects_v2/limits_validator.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,10 @@ def validate_trigger_conditions(trigger)
140140

141141
return [] unless total_conditions > MAX_CONDITIONS_PER_TRIGGER
142142

143-
[ValidationError.new(:excessive_custom_objects_v2_trigger_conditions,
143+
[ValidationError.new(:excessive_custom_objects_v2_trigger_conditions_v2,
144144
max: MAX_CONDITIONS_PER_TRIGGER,
145145
count: total_conditions,
146-
trigger_title: trigger[TITLE])]
146+
trigger_key: trigger[KEY])]
147147
end
148148

149149
def validate_triggers_actions_limit(object_triggers)
@@ -153,10 +153,10 @@ def validate_triggers_actions_limit(object_triggers)
153153
actions = trigger[ACTIONS]
154154
next if actions.size <= MAX_ACTIONS_PER_TRIGGER
155155

156-
ValidationError.new(:excessive_custom_objects_v2_trigger_actions,
156+
ValidationError.new(:excessive_custom_objects_v2_trigger_actions_v2,
157157
max: MAX_ACTIONS_PER_TRIGGER,
158158
count: actions.size,
159-
trigger_title: trigger[TITLE])
159+
trigger_key: trigger[KEY])
160160
end
161161
end
162162

lib/zendesk_apps_support/validations/custom_objects_v2/schema_validator.rb

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,45 +62,45 @@ def validate_triggers_schema(object_triggers = [])
6262
def validate_trigger_schema(trigger)
6363
required_keys = %w[key object_key title actions conditions]
6464
missing_keys = required_keys - trigger.keys
65-
trigger_title = safe_value(trigger[TITLE])
65+
trigger_key = safe_value(trigger[KEY])
6666
object_key = safe_value(trigger[OBJECT_KEY])
6767

6868
errors = missing_keys.map do |missing_key|
69-
ValidationError.new(:missing_cov2_trigger_schema_key,
69+
ValidationError.new(:missing_cov2_trigger_schema_key_v2,
7070
missing_key: missing_key,
71-
trigger_title: trigger_title,
71+
trigger_key: trigger_key,
7272
object_key: object_key)
7373
end
7474

75-
errors.concat(validate_conditions_schema(trigger[CONDITIONS], object_key, trigger_title))
76-
errors.concat(validate_actions_schema(trigger[ACTIONS], object_key, trigger_title))
75+
errors.concat(validate_conditions_schema(trigger[CONDITIONS], object_key, trigger_key))
76+
errors.concat(validate_actions_schema(trigger[ACTIONS], object_key, trigger_key))
7777
errors
7878
end
7979

80-
def validate_conditions_schema(conditions, object_key, title)
81-
error_data = { trigger_title: title, object_key: object_key }
80+
def validate_conditions_schema(conditions, object_key, trigger_key)
81+
error_data = { trigger_key:, object_key: }
8282

8383
unless valid_conditions_structure?(conditions)
84-
return [ValidationError.new(:invalid_cov2_trigger_conditions_structure, **error_data)]
84+
return [ValidationError.new(:invalid_cov2_trigger_conditions_structure_v2, **error_data)]
8585
end
8686

8787
if count_conditions(conditions).zero?
88-
return [ValidationError.new(:empty_cov2_trigger_conditions, **error_data)]
88+
return [ValidationError.new(:empty_cov2_trigger_conditions_v2, **error_data)]
8989
end
9090

9191
[]
9292
end
9393

94-
def validate_actions_schema(actions, object_key, title)
95-
error_data = { trigger_title: title, object_key: object_key }
94+
def validate_actions_schema(actions, object_key, trigger_key)
95+
error_data = { trigger_key:, object_key: }
9696

9797
unless actions.is_a?(Array)
98-
return [ValidationError.new(:invalid_cov2_trigger_actions_structure, **error_data)]
98+
return [ValidationError.new(:invalid_cov2_trigger_actions_structure_v2, **error_data)]
9999
end
100100

101101
return [] unless actions.empty?
102102

103-
[ValidationError.new(:empty_cov2_trigger_actions, **error_data)]
103+
[ValidationError.new(:empty_cov2_trigger_actions_v2, **error_data)]
104104
end
105105

106106
def valid_conditions_structure?(conditions)

spec/validations/custom_objects_v2/custom_objects_v2_spec.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
describe '.call' do
77
[
88
{
9-
error: :invalid_cov2_requirements_structure,
9+
error: :invalid_cov2_requirements_structure_v2,
1010
requirements: nil,
1111
description: 'requirements is nil'
1212
},
1313
{
14-
error: :invalid_cov2_requirements_structure,
14+
error: :invalid_cov2_requirements_structure_v2,
1515
requirements: [],
1616
description: 'requirements is an array'
1717
},
@@ -30,7 +30,7 @@
3030
description: 'all cov2 arrays are empty'
3131
},
3232
{
33-
error: :invalid_objects_structure_in_cov2_requirements,
33+
error: :invalid_objects_structure_in_cov2_requirements_v2,
3434
requirements: {
3535
'objects' => {},
3636
'object_fields' => [{ 'key' => 'field_1', 'type' => 'text', 'title' => 'Field 1',
@@ -41,7 +41,7 @@
4141
description: 'objects is not an array'
4242
},
4343
{
44-
error: :invalid_object_fields_structure_in_cov2_requirements,
44+
error: :invalid_object_fields_structure_in_cov2_requirements_v2,
4545
requirements: {
4646
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',
4747
'include_in_list_view' => true }],
@@ -52,7 +52,7 @@
5252
description: 'object_fields is not an array'
5353
},
5454
{
55-
error: :invalid_object_triggers_structure_in_cov2_requirements,
55+
error: :invalid_object_triggers_structure_in_cov2_requirements_v2,
5656
requirements: {
5757
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',
5858
'include_in_list_view' => true }],
@@ -79,7 +79,7 @@
7979
description: 'payload exceeds size limit'
8080
},
8181
{
82-
error: :invalid_cov2_object_reference_in_triggers,
82+
error: :invalid_cov2_object_reference_in_triggers_v2,
8383
requirements: {
8484
'objects' => [
8585
{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',
@@ -95,7 +95,7 @@
9595
description: 'object_trigger references non-existent object'
9696
},
9797
{
98-
error: :invalid_cov2_object_reference_in_fields,
98+
error: :invalid_cov2_object_reference_in_fields_v2,
9999
requirements: {
100100
'objects' => [
101101
{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',

spec/validations/custom_objects_v2/limits_validator_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
description: 'there are more than 20 triggers per object'
8080
},
8181
{
82-
error: :excessive_custom_objects_v2_trigger_conditions,
82+
error: :excessive_custom_objects_v2_trigger_conditions_v2,
8383
requirements: {
8484
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1' }],
8585
'object_fields' => [],
@@ -96,7 +96,7 @@
9696
description: 'there are more than 50 conditions per trigger'
9797
},
9898
{
99-
error: :excessive_custom_objects_v2_trigger_actions,
99+
error: :excessive_custom_objects_v2_trigger_actions_v2,
100100
requirements: {
101101
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1' }],
102102
'object_fields' => [],

spec/validations/custom_objects_v2/schema_validator_spec.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
description: 'fields is missing required key'
2626
},
2727
{
28-
error: :missing_cov2_trigger_schema_key,
28+
error: :missing_cov2_trigger_schema_key_v2,
2929
requirements: {
3030
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',
3131
'include_in_list_view' => true }],
@@ -35,7 +35,7 @@
3535
description: 'triggers is missing required key'
3636
},
3737
{
38-
error: :invalid_cov2_trigger_conditions_structure,
38+
error: :invalid_cov2_trigger_conditions_structure_v2,
3939
requirements: {
4040
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',
4141
'include_in_list_view' => true }],
@@ -51,7 +51,7 @@
5151
description: 'triggers has invalid conditions structure'
5252
},
5353
{
54-
error: :empty_cov2_trigger_conditions,
54+
error: :empty_cov2_trigger_conditions_v2,
5555
requirements: {
5656
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',
5757
'include_in_list_view' => true }],
@@ -67,7 +67,7 @@
6767
description: 'triggers has empty conditions'
6868
},
6969
{
70-
error: :invalid_cov2_trigger_actions_structure,
70+
error: :invalid_cov2_trigger_actions_structure_v2,
7171
requirements: {
7272
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',
7373
'include_in_list_view' => true }],
@@ -83,7 +83,7 @@
8383
description: 'triggers has invalid actions structure'
8484
},
8585
{
86-
error: :empty_cov2_trigger_actions,
86+
error: :empty_cov2_trigger_actions_v2,
8787
requirements: {
8888
'objects' => [{ 'key' => 'object_1', 'title' => 'Object 1', 'title_pluralized' => 'Objects 1',
8989
'include_in_list_view' => true }],

0 commit comments

Comments
 (0)