1
0
Fork 0

Apply consistent date validation on the server (using v8) (#124)

* Apply consistent date validation on the server (using v8)

* Variable fix

* added specs to verify date/time field validation

* minor text change

Co-authored-by: Faizaan Gagan <fzngagan@gmail.com>
Dieser Commit ist enthalten in:
Angus McLeod 2021-06-26 17:45:33 +10:00 committet von GitHub
Ursprung 7bfa0aff70
Commit f80f40d6b3
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
2 geänderte Dateien mit 51 neuen und 8 gelöschten Zeilen

Datei anzeigen

@ -52,7 +52,7 @@ class ::CustomWizard::UpdateValidator
@updater.errors.add(field_id, I18n.t('wizard.field.invalid_file', label: label, types: file_types)) @updater.errors.add(field_id, I18n.t('wizard.field.invalid_file', label: label, types: file_types))
end end
if ['date', 'date_time'].include?(type) && value.present? && !validate_date(value) if ['date', 'date_time'].include?(type) && value.present? && !validate_date(value, format)
@updater.errors.add(field_id, I18n.t('wizard.field.invalid_date')) @updater.errors.add(field_id, I18n.t('wizard.field.invalid_date'))
end end
@ -88,13 +88,8 @@ class ::CustomWizard::UpdateValidator
.include?(File.extname(value['original_filename'])[1..-1]) .include?(File.extname(value['original_filename'])[1..-1])
end end
def validate_date(value) def validate_date(value, format)
begin v8.eval("moment('#{value}', '#{format}', true).isValid()")
Date.parse(value)
true
rescue ArgumentError
false
end
end end
def validate_time(value) def validate_time(value)
@ -126,4 +121,12 @@ class ::CustomWizard::UpdateValidator
def standardise_boolean(value) def standardise_boolean(value)
ActiveRecord::Type::Boolean.new.cast(value) ActiveRecord::Type::Boolean.new.cast(value)
end end
def v8
return @ctx if @ctx
@ctx = PrettyText.v8
PrettyText.ctx_load(@ctx, "#{Rails.root}/vendor/assets/javascripts/moment.js")
@ctx
end
end end

Datei anzeigen

@ -132,4 +132,44 @@ describe CustomWizard::UpdateValidator do
updater.errors.messages[:step_2_field_6].first updater.errors.messages[:step_2_field_6].first
).to eq(nil) ).to eq(nil)
end end
it 'validates date fields' do
@template[:steps][1][:fields][0][:format] = "DD-MM-YYYY"
CustomWizard::Template.save(@template)
updater = perform_validation('step_2', step_2_field_1: '13-11-2021')
expect(
updater.errors.messages[:step_2_field_1].first
).to eq(nil)
end
it 'doesn\'t validate date field if the format is not respected' do
@template[:steps][1][:fields][0][:format] = "MM-DD-YYYY"
CustomWizard::Template.save(@template)
updater = perform_validation('step_2', step_2_field_1: '13-11-2021')
expect(
updater.errors.messages[:step_2_field_1].first
).to eq(I18n.t('wizard.field.invalid_date'))
end
it 'validates date time fields' do
@template[:steps][1][:fields][2][:format] = "DD-MM-YYYY HH:mm:ss"
CustomWizard::Template.save(@template)
updater = perform_validation('step_2', step_2_field_3: '13-11-2021 09:15:00')
expect(
updater.errors.messages[:step_2_field_3].first
).to eq(nil)
end
it 'doesn\'t validate date time field if the format is not respected' do
@template[:steps][1][:fields][2][:format] = "MM-DD-YYYY HH:mm:ss"
CustomWizard::Template.save(@template)
updater = perform_validation('step_2', step_2_field_3: '13-11-2021 09:15')
expect(
updater.errors.messages[:step_2_field_3].first
).to eq(I18n.t('wizard.field.invalid_date'))
end
end end