243 lines
8.9 KiB
JavaScript

$(function () {
var dpg, f = 'dd.mm.yyyy', mode;
module("date", {
setup: function(){
fx = $('#async-fixture');
dpg = $.fn.bdatepicker.DPGlobal;
$.support.transition = false;
mode = $.fn.editable.defaults.mode;
$.fn.editable.defaults.mode = 'popup';
},
teardown: function() {
//restore mode
$.fn.editable.defaults.mode = mode;
}
});
function frmt(date, format) {
return dpg.formatDate(date, dpg.parseFormat(format), 'en');
}
asyncTest("container should contain datepicker with value and save new entered date", function () {
$.fn.editabletypes.date.defaults.datepicker.weekStart = 1;
var d = '15.05.1984',
e = $('<a href="#" data-type="date" data-pk="1" data-url="post-date.php">'+d+'</a>').appendTo(fx).editable({
format: f,
datepicker: {
}
}),
nextD = '16.05.1984';
$.mockjax({
url: 'post-date.php',
response: function(settings) {
equal(settings.data.value, nextD, 'submitted value correct');
}
});
//testing func, run twice!
var func = function() {
var df = $.Deferred();
equal(frmt(e.data('editable').value, 'dd.mm.yyyy'), d, 'value correct');
e.click();
var p = tip(e);
ok(p.find('.datepicker').is(':visible'), 'datepicker exists');
equal(p.find('.datepicker').length, 1, 'datepicker single');
ok(p.find('.datepicker').find('.datepicker-days').is(':visible'), 'datepicker days visible');
equal(frmt(e.data('editable').value, f), d, 'day set correct');
ok(p.find('td.day.active').is(':visible'), 'active day is visible');
equal(p.find('td.day.active').text(), 15, 'day shown correct');
equal(p.find('th.dow').eq(0).text(), 'Mo', 'weekStart correct');
//set new day
p.find('td.day.active').next().click();
p.find('form').submit();
setTimeout(function() {
ok(!p.is(':visible'), 'popover closed');
equal(frmt(e.data('editable').value, f), nextD, 'new date saved to value');
equal(e.text(), nextD, 'new text shown');
df.resolve();
}, timeout);
return df.promise();
};
$.when(func()).then(function() {
e.editable('setValue', d, true);
$.when(func()).then(function() {
e.remove();
start();
});
});
});
asyncTest("viewformat, init by text", function () {
$.fn.editabletypes.date.defaults.datepicker.weekStart = 1;
var dview = '15/05/1984',
d = '1984-05-15',
e = $('<a href="#" data-type="date" data-pk="1" data-url="post-date1.php">'+dview+'</a>').appendTo(fx).editable({
format: 'yyyy-mm-dd',
viewformat: 'dd/mm/yyyy',
datepicker: {
}
}),
nextD = '1984-05-16',
nextDview = '16/05/1984';
equal(frmt(e.data('editable').value, 'yyyy-mm-dd'), d, 'value correct');
$.mockjax({
url: 'post-date1.php',
response: function(settings) {
equal(settings.data.value, nextD, 'submitted value correct');
}
});
e.click();
var p = tip(e);
ok(p.find('.datepicker').is(':visible'), 'datepicker exists');
equal(frmt(e.data('editable').value, 'yyyy-mm-dd'), d, 'day set correct');
equal(p.find('td.day.active').text(), 15, 'day shown correct');
equal(p.find('th.dow').eq(0).text(), 'Mo', 'weekStart correct');
//set new day
p.find('td.day.active').next().click();
p.find('form').submit();
setTimeout(function() {
ok(!p.is(':visible'), 'popover closed')
equal(frmt(e.data('editable').value, 'yyyy-mm-dd'), nextD, 'new date saved to value')
equal(e.text(), nextDview, 'new text shown in correct format')
e.remove();
start();
}, timeout);
});
test("viewformat, init by value", function () {
var dview = '15/05/1984',
d = '1984-05-15',
e = $('<a href="#" data-type="date" data-pk="1" data-format="yyyy-mm-dd" data-viewformat="dd/mm/yyyy" data-value="'+d+'"></a>').appendTo('#qunit-fixture').editable();
equal(frmt(e.data('editable').value, 'yyyy-mm-dd'), d, 'value correct');
equal(e.text(), dview, 'text correct');
});
test("datepicker options can be defined in data-datepicker string", function () {
var e = $('<a href="#" data-type="date" data-datepicker="{weekStart: 2}" data-pk="1" data-url="/post"></a>').appendTo('#qunit-fixture').editable({
});
equal(e.data('editable').input.options.datepicker.weekStart, 2, 'options applied correct');
});
test("input should contain today if element is empty", function () {
var e = $('<a href="#" data-type="date"></a>').appendTo('#qunit-fixture').editable();
e.click();
var p = tip(e),
today = new Date();
equal(p.find('td.day.active').text(), today.getDate(), 'day shown correct');
p.find('.editable-cancel').click();
ok(!p.is(':visible'), 'popover closed');
});
asyncTest("clear button (showbuttons: true)", function () {
var d = '15.05.1984',
e = $('<a href="#" data-type="date" data-pk="1" data-url="post-date-clear.php">'+d+'</a>').appendTo(fx).editable({
format: f,
clear: 'abc',
showbuttons: true
});
$.mockjax({
url: 'post-date-clear.php',
response: function(settings) {
equal(settings.data.value, '', 'submitted value correct');
}
});
equal(frmt(e.data('editable').value, 'dd.mm.yyyy'), d, 'value correct');
e.click();
var p = tip(e);
ok(p.find('.datepicker').is(':visible'), 'datepicker exists');
equal(frmt(e.data('editable').value, f), d, 'day set correct');
equal(p.find('td.day.active').text(), 15, 'day shown correct');
var clear = p.find('.editable-clear a');
equal(clear.text(), 'abc', 'clear link shown');
//click clear
clear.click();
ok(!p.find('td.day.active').length, 'no active day');
ok(p.find('.datepicker').is(':visible'), 'datepicker still visible');
p.find('form').submit();
setTimeout(function() {
ok(!p.is(':visible'), 'popover closed');
equal(e.data('editable').value, null, 'null saved to value');
equal(e.text(), e.data('editable').options.emptytext, 'empty text shown');
e.remove();
start();
}, timeout);
});
asyncTest("clear button (showbuttons: false)", function () {
var d = '15.05.1984',
e = $('<a href="#" data-type="date" data-pk="1" data-url="post-date-clear1.php">'+d+'</a>').appendTo(fx).editable({
format: f,
clear: 'abc',
showbuttons: false
});
$.mockjax({
url: 'post-date-clear1.php',
response: function(settings) {
equal(settings.data.value, '', 'submitted value correct');
}
});
equal(frmt(e.data('editable').value, 'dd.mm.yyyy'), d, 'value correct');
e.click();
var p = tip(e);
ok(p.find('.datepicker').is(':visible'), 'datepicker exists');
equal(frmt(e.data('editable').value, f), d, 'day set correct');
equal(p.find('td.day.active').text(), 15, 'day shown correct');
var clear = p.find('.editable-clear a');
equal(clear.text(), 'abc', 'clear link shown');
//click clear
clear.click();
setTimeout(function() {
ok(!p.is(':visible'), 'popover closed');
equal(e.data('editable').value, null, 'null saved to value');
equal(e.text(), e.data('editable').options.emptytext, 'empty text shown');
e.remove();
start();
}, timeout);
});
});