discourse/test/javascripts/helpers/qunit-helpers.js.es6

200 lines
4.7 KiB
Plaintext
Raw Normal View History

/* global QUnit, resetSite */
2018-06-15 23:03:24 +08:00
import sessionFixtures from "fixtures/session-fixtures";
import HeaderComponent from "discourse/components/site-header";
import { forceMobile, resetMobile } from "discourse/lib/mobile";
import { resetPluginApi } from "discourse/lib/plugin-api";
import {
clearCache as clearOutletCache,
resetExtraClasses
} from "discourse/lib/plugin-connectors";
import { clearHTMLCache } from "discourse/helpers/custom-html";
import { flushMap } from "discourse/models/store";
import { clearRewrites } from "discourse/lib/url";
import { initSearchData } from "discourse/widgets/search-menu";
import { resetDecorators } from "discourse/widgets/widget";
import { resetCache as resetOneboxCache } from "pretty-text/oneboxer";
2018-06-15 23:03:24 +08:00
import { resetCustomPostMessageCallbacks } from "discourse/controllers/topic";
export function currentUser() {
2018-06-15 23:03:24 +08:00
return Discourse.User.create(
sessionFixtures["/session/current.json"].current_user
);
}
export function replaceCurrentUser(properties) {
const user = Discourse.User.current();
user.setProperties(properties);
Discourse.User.resetCurrent(user);
}
export function logIn() {
Discourse.User.resetCurrent(currentUser());
}
const Plugin = $.fn.modal;
const Modal = Plugin.Constructor;
function AcceptanceModal(option, _relatedTarget) {
2018-06-15 23:03:24 +08:00
return this.each(function() {
var $this = $(this);
var data = $this.data("bs.modal");
var options = $.extend(
{},
Modal.DEFAULTS,
$this.data(),
typeof option === "object" && option
);
if (!data) $this.data("bs.modal", (data = new Modal(this, options)));
data.$body = $("#ember-testing");
if (typeof option === "string") data[option](_relatedTarget);
else if (options.show) data.show(_relatedTarget);
});
}
2018-06-15 23:03:24 +08:00
window.bootbox.$body = $("#ember-testing");
$.fn.modal = AcceptanceModal;
let _pretenderCallbacks = [];
export function applyPretender(server, helper) {
_pretenderCallbacks.forEach(cb => cb(server, helper));
}
export function acceptance(name, options) {
options = options || {};
if (options.pretend) {
_pretenderCallbacks.push(options.pretend);
}
2017-07-06 02:14:30 +08:00
QUnit.module("Acceptance: " + name, {
2017-06-15 01:57:58 +08:00
beforeEach() {
resetMobile();
// For now don't do scrolling stuff in Test Mode
2018-06-15 23:03:24 +08:00
HeaderComponent.reopen({ examineDockHeader: function() {} });
resetExtraClasses();
if (options.beforeEach) {
options.beforeEach.call(this);
}
if (options.mobileView) {
forceMobile();
}
if (options.loggedIn) {
logIn();
}
if (options.settings) {
2018-06-15 23:03:24 +08:00
Discourse.SiteSettings = jQuery.extend(
true,
Discourse.SiteSettings,
options.settings
);
}
if (options.site) {
resetSite(Discourse.SiteSettings, options.site);
}
2016-11-24 01:57:50 +08:00
clearOutletCache();
clearHTMLCache();
2016-11-23 23:41:21 +08:00
resetPluginApi();
2014-07-31 06:56:01 +08:00
Discourse.reset();
2013-06-21 01:58:54 +08:00
},
2017-06-15 01:57:58 +08:00
afterEach() {
if (options && options.afterEach) {
options.afterEach.call(this);
}
flushMap();
2017-11-03 06:38:51 +08:00
localStorage.clear();
2015-05-01 04:04:58 +08:00
Discourse.User.resetCurrent();
resetSite(Discourse.SiteSettings);
resetExtraClasses();
2016-11-24 01:57:50 +08:00
clearOutletCache();
clearHTMLCache();
2016-11-23 04:36:18 +08:00
resetPluginApi();
clearRewrites();
initSearchData();
resetDecorators();
resetOneboxCache();
resetCustomPostMessageCallbacks();
2013-06-21 01:58:54 +08:00
Discourse.reset();
}
});
}
export function controllerFor(controller, model) {
2018-06-15 23:03:24 +08:00
controller = Discourse.__container__.lookup("controller:" + controller);
if (model) {
controller.set("model", model);
}
return controller;
2013-07-16 07:47:13 +08:00
}
export function asyncTestDiscourse(text, func) {
2017-06-15 01:57:58 +08:00
QUnit.test(text, function(assert) {
const done = assert.async();
Ember.run(() => {
func.call(this, assert);
done();
2013-07-16 07:47:13 +08:00
});
});
}
export function fixture(selector) {
if (selector) {
return $("#qunit-fixture").find(selector);
}
return $("#qunit-fixture");
}
2015-02-07 02:25:48 +08:00
2017-06-15 01:57:58 +08:00
QUnit.assert.not = function(actual, message) {
this.pushResult({
result: !actual,
actual,
expected: !actual,
message
});
};
2017-06-15 01:57:58 +08:00
QUnit.assert.blank = function(actual, message) {
this.pushResult({
result: Ember.isEmpty(actual),
actual,
message
});
};
2017-06-15 01:57:58 +08:00
QUnit.assert.present = function(actual, message) {
this.pushResult({
result: !Ember.isEmpty(actual),
actual,
message
});
};
QUnit.assert.containsInstance = function(collection, klass, message) {
const result = klass.detectInstance(_.first(collection));
this.pushResult({
result,
message
});
};
export function waitFor(assert, callback, timeout) {
timeout = timeout || 500;
2017-06-15 01:57:58 +08:00
const done = assert.async();
Ember.run.later(() => {
callback();
2017-06-15 01:57:58 +08:00
done();
}, timeout);
}