Moved Formatter, KeyValueStore and Onebox jasmine tests to QUnit.

This commit is contained in:
Robin Ward
2013-06-18 16:27:40 -04:00
parent 8af9952b25
commit f0ebca51cc
9 changed files with 4545 additions and 178 deletions

View File

@@ -0,0 +1,121 @@
/*global module:true test:true ok:true visit:true equal:true exists:true count:true equal:true present:true md5:true */
module("Discourse.Formatter");
var format = "tiny";
var leaveAgo = false;
var mins_ago = function(mins){
return new Date((new Date()) - mins * 60 * 1000);
};
var formatMins = function(mins) {
return Discourse.Formatter.relativeAge(mins_ago(mins), {format: format, leaveAgo: leaveAgo});
};
var formatHours = function(hours) {
return formatMins(hours * 60);
};
var formatDays = function(days) {
return formatHours(days * 24);
};
var formatMonths = function(months) {
return formatDays(months * 30);
};
test("formating medium length dates", function() {
format = "medium";
var strip = function(html){
return $(html).text();
}
var shortDate = function(days){
return moment().subtract('days', days).format('D MMM');
}
var shortDateYear = function(days){
return moment().subtract('days', days).format('D MMM, YYYY');
}
leaveAgo = true;
equal(strip(formatMins(1.4)), "1 minute ago");
equal(strip(formatMins(2)), "2 minutes ago");
equal(strip(formatMins(56)), "56 minutes ago");
equal(strip(formatMins(57)), "1 hour ago");
equal(strip(formatHours(4)), "4 hours ago");
equal(strip(formatHours(22)), "22 hours ago");
equal(strip(formatHours(23)), "1 day ago");
equal(strip(formatDays(4.85)), "4 days ago");
leaveAgo = false;
equal(strip(formatMins(0)), "just now");
equal(strip(formatMins(1.4)), "1 minute");
equal(strip(formatMins(2)), "2 minutes");
equal(strip(formatMins(56)), "56 minutes");
equal(strip(formatMins(57)), "1 hour");
equal(strip(formatHours(4)), "4 hours");
equal(strip(formatHours(22)), "22 hours");
equal(strip(formatHours(23)), "1 day");
equal(strip(formatDays(4.85)), "4 days");
equal(strip(formatDays(6)), shortDate(6));
equal(strip(formatDays(100)), shortDate(100)); // eg: 23 Jan
equal(strip(formatDays(500)), shortDateYear(500));
equal($(formatDays(0)).attr("title"), moment().format('MMMM D, YYYY h:mma'));
equal($(formatDays(0)).attr("class"), "date");
});
test("formating tiny dates", function() {
format = "tiny";
equal(formatMins(0), "< 1m");
equal(formatMins(2), "2m");
equal(formatMins(60), "1h");
equal(formatHours(4), "4h");
equal(formatDays(1), "1d");
equal(formatDays(20), "20d");
equal(formatMonths(3), "3mon");
equal(formatMonths(23), "23mon");
equal(formatMonths(24), "> 2y");
});
test("autoUpdatingRelativeAge", function() {
var d = moment().subtract('days',1).toDate();
var $elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d));
equal($elem.data('format'), "tiny");
equal($elem.data('time'), d.getTime());
$elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d,{format: 'medium', leaveAgo: true}));
equal($elem.data('format'), "medium-with-ago");
equal($elem.data('time'), d.getTime());
equal($elem.attr('title'), moment(d).longDate());
equal($elem.html(), '1 day ago');
$elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d,{format: 'medium'}));
equal($elem.data('format'), "medium");
equal($elem.data('time'), d.getTime());
equal($elem.html(), '1 day');
});
test("updateRelativeAge", function(){
var d = new Date();
var $elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d));
$elem.data('time', d.getTime() - 2 * 60 * 1000);
Discourse.Formatter.updateRelativeAge($elem);
equal($elem.html(), "2m");
d = new Date();
$elem = $(Discourse.Formatter.autoUpdatingRelativeAge(d, {format: 'medium', leaveAgo: true}));
$elem.data('time', d.getTime() - 2 * 60 * 1000);
Discourse.Formatter.updateRelativeAge($elem);
equal($elem.html(), "2 minutes ago");
});

View File

@@ -0,0 +1,22 @@
/*global module:true test:true ok:true visit:true equal:true exists:true count:true equal:true present:true md5:true */
var store = Discourse.KeyValueStore;
module("Discourse.KeyValueStore", {
setup: function() {
store.init("test");
}
});
test("it's able to get the result back from the store", function() {
store.set({ key: "bob", value: "uncle" });
equal(store.get("bob"), "uncle");
});
test("is able to nuke the store", function() {
store.set({ key: "bob1", value: "uncle" });
store.abandonLocal();
localStorage.a = 1;
equal(store.get("bob1"), void 0);
equal(localStorage.a, "1");
});

View File

@@ -0,0 +1,22 @@
/*global module:true test:true ok:true visit:true equal:true exists:true count:true equal:true present:true md5:true resolvingPromise:true */
module("Discourse.Onebox", {
setup: function() {
this.anchor = $("<a href='http://bla.com'></a>")[0];
}
});
test("Stops rapid calls with cache true", function() {
this.stub(Discourse, "ajax").returns(resolvingPromise);
Discourse.Onebox.load(this.anchor, true);
Discourse.Onebox.load(this.anchor, true);
ok(Discourse.ajax.calledOnce);
});
test("Stops rapid calls with cache false", function() {
this.stub(Discourse, "ajax").returns(resolvingPromise);
Discourse.Onebox.load(this.anchor, false);
Discourse.Onebox.load(this.anchor, false);
ok(Discourse.ajax.calledOnce);
});

View File

@@ -1,5 +1,5 @@
/*jshint maxlen:250 */
/*global count:true find:true document:true equal:true */
/*global count:true find:true document:true equal:true sinon:true */
//= require env
@@ -19,7 +19,7 @@
//= require ../../app/assets/javascripts/locales/date_locales.js
//= require ../../app/assets/javascripts/discourse/helpers/i18n_helpers
//= require ../../app/assets/javascripts/locales/en
//
// Pagedown customizations
//= require ../../app/assets/javascripts/pagedown_custom.js
@@ -32,11 +32,24 @@
//= require_tree ../../app/assets/javascripts/defer
//= require main_include
//= require sinon-1.7.1.js
//= require sinon-qunit-1.0.0.js
//= require_tree .
//= require_self
//= require_tree ./fixtures
// sinon settings
sinon.config = {
injectIntoThis: true,
injectInto: null,
properties: ["spy", "stub", "mock", "clock", "sandbox"],
useFakeTimers: false,
useFakeServer: false
};
// Trick JSHint into allow document.write
var d = document;
d.write('<div id="ember-testing-container"><div id="ember-testing"></div></div>');
@@ -51,6 +64,11 @@ Discourse.Router.map(function() {
return Discourse.routeBuilder.call(this);
});
// Test helpers
var resolvingPromise = Ember.Deferred.promise(function (p) {
p.resolve();
})
function exists(selector) {
return !!count(selector);
}