module('data-confirm', {
setup: function() { $('#qunit-fixture').append($('<a />', { href: '/echo', 'data-remote': 'true', 'data-confirm': 'Are you absolutely sure?', text: 'my social security number' })) $('#qunit-fixture').append($('<button />', { 'data-url': '/echo', 'data-remote': 'true', 'data-confirm': 'Are you absolutely sure?', text: 'Click me' })) $('#qunit-fixture').append($('<form />', { id: 'confirm', action: '/echo', 'data-remote': 'true' })) $('#qunit-fixture').append($('<input />', { type: 'submit', form: 'confirm', 'data-confirm': 'Are you absolutely sure?' })) $('#qunit-fixture').append($('<button />', { type: 'submit', form: 'confirm', disabled: 'disabled', 'data-confirm': 'Are you absolutely sure?' })) this.windowConfirm = window.confirm }, teardown: function() { window.confirm = this.windowConfirm }
})
asyncTest('clicking on a link with data-confirm attribute. Confirm yes.', 6, function() {
var message // auto-confirm: window.confirm = function(msg) { message = msg; return true } $('a[data-confirm]') .bindNative('confirm:complete', function(e, data) { App.assertCallbackInvoked('confirm:complete') ok(data == true, 'confirm:complete passes in confirm answer (true)') }) .bindNative('ajax:success', function(e, data, status, xhr) { App.assertCallbackInvoked('ajax:success') App.assertRequestPath(data, '/echo') App.assertGetRequest(data) equal(message, 'Are you absolutely sure?') start() }) .triggerNative('click')
})
asyncTest('clicking on a button with data-confirm attribute. Confirm yes.', 6, function() {
var message // auto-confirm: window.confirm = function(msg) { message = msg; return true } $('button[data-confirm]') .bindNative('confirm:complete', function(e, data) { App.assertCallbackInvoked('confirm:complete') ok(data == true, 'confirm:complete passes in confirm answer (true)') }) .bindNative('ajax:success', function(e, data, status, xhr) { App.assertCallbackInvoked('ajax:success') App.assertRequestPath(data, '/echo') App.assertGetRequest(data) equal(message, 'Are you absolutely sure?') start() }) .triggerNative('click')
})
asyncTest('clicking on a link with data-confirm attribute. Confirm No.', 3, function() {
var message // auto-decline: window.confirm = function(msg) { message = msg; return false } $('a[data-confirm]') .bindNative('confirm:complete', function(e, data) { App.assertCallbackInvoked('confirm:complete') ok(data == false, 'confirm:complete passes in confirm answer (false)') }) .bindNative('ajax:beforeSend', function(e, data, status, xhr) { App.assertCallbackNotInvoked('ajax:beforeSend') }) .triggerNative('click') setTimeout(function() { equal(message, 'Are you absolutely sure?') start() }, 50)
})
asyncTest('clicking on a button with data-confirm attribute. Confirm No.', 3, function() {
var message // auto-decline: window.confirm = function(msg) { message = msg; return false } $('button[data-confirm]') .bindNative('confirm:complete', function(e, data) { App.assertCallbackInvoked('confirm:complete') ok(data == false, 'confirm:complete passes in confirm answer (false)') }) .bindNative('ajax:beforeSend', function(e, data, status, xhr) { App.assertCallbackNotInvoked('ajax:beforeSend') }) .triggerNative('click') setTimeout(function() { equal(message, 'Are you absolutely sure?') start() }, 50)
})
asyncTest('clicking on a button with data-confirm attribute. Confirm error.', 3, function() {
var message // auto-decline: window.confirm = function(msg) { message = msg; throw 'some random error' } $('button[data-confirm]') .bindNative('confirm:complete', function(e, data) { App.assertCallbackInvoked('confirm:complete') ok(data == false, 'confirm:complete passes in confirm answer (false)') }) .bindNative('ajax:beforeSend', function(e, data, status, xhr) { App.assertCallbackNotInvoked('ajax:beforeSend') }) .triggerNative('click') setTimeout(function() { equal(message, 'Are you absolutely sure?') start() }, 50)
})
asyncTest('clicking on a submit button with form and data-confirm attributes. Confirm No.', 3, function() {
var message // auto-decline: window.confirm = function(msg) { message = msg; return false } $('input[type=submit][form]') .bindNative('confirm:complete', function(e, data) { App.assertCallbackInvoked('confirm:complete') ok(data == false, 'confirm:complete passes in confirm answer (false)') }) .bindNative('ajax:beforeSend', function(e, data, status, xhr) { App.assertCallbackNotInvoked('ajax:beforeSend') }) .triggerNative('click') setTimeout(function() { equal(message, 'Are you absolutely sure?') start() }, 50)
})
asyncTest('binding to confirm event of a link and returning false', 1, function() {
// redefine confirm function so we can make sure it's not called window.confirm = function(msg) { ok(false, 'confirm dialog should not be called') } $('a[data-confirm]') .bindNative('confirm', function() { App.assertCallbackInvoked('confirm') return false }) .bindNative('confirm:complete', function() { App.assertCallbackNotInvoked('confirm:complete') }) .triggerNative('click') setTimeout(function() { start() }, 50)
})
asyncTest('binding to confirm event of a button and returning false', 1, function() {
// redefine confirm function so we can make sure it's not called window.confirm = function(msg) { ok(false, 'confirm dialog should not be called') } $('button[data-confirm]') .bindNative('confirm', function() { App.assertCallbackInvoked('confirm') return false }) .bindNative('confirm:complete', function() { App.assertCallbackNotInvoked('confirm:complete') }) .triggerNative('click') setTimeout(function() { start() }, 50)
})
asyncTest('binding to confirm:complete event of a link and returning false', 2, function() {
// auto-confirm: window.confirm = function(msg) { ok(true, 'confirm dialog should be called') return true } $('a[data-confirm]') .bindNative('confirm:complete', function() { App.assertCallbackInvoked('confirm:complete') return false }) .bindNative('ajax:beforeSend', function() { App.assertCallbackNotInvoked('ajax:beforeSend') }) .triggerNative('click') setTimeout(function() { start() }, 50)
})
asyncTest('binding to confirm:complete event of a button and returning false', 2, function() {
// auto-confirm: window.confirm = function(msg) { ok(true, 'confirm dialog should be called') return true } $('button[data-confirm]') .bindNative('confirm:complete', function() { App.assertCallbackInvoked('confirm:complete') return false }) .bindNative('ajax:beforeSend', function() { App.assertCallbackNotInvoked('ajax:beforeSend') }) .triggerNative('click') setTimeout(function() { start() }, 50)
})
asyncTest('a button inside a form only confirms once', 1, function() {
var confirmations = 0 window.confirm = function(msg) { confirmations++ return true } $('#qunit-fixture').append($('<form />').append($('<button />', { 'data-remote': 'true', 'data-confirm': 'Are you absolutely sure?', text: 'Click me' }))) $('form > button[data-confirm]').triggerNative('click') ok(confirmations === 1, 'confirmation counter should be 1, but it was ' + confirmations) start()
})
asyncTest('clicking on the children of a link should also trigger a confirm', 6, function() {
var message // auto-confirm: window.confirm = function(msg) { message = msg; return true } $('a[data-confirm]') .html('<strong>Click me</strong>') .bindNative('confirm:complete', function(e, data) { App.assertCallbackInvoked('confirm:complete') ok(data == true, 'confirm:complete passes in confirm answer (true)') }) .bindNative('ajax:success', function(e, data, status, xhr) { App.assertCallbackInvoked('ajax:success') App.assertRequestPath(data, '/echo') App.assertGetRequest(data) equal(message, 'Are you absolutely sure?') start() }) .find('strong') .triggerNative('click')
})
asyncTest('clicking on the children of a disabled button should not trigger a confirm.', 1, function() {
var message // auto-decline: window.confirm = function(msg) { message = msg; return false } $('button[data-confirm][disabled]') .html('<strong>Click me</strong>') .bindNative('confirm', function() { App.assertCallbackNotInvoked('confirm') }) .find('strong') .bindNative('click', function() { App.assertCallbackInvoked('click') }) .triggerNative('click') setTimeout(function() { start() }, 50)
})