diff --git a/test/main.js b/test/main.js index 30c4bf3..775112b 100644 --- a/test/main.js +++ b/test/main.js @@ -1,3 +1,8 @@ +/* +Loads all required files. +Calls loader.js to get x-editable files with dependencies. +*/ + //detect version of jquery from url param, e.g. 'jquery=1.7.2' var jqver = decodeURIComponent((new RegExp('[?|&]' + 'jquery' + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null; jqurl = jqver ? "http://code.jquery.com/jquery-"+jqver+".min.js" : "libs/jquery/jquery-1.9.1.min.js"; @@ -33,6 +38,7 @@ require(["loader", jqurl], function(loader) { case 'bootstrap': custom = ['test/unit/datefield', 'test/unit/date', + 'test/unit/datetime', 'test/unit/wysihtml5', 'test/unit/typeahead' ]; diff --git a/test/unit/datetime.js b/test/unit/datetime.js new file mode 100644 index 0000000..2b86f87 --- /dev/null +++ b/test/unit/datetime.js @@ -0,0 +1,213 @@ +$(function () { + + var dpg, f = 'dd.mm.yyyy hh:ii', mode; + + module("datetime", { + setup: function(){ + fx = $('#async-fixture'); + dpg = $.fn.datetimepicker.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) { + //convert to utc + date = $.fn.editabletypes.datetime.prototype.toUTC(date); + return dpg.formatDate(date, dpg.parseFormat(format, 'standard'), 'en', 'standard'); + } + + asyncTest("container should contain datetimepicker with value and save new entered date", function () { + $.fn.editabletypes.datetime.defaults.datetimepicker.weekStart = 1; + + var d = '15.05.1984 20:30', + e = $('<a href="#" data-type="datetime" data-pk="1" data-url="post-datetime">'+d+'</a>').appendTo(fx).editable({ + format: f, + datetimepicker: { + + } + }), + nextD = '16.05.1984 21:35'; + + $.mockjax({ + url: 'post-datetime', + 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 hh:ii'), d, 'value correct'); + + e.click(); + var p = tip(e); + ok(p.find('.datetimepicker').is(':visible'), 'datetimepicker exists'); + equal(p.find('.datetimepicker').length, 1, 'datetimepicker single'); + ok(p.find('.datetimepicker').find('.datetimepicker-days').is(':visible'), 'datetimepicker 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('.day.active').next().click(); + + //hours appeared? + ok(p.find('.datetimepicker-hours').is(':visible'), 'datetimepicker hours visible'); + //set hours 21 + p.find('.hour.active').next().click(); + + //minutes appeared? + ok(p.find('.datetimepicker-minutes').is(':visible'), 'datetimepicker minutes visible'); + //set minutes 21:35 + p.find('.minute.active').next().click(); + + //submit + 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.datetime.defaults.datetimepicker.weekStart = 1; + + var dview = '15/05/1984 11:50', + d = '1984-05-15 11:50', + e = $('<a href="#" data-type="datetime" data-pk="1" data-url="post-datetime1">'+dview+'</a>').appendTo(fx).editable({ + format: 'yyyy-mm-dd hh:ii', + viewformat: 'dd/mm/yyyy hh:ii', + datetimepicker: { + + } + }), + nextD = '1984-05-16 11:50', + nextDview = '16/05/1984 11:50'; + + equal(frmt(e.data('editable').value, 'yyyy-mm-dd hh:ii'), d, 'value correct'); + + $.mockjax({ + url: 'post-datetime1', + response: function(settings) { + equal(settings.data.value, nextD, 'submitted value correct'); + } + }); + + e.click(); + var p = tip(e); + ok(p.find('.datetimepicker').is(':visible'), 'datetimepicker exists'); + + equal(frmt(e.data('editable').value, 'yyyy-mm-dd hh:ii'), 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 hh:ii'), 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 15:45', + d = '1984-05-15 15:45', + e = $('<a href="#" data-type="datetime" data-pk="1" data-format="yyyy-mm-dd hh:ii" data-viewformat="dd/mm/yyyy hh:ii" data-value="'+d+'"></a>').appendTo('#qunit-fixture').editable(); + + equal(frmt(e.data('editable').value, 'yyyy-mm-dd hh:ii'), d, 'value correct'); + equal(e.text(), dview, 'text correct'); + }); + + + test("input should contain today if element is empty", function () { + var e = $('<a href="#" data-type="datetime"></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", function () { + var d = '15.05.1984 16:40', + e = $('<a href="#" data-type="datetime" data-pk="1" data-url="post-datetime-clear.php">'+d+'</a>').appendTo(fx).editable({ + format: f, + clear: 'abc' + }); + + $.mockjax({ + url: 'post-datetime-clear.php', + response: function(settings) { + equal(settings.data.value, '', 'submitted value correct'); + } + }); + + equal(frmt(e.data('editable').value, 'dd.mm.yyyy hh:ii'), d, 'value correct'); + + e.click(); + var p = tip(e); + ok(p.find('.datetimepicker').is(':visible'), 'datetimepicker 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'); + + 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'); + + //reopen popover + e.click(); + p = tip(e); + ok(p.find('.datetimepicker').is(':visible'), 'datetimepicker exists'); + + e.remove(); + start(); + }, timeout); + + }); + +}); \ No newline at end of file