update signature validation
This commit is contained in:
committed by
Pete Matsyburka
parent
7e70f4fb14
commit
b0110d9340
+38
-10
@@ -4,21 +4,49 @@ module SigningFormHelper
|
||||
module_function
|
||||
|
||||
def draw_canvas
|
||||
page.find('canvas').click([], { x: 150, y: 100 })
|
||||
page.execute_script <<~JS
|
||||
const canvas = document.getElementsByTagName('canvas')[0];
|
||||
const ctx = canvas.getContext('2d');
|
||||
const rect = canvas.getBoundingClientRect();
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(150, 100);
|
||||
ctx.lineTo(450, 100);
|
||||
ctx.stroke();
|
||||
const startX = rect.left + 50;
|
||||
const startY = rect.top + 100;
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(150, 100);
|
||||
ctx.lineTo(150, 150);
|
||||
ctx.stroke();
|
||||
const amplitude = 20;
|
||||
const wavelength = 30;
|
||||
const length = 300;
|
||||
|
||||
function dispatchPointerEvent(type, x, y) {
|
||||
const event = new PointerEvent(type, {
|
||||
pointerId: 1,
|
||||
pointerType: 'pen',
|
||||
isPrimary: true,
|
||||
clientX: x,
|
||||
clientY: y,
|
||||
bubbles: true,
|
||||
pressure: 0.5
|
||||
});
|
||||
|
||||
canvas.dispatchEvent(event);
|
||||
}
|
||||
|
||||
dispatchPointerEvent('pointerdown', startX, startY);
|
||||
|
||||
let x = 0;
|
||||
function drawStep() {
|
||||
if (x > length) {
|
||||
dispatchPointerEvent('pointerup', startX + x, startY);
|
||||
return;
|
||||
}
|
||||
|
||||
const y = startY + amplitude * Math.sin((x / wavelength) * 2 * Math.PI);
|
||||
dispatchPointerEvent('pointermove', startX + x, y);
|
||||
x += 5;
|
||||
requestAnimationFrame(drawStep);
|
||||
}
|
||||
|
||||
drawStep();
|
||||
JS
|
||||
|
||||
sleep 0.5
|
||||
end
|
||||
|
||||
|
||||
@@ -360,6 +360,19 @@ RSpec.describe 'Signing Form', type: :system do
|
||||
expect(field_value(submitter, 'Signature')).to be_present
|
||||
end
|
||||
|
||||
it 'shows an error message if the canvas is not drawn or too simple' do
|
||||
visit submit_form_path(slug: submitter.slug)
|
||||
|
||||
find('#expand_form_button').click
|
||||
page.find('canvas').click([], { x: 150, y: 100 })
|
||||
|
||||
alert_text = page.accept_alert do
|
||||
click_button 'Sign and Complete'
|
||||
end
|
||||
|
||||
expect(alert_text).to eq 'Signature is too small or simple. Please redraw.'
|
||||
end
|
||||
|
||||
it 'completes the form if the canvas is typed' do
|
||||
visit submit_form_path(slug: submitter.slug)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user