2020-03-27 00:33:29 +08:00
|
|
|
// discourse-skip-module
|
|
|
|
|
2014-08-01 02:51:10 +08:00
|
|
|
/*global document, sinon, QUnit, Logster */
|
2013-06-12 23:56:59 +08:00
|
|
|
//= require env
|
2015-04-30 02:57:08 +08:00
|
|
|
//= require jquery.debug
|
2014-08-01 02:51:10 +08:00
|
|
|
//= require jquery.ui.widget
|
2015-08-12 05:34:02 +08:00
|
|
|
//= require ember.debug
|
2014-08-01 02:51:10 +08:00
|
|
|
//= require message-bus
|
2018-09-11 15:07:28 +08:00
|
|
|
//= require qunit/qunit/qunit
|
2014-08-01 02:51:10 +08:00
|
|
|
//= require ember-qunit
|
|
|
|
//= require fake_xml_http_request
|
2018-10-04 23:06:14 +08:00
|
|
|
//= require route-recognizer/dist/route-recognizer
|
2018-09-07 16:01:20 +08:00
|
|
|
//= require pretender/pretender
|
2016-04-18 10:47:52 +08:00
|
|
|
//= require locales/i18n
|
2019-05-16 05:43:00 +08:00
|
|
|
//= require locales/en_US
|
2020-05-14 04:23:41 +08:00
|
|
|
//= require discourse-loader
|
2013-06-19 04:27:40 +08:00
|
|
|
|
2013-06-12 23:56:59 +08:00
|
|
|
// Stuff we need to load first
|
2016-07-04 01:33:05 +08:00
|
|
|
//= require vendor
|
2020-05-28 20:42:36 +08:00
|
|
|
//= require discourse-shims
|
2016-06-15 02:31:51 +08:00
|
|
|
//= require pretty-text-bundle
|
2017-06-09 06:02:30 +08:00
|
|
|
//= require markdown-it-bundle
|
2016-11-15 10:30:03 +08:00
|
|
|
//= require application
|
2013-06-12 23:56:59 +08:00
|
|
|
//= require admin
|
|
|
|
|
2019-12-30 20:17:12 +08:00
|
|
|
// These are not loaded in prod or development
|
|
|
|
// But we need them for testing handlebars templates in qunit
|
|
|
|
//= require handlebars
|
|
|
|
//= require ember-template-compiler
|
|
|
|
|
2018-10-04 23:06:14 +08:00
|
|
|
//= require sinon/pkg/sinon
|
2013-06-19 04:27:40 +08:00
|
|
|
|
2013-06-21 01:58:54 +08:00
|
|
|
//= require helpers/assertions
|
2013-06-21 02:29:59 +08:00
|
|
|
|
2020-02-15 02:32:59 +08:00
|
|
|
//= require break_string
|
2016-12-20 00:19:10 +08:00
|
|
|
//= require helpers/qunit-helpers
|
2013-06-21 01:58:54 +08:00
|
|
|
//= require_tree ./fixtures
|
2013-10-25 00:36:46 +08:00
|
|
|
//= require_tree ./lib
|
2013-06-12 23:56:59 +08:00
|
|
|
//= require_tree .
|
2015-08-28 04:59:36 +08:00
|
|
|
//= require plugin_tests
|
2013-06-12 23:56:59 +08:00
|
|
|
//= require_self
|
2015-03-13 14:45:55 +08:00
|
|
|
//
|
2017-04-25 10:23:15 +08:00
|
|
|
//= require jquery.magnific-popup.min.js
|
2013-06-12 23:56:59 +08:00
|
|
|
|
2020-03-27 00:33:29 +08:00
|
|
|
const buildResolver = require("discourse-common/resolver").buildResolver;
|
|
|
|
window.setResolver(buildResolver("discourse").create({ namespace: Discourse }));
|
|
|
|
|
2018-10-04 23:06:14 +08:00
|
|
|
sinon.config = {
|
|
|
|
injectIntoThis: false,
|
|
|
|
injectInto: null,
|
|
|
|
properties: ["spy", "stub", "mock", "clock", "sandbox"],
|
|
|
|
useFakeTimers: true,
|
|
|
|
useFakeServer: false
|
|
|
|
};
|
|
|
|
|
2020-05-28 20:42:36 +08:00
|
|
|
let MessageBus = require("message-bus-client").default;
|
|
|
|
|
2013-11-25 15:01:03 +08:00
|
|
|
// Stop the message bus so we don't get ajax calls
|
2020-05-28 20:42:36 +08:00
|
|
|
MessageBus.stop();
|
2013-11-25 15:01:03 +08:00
|
|
|
|
2013-06-14 03:08:42 +08:00
|
|
|
// Trick JSHint into allow document.write
|
|
|
|
var d = document;
|
2018-09-07 15:19:34 +08:00
|
|
|
d.write(
|
|
|
|
'<div id="ember-testing-container"><div id="ember-testing"></div></div>'
|
|
|
|
);
|
|
|
|
d.write(
|
|
|
|
"<style>#ember-testing-container { position: absolute; background: white; bottom: 0; right: 0; width: 640px; height: 384px; overflow: auto; z-index: 9999; border: 1px solid #ccc; } #ember-testing { zoom: 50%; }</style>"
|
|
|
|
);
|
2013-06-12 23:56:59 +08:00
|
|
|
|
2018-09-07 15:19:34 +08:00
|
|
|
Discourse.rootElement = "#ember-testing";
|
2013-06-12 23:56:59 +08:00
|
|
|
Discourse.setupForTesting();
|
|
|
|
Discourse.injectTestHelpers();
|
2014-01-15 01:48:57 +08:00
|
|
|
Discourse.start();
|
2013-07-05 23:53:09 +08:00
|
|
|
|
2014-07-29 04:41:45 +08:00
|
|
|
// disable logster error reporting
|
|
|
|
if (window.Logster) {
|
|
|
|
Logster.enabled = false;
|
|
|
|
} else {
|
|
|
|
window.Logster = { enabled: false };
|
|
|
|
}
|
|
|
|
|
2020-03-03 03:24:31 +08:00
|
|
|
var createPretender = require("helpers/create-pretender", null, null, false),
|
2018-09-07 15:19:34 +08:00
|
|
|
fixtures = require("fixtures/site-fixtures", null, null, false).default,
|
|
|
|
flushMap = require("discourse/models/store", null, null, false).flushMap,
|
|
|
|
ScrollingDOMMethods = require("discourse/mixins/scrolling", null, null, false)
|
|
|
|
.ScrollingDOMMethods,
|
|
|
|
_DiscourseURL = require("discourse/lib/url", null, null, false).default,
|
|
|
|
applyPretender = require("helpers/qunit-helpers", null, null, false)
|
|
|
|
.applyPretender,
|
2019-05-28 10:40:27 +08:00
|
|
|
server,
|
|
|
|
acceptanceModulePrefix = "Acceptance: ";
|
2014-08-01 02:51:10 +08:00
|
|
|
|
2015-07-04 02:57:07 +08:00
|
|
|
function dup(obj) {
|
|
|
|
return jQuery.extend(true, {}, obj);
|
|
|
|
}
|
|
|
|
|
2017-11-02 03:08:18 +08:00
|
|
|
function resetSite(siteSettings, extras) {
|
2019-11-14 01:35:19 +08:00
|
|
|
let createStore = require("helpers/create-store").default;
|
|
|
|
let siteAttrs = $.extend({}, fixtures["site.json"].site, extras || {});
|
|
|
|
let Site = require("discourse/models/site").default;
|
2016-07-05 02:15:51 +08:00
|
|
|
siteAttrs.store = createStore();
|
2017-11-02 03:08:18 +08:00
|
|
|
siteAttrs.siteSettings = siteSettings;
|
2019-11-14 01:35:19 +08:00
|
|
|
Site.resetCurrent(Site.create(siteAttrs));
|
2016-07-05 02:15:51 +08:00
|
|
|
}
|
|
|
|
|
2014-07-31 06:56:01 +08:00
|
|
|
QUnit.testStart(function(ctx) {
|
2020-03-03 03:24:31 +08:00
|
|
|
server = createPretender.default;
|
|
|
|
createPretender.applyDefaultHandlers(server);
|
2020-03-27 00:33:29 +08:00
|
|
|
server.handlers = [];
|
2020-03-03 03:24:31 +08:00
|
|
|
|
|
|
|
server.prepareBody = function(body) {
|
|
|
|
if (body && typeof body === "object") {
|
|
|
|
return JSON.stringify(body);
|
|
|
|
}
|
|
|
|
return body;
|
|
|
|
};
|
|
|
|
|
2020-04-02 13:01:38 +08:00
|
|
|
if (QUnit.config.logAllRequests) {
|
|
|
|
server.handledRequest = function(verb, path, request) {
|
|
|
|
console.log("REQ: " + verb + " " + path);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-03-03 03:24:31 +08:00
|
|
|
server.unhandledRequest = function(verb, path) {
|
2020-04-02 13:01:38 +08:00
|
|
|
if (QUnit.config.logAllRequests) {
|
|
|
|
console.log("REQ: " + verb + " " + path + " missing");
|
|
|
|
}
|
|
|
|
|
2020-03-03 03:24:31 +08:00
|
|
|
const error =
|
|
|
|
"Unhandled request in test environment: " + path + " (" + verb + ")";
|
|
|
|
window.console.error(error);
|
|
|
|
throw error;
|
|
|
|
};
|
|
|
|
|
|
|
|
server.checkPassthrough = request =>
|
|
|
|
request.requestHeaders["Discourse-Script"];
|
2017-09-13 23:54:49 +08:00
|
|
|
|
2019-05-28 10:40:27 +08:00
|
|
|
if (ctx.module.startsWith(acceptanceModulePrefix)) {
|
|
|
|
var helper = {
|
2020-03-03 03:24:31 +08:00
|
|
|
parsePostData: createPretender.parsePostData,
|
|
|
|
response: createPretender.response,
|
|
|
|
success: createPretender.success
|
2019-05-28 10:40:27 +08:00
|
|
|
};
|
2017-09-13 23:54:49 +08:00
|
|
|
|
2019-05-28 20:49:45 +08:00
|
|
|
applyPretender(
|
|
|
|
ctx.module.replace(acceptanceModulePrefix, ""),
|
|
|
|
server,
|
|
|
|
helper
|
|
|
|
);
|
2019-05-28 10:40:27 +08:00
|
|
|
}
|
2014-08-01 02:51:10 +08:00
|
|
|
|
2013-07-05 23:53:09 +08:00
|
|
|
// Allow our tests to change site settings and have them reset before the next test
|
2015-07-04 02:57:07 +08:00
|
|
|
Discourse.SiteSettings = dup(Discourse.SiteSettingsOriginal);
|
2020-06-04 00:45:26 +08:00
|
|
|
|
|
|
|
let getURL = require("discourse-common/lib/get-url");
|
|
|
|
getURL.setupURL(null, "http://localhost:3000", "");
|
|
|
|
getURL.setupS3CDN(null, null);
|
2019-11-09 02:46:50 +08:00
|
|
|
|
2019-11-13 22:17:06 +08:00
|
|
|
let User = require("discourse/models/user").default;
|
2019-11-09 02:46:50 +08:00
|
|
|
let Session = require("discourse/models/session").default;
|
|
|
|
Session.resetCurrent();
|
2019-11-13 22:17:06 +08:00
|
|
|
User.resetCurrent();
|
2017-11-02 03:08:18 +08:00
|
|
|
resetSite(Discourse.SiteSettings);
|
2015-07-03 00:06:24 +08:00
|
|
|
|
2015-08-11 05:11:27 +08:00
|
|
|
_DiscourseURL.redirectedTo = null;
|
|
|
|
_DiscourseURL.redirectTo = function(url) {
|
|
|
|
_DiscourseURL.redirectedTo = url;
|
2015-07-03 00:06:24 +08:00
|
|
|
};
|
|
|
|
|
2020-05-08 23:04:28 +08:00
|
|
|
var ps = require("discourse/lib/preload-store").default;
|
2016-07-05 02:15:51 +08:00
|
|
|
ps.reset();
|
2014-07-31 05:53:14 +08:00
|
|
|
|
2018-10-04 23:06:14 +08:00
|
|
|
window.sandbox = sinon;
|
2015-09-10 04:20:08 +08:00
|
|
|
window.sandbox.stub(ScrollingDOMMethods, "screenNotFull");
|
2015-08-08 03:08:27 +08:00
|
|
|
window.sandbox.stub(ScrollingDOMMethods, "bindOnScroll");
|
|
|
|
window.sandbox.stub(ScrollingDOMMethods, "unbindOnScroll");
|
2014-07-31 06:56:01 +08:00
|
|
|
|
2015-09-29 02:01:16 +08:00
|
|
|
// Unless we ever need to test this, let's leave it off.
|
2018-09-07 15:19:34 +08:00
|
|
|
$.fn.autocomplete = function() {};
|
2013-07-25 10:06:02 +08:00
|
|
|
});
|
2013-07-05 23:53:09 +08:00
|
|
|
|
2014-07-31 05:53:14 +08:00
|
|
|
QUnit.testDone(function() {
|
2014-07-31 06:56:01 +08:00
|
|
|
window.sandbox.restore();
|
2014-08-01 02:17:18 +08:00
|
|
|
|
|
|
|
// Destroy any modals
|
2018-09-07 15:19:34 +08:00
|
|
|
$(".modal-backdrop").remove();
|
2015-04-09 02:44:44 +08:00
|
|
|
flushMap();
|
2014-08-01 02:51:10 +08:00
|
|
|
|
2019-06-06 18:33:52 +08:00
|
|
|
// ensures any event not removed is not leaking between tests
|
2019-06-06 19:00:23 +08:00
|
|
|
// most likely in intialisers, other places (controller, component...)
|
2019-06-06 18:33:52 +08:00
|
|
|
// should be fixed in code
|
2020-04-21 23:27:17 +08:00
|
|
|
require("discourse/services/app-events").clearAppEventsCache(
|
|
|
|
window.Discourse.__container__
|
|
|
|
);
|
2019-06-06 18:59:02 +08:00
|
|
|
|
2020-05-28 20:42:36 +08:00
|
|
|
MessageBus.unsubscribe("*");
|
2020-04-16 13:58:04 +08:00
|
|
|
delete window.server;
|
|
|
|
window.Mousetrap.reset();
|
2014-07-31 05:53:14 +08:00
|
|
|
});
|
2014-08-01 00:05:47 +08:00
|
|
|
|
|
|
|
// Load ES6 tests
|
2014-09-27 02:48:34 +08:00
|
|
|
var helpers = require("helpers/qunit-helpers");
|
|
|
|
|
2017-07-26 21:07:46 +08:00
|
|
|
function getUrlParameter(name) {
|
2018-09-07 15:19:34 +08:00
|
|
|
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
|
|
|
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
|
|
|
|
var results = regex.exec(location.search);
|
|
|
|
return results === null
|
|
|
|
? ""
|
|
|
|
: decodeURIComponent(results[1].replace(/\+/g, " "));
|
|
|
|
}
|
2017-07-26 21:07:46 +08:00
|
|
|
|
2018-09-07 15:19:34 +08:00
|
|
|
var skipCore = getUrlParameter("qunit_skip_core") == "1";
|
|
|
|
var pluginPath = getUrlParameter("qunit_single_plugin")
|
|
|
|
? "/" + getUrlParameter("qunit_single_plugin") + "/"
|
|
|
|
: "/plugins/";
|
2017-07-26 21:07:46 +08:00
|
|
|
|
2016-04-29 04:37:20 +08:00
|
|
|
Object.keys(requirejs.entries).forEach(function(entry) {
|
2018-09-07 15:19:34 +08:00
|
|
|
var isTest = /\-test/.test(entry);
|
|
|
|
var regex = new RegExp(pluginPath);
|
2017-07-26 21:07:46 +08:00
|
|
|
var isPlugin = regex.test(entry);
|
|
|
|
|
|
|
|
if (isTest && (!skipCore || isPlugin)) {
|
2014-08-01 00:05:47 +08:00
|
|
|
require(entry, null, null, true);
|
|
|
|
}
|
|
|
|
});
|
2017-07-26 21:07:46 +08:00
|
|
|
|
2018-04-25 00:29:26 +08:00
|
|
|
// forces 0 as duration for all jquery animations
|
|
|
|
jQuery.fx.off = true;
|
|
|
|
|
2016-07-05 02:15:51 +08:00
|
|
|
resetSite();
|