2017-11-01 14:08:18 -05:00
|
|
|
/* global QUnit, resetSite */
|
2014-09-26 13:48:34 -05:00
|
|
|
|
2018-06-15 10:03:24 -05: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";
|
2018-11-27 02:00:31 -06:00
|
|
|
import { resetCache as resetOneboxCache } from "pretty-text/oneboxer";
|
2018-06-15 10:03:24 -05:00
|
|
|
import { resetCustomPostMessageCallbacks } from "discourse/controllers/topic";
|
2016-12-19 10:19:10 -06:00
|
|
|
|
2017-09-13 10:54:49 -05:00
|
|
|
export function currentUser() {
|
2018-06-15 10:03:24 -05:00
|
|
|
return Discourse.User.create(
|
|
|
|
sessionFixtures["/session/current.json"].current_user
|
|
|
|
);
|
2015-04-01 13:18:46 -05:00
|
|
|
}
|
|
|
|
|
2018-04-05 22:36:57 -05:00
|
|
|
export function replaceCurrentUser(properties) {
|
|
|
|
const user = Discourse.User.current();
|
|
|
|
user.setProperties(properties);
|
|
|
|
Discourse.User.resetCurrent(user);
|
|
|
|
}
|
|
|
|
|
2017-09-13 10:54:49 -05:00
|
|
|
export function logIn() {
|
2015-04-01 13:18:46 -05:00
|
|
|
Discourse.User.resetCurrent(currentUser());
|
|
|
|
}
|
|
|
|
|
|
|
|
const Plugin = $.fn.modal;
|
|
|
|
const Modal = Plugin.Constructor;
|
|
|
|
|
|
|
|
function AcceptanceModal(option, _relatedTarget) {
|
2018-06-15 10:03:24 -05: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);
|
2015-04-01 13:18:46 -05:00
|
|
|
else if (options.show) data.show(_relatedTarget);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-06-15 10:03:24 -05:00
|
|
|
window.bootbox.$body = $("#ember-testing");
|
2015-04-01 13:18:46 -05:00
|
|
|
$.fn.modal = AcceptanceModal;
|
|
|
|
|
2017-09-13 10:54:49 -05:00
|
|
|
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-05 13:14:30 -05:00
|
|
|
QUnit.module("Acceptance: " + name, {
|
2017-06-14 12:57:58 -05:00
|
|
|
beforeEach() {
|
2016-05-05 11:49:12 -05:00
|
|
|
resetMobile();
|
|
|
|
|
2015-04-01 13:18:46 -05:00
|
|
|
// For now don't do scrolling stuff in Test Mode
|
2018-06-15 10:03:24 -05:00
|
|
|
HeaderComponent.reopen({ examineDockHeader: function() {} });
|
2015-04-01 13:18:46 -05:00
|
|
|
|
2016-12-19 10:19:10 -06:00
|
|
|
resetExtraClasses();
|
2017-09-13 10:54:49 -05:00
|
|
|
if (options.beforeEach) {
|
|
|
|
options.beforeEach.call(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (options.mobileView) {
|
|
|
|
forceMobile();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (options.loggedIn) {
|
|
|
|
logIn();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (options.settings) {
|
2018-06-15 10:03:24 -05:00
|
|
|
Discourse.SiteSettings = jQuery.extend(
|
|
|
|
true,
|
|
|
|
Discourse.SiteSettings,
|
|
|
|
options.settings
|
|
|
|
);
|
2017-09-13 10:54:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
if (options.site) {
|
2017-11-01 14:08:18 -05:00
|
|
|
resetSite(Discourse.SiteSettings, options.site);
|
2014-07-31 12:24:07 -05:00
|
|
|
}
|
2014-09-26 13:48:34 -05:00
|
|
|
|
2016-11-23 11:57:50 -06:00
|
|
|
clearOutletCache();
|
|
|
|
clearHTMLCache();
|
2016-11-23 09:41:21 -06:00
|
|
|
resetPluginApi();
|
2014-07-30 17:56:01 -05:00
|
|
|
Discourse.reset();
|
2013-06-20 12:58:54 -05:00
|
|
|
},
|
|
|
|
|
2017-06-14 12:57:58 -05:00
|
|
|
afterEach() {
|
|
|
|
if (options && options.afterEach) {
|
|
|
|
options.afterEach.call(this);
|
2013-11-05 10:42:37 -06:00
|
|
|
}
|
2016-12-19 10:19:10 -06:00
|
|
|
flushMap();
|
2017-11-02 17:38:51 -05:00
|
|
|
localStorage.clear();
|
2015-04-30 15:04:58 -05:00
|
|
|
Discourse.User.resetCurrent();
|
2017-11-01 14:08:18 -05:00
|
|
|
resetSite(Discourse.SiteSettings);
|
2016-12-19 10:19:10 -06:00
|
|
|
resetExtraClasses();
|
2016-11-23 11:57:50 -06:00
|
|
|
clearOutletCache();
|
|
|
|
clearHTMLCache();
|
2016-11-22 14:36:18 -06:00
|
|
|
resetPluginApi();
|
2017-03-27 14:34:54 -05:00
|
|
|
clearRewrites();
|
2017-12-19 21:04:23 -06:00
|
|
|
initSearchData();
|
2018-03-12 06:46:41 -05:00
|
|
|
resetDecorators();
|
2018-11-27 02:00:31 -06:00
|
|
|
resetOneboxCache();
|
2018-05-24 00:28:54 -05:00
|
|
|
resetCustomPostMessageCallbacks();
|
2013-06-20 12:58:54 -05:00
|
|
|
Discourse.reset();
|
|
|
|
}
|
|
|
|
});
|
2013-06-20 16:20:08 -05:00
|
|
|
}
|
|
|
|
|
2017-09-13 10:54:49 -05:00
|
|
|
export function controllerFor(controller, model) {
|
2018-06-15 10:03:24 -05:00
|
|
|
controller = Discourse.__container__.lookup("controller:" + controller);
|
|
|
|
if (model) {
|
|
|
|
controller.set("model", model);
|
|
|
|
}
|
2013-06-20 16:20:08 -05:00
|
|
|
return controller;
|
2013-07-15 18:47:13 -05:00
|
|
|
}
|
|
|
|
|
2017-09-13 10:54:49 -05:00
|
|
|
export function asyncTestDiscourse(text, func) {
|
2017-06-14 12:57:58 -05:00
|
|
|
QUnit.test(text, function(assert) {
|
|
|
|
const done = assert.async();
|
|
|
|
Ember.run(() => {
|
|
|
|
func.call(this, assert);
|
|
|
|
done();
|
2013-07-15 18:47:13 -05:00
|
|
|
});
|
|
|
|
});
|
2013-11-07 12:46:38 -06:00
|
|
|
}
|
|
|
|
|
2017-09-13 10:54:49 -05:00
|
|
|
export function fixture(selector) {
|
2013-11-07 12:46:38 -06:00
|
|
|
if (selector) {
|
|
|
|
return $("#qunit-fixture").find(selector);
|
|
|
|
}
|
|
|
|
return $("#qunit-fixture");
|
|
|
|
}
|
2015-02-06 12:25:48 -06:00
|
|
|
|
2017-06-14 12:57:58 -05:00
|
|
|
QUnit.assert.not = function(actual, message) {
|
|
|
|
this.pushResult({
|
|
|
|
result: !actual,
|
|
|
|
actual,
|
|
|
|
expected: !actual,
|
|
|
|
message
|
|
|
|
});
|
|
|
|
};
|
2015-08-11 11:27:07 -05:00
|
|
|
|
2017-06-14 12:57:58 -05:00
|
|
|
QUnit.assert.blank = function(actual, message) {
|
|
|
|
this.pushResult({
|
|
|
|
result: Ember.isEmpty(actual),
|
|
|
|
actual,
|
|
|
|
message
|
|
|
|
});
|
|
|
|
};
|
2015-08-11 11:27:07 -05:00
|
|
|
|
2017-06-14 12:57:58 -05: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
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2017-09-13 10:54:49 -05:00
|
|
|
export function waitFor(assert, callback, timeout) {
|
2016-10-06 14:18:05 -05:00
|
|
|
timeout = timeout || 500;
|
2017-06-14 12:57:58 -05:00
|
|
|
|
|
|
|
const done = assert.async();
|
2016-10-06 14:18:05 -05:00
|
|
|
Ember.run.later(() => {
|
|
|
|
callback();
|
2017-06-14 12:57:58 -05:00
|
|
|
done();
|
2016-10-06 14:18:05 -05:00
|
|
|
}, timeout);
|
|
|
|
}
|