diff --git a/app/assets/javascripts/admin/models/admin-dashboard.js.es6 b/app/assets/javascripts/admin/models/admin-dashboard.js.es6 index 20cdbe27721..756de2cc091 100644 --- a/app/assets/javascripts/admin/models/admin-dashboard.js.es6 +++ b/app/assets/javascripts/admin/models/admin-dashboard.js.es6 @@ -1,4 +1,5 @@ import { ajax } from "discourse/lib/ajax"; +import EmberObject from "@ember/object"; const GENERAL_ATTRIBUTES = [ "updated_at", @@ -6,7 +7,7 @@ const GENERAL_ATTRIBUTES = [ "release_notes_link" ]; -const AdminDashboard = Discourse.Model.extend({}); +const AdminDashboard = EmberObject.extend({}); AdminDashboard.reopenClass({ fetch() { diff --git a/app/assets/javascripts/admin/models/backup-status.js.es6 b/app/assets/javascripts/admin/models/backup-status.js.es6 index b31d1cb176c..62c360b5326 100644 --- a/app/assets/javascripts/admin/models/backup-status.js.es6 +++ b/app/assets/javascripts/admin/models/backup-status.js.es6 @@ -1,7 +1,8 @@ import discourseComputed from "discourse-common/utils/decorators"; import { not } from "@ember/object/computed"; +import EmberObject from "@ember/object"; -export default Discourse.Model.extend({ +export default EmberObject.extend({ restoreDisabled: not("restoreEnabled"), @discourseComputed("allowRestore", "isOperationRunning") diff --git a/app/assets/javascripts/admin/models/backup.js.es6 b/app/assets/javascripts/admin/models/backup.js.es6 index 7cd151378ab..882173300a9 100644 --- a/app/assets/javascripts/admin/models/backup.js.es6 +++ b/app/assets/javascripts/admin/models/backup.js.es6 @@ -1,7 +1,8 @@ import { ajax } from "discourse/lib/ajax"; import { extractError } from "discourse/lib/ajax-error"; +import EmberObject from "@ember/object"; -const Backup = Discourse.Model.extend({ +const Backup = EmberObject.extend({ destroy() { return ajax("/admin/backups/" + this.filename, { type: "DELETE" }); }, diff --git a/app/assets/javascripts/admin/models/color-scheme-color.js.es6 b/app/assets/javascripts/admin/models/color-scheme-color.js.es6 index d023295ce59..0d984c77a6b 100644 --- a/app/assets/javascripts/admin/models/color-scheme-color.js.es6 +++ b/app/assets/javascripts/admin/models/color-scheme-color.js.es6 @@ -4,8 +4,9 @@ import { on } from "discourse-common/utils/decorators"; import { propertyNotEqual } from "discourse/lib/computed"; +import EmberObject from "@ember/object"; -const ColorSchemeColor = Discourse.Model.extend({ +const ColorSchemeColor = EmberObject.extend({ @on("init") startTrackingChanges() { this.set("originals", { hex: this.hex || "FFFFFF" }); diff --git a/app/assets/javascripts/admin/models/color-scheme.js.es6 b/app/assets/javascripts/admin/models/color-scheme.js.es6 index 5d0550d2e01..84860023867 100644 --- a/app/assets/javascripts/admin/models/color-scheme.js.es6 +++ b/app/assets/javascripts/admin/models/color-scheme.js.es6 @@ -2,8 +2,9 @@ import discourseComputed from "discourse-common/utils/decorators"; import { not } from "@ember/object/computed"; import { ajax } from "discourse/lib/ajax"; import ColorSchemeColor from "admin/models/color-scheme-color"; +import EmberObject from "@ember/object"; -const ColorScheme = Discourse.Model.extend(Ember.Copyable, { +const ColorScheme = EmberObject.extend(Ember.Copyable, { init() { this._super(...arguments); diff --git a/app/assets/javascripts/admin/models/email-log.js.es6 b/app/assets/javascripts/admin/models/email-log.js.es6 index f1ac52ac8dc..c2eaaa26e6d 100644 --- a/app/assets/javascripts/admin/models/email-log.js.es6 +++ b/app/assets/javascripts/admin/models/email-log.js.es6 @@ -1,7 +1,8 @@ import { ajax } from "discourse/lib/ajax"; import AdminUser from "admin/models/admin-user"; +import EmberObject from "@ember/object"; -const EmailLog = Discourse.Model.extend({}); +const EmailLog = EmberObject.extend({}); EmailLog.reopenClass({ create(attrs) { diff --git a/app/assets/javascripts/admin/models/email-preview.js.es6 b/app/assets/javascripts/admin/models/email-preview.js.es6 index b8585d90803..42b7ab58789 100644 --- a/app/assets/javascripts/admin/models/email-preview.js.es6 +++ b/app/assets/javascripts/admin/models/email-preview.js.es6 @@ -1,5 +1,7 @@ import { ajax } from "discourse/lib/ajax"; -const EmailPreview = Discourse.Model.extend({}); +import EmberObject from "@ember/object"; + +const EmailPreview = EmberObject.extend({}); export function oneWeekAgo() { return moment() diff --git a/app/assets/javascripts/admin/models/email-settings.js.es6 b/app/assets/javascripts/admin/models/email-settings.js.es6 index e1d838463e2..1730aae7c94 100644 --- a/app/assets/javascripts/admin/models/email-settings.js.es6 +++ b/app/assets/javascripts/admin/models/email-settings.js.es6 @@ -1,5 +1,7 @@ import { ajax } from "discourse/lib/ajax"; -const EmailSettings = Discourse.Model.extend({}); +import EmberObject from "@ember/object"; + +const EmailSettings = EmberObject.extend({}); EmailSettings.reopenClass({ find: function() { diff --git a/app/assets/javascripts/admin/models/incoming-email.js.es6 b/app/assets/javascripts/admin/models/incoming-email.js.es6 index fd9d68730b7..8d46429a1d9 100644 --- a/app/assets/javascripts/admin/models/incoming-email.js.es6 +++ b/app/assets/javascripts/admin/models/incoming-email.js.es6 @@ -1,7 +1,8 @@ import { ajax } from "discourse/lib/ajax"; import AdminUser from "admin/models/admin-user"; +import EmberObject from "@ember/object"; -const IncomingEmail = Discourse.Model.extend({}); +const IncomingEmail = EmberObject.extend({}); IncomingEmail.reopenClass({ create(attrs) { diff --git a/app/assets/javascripts/admin/models/permalink.js.es6 b/app/assets/javascripts/admin/models/permalink.js.es6 index 9019bdbc30b..b86e9316923 100644 --- a/app/assets/javascripts/admin/models/permalink.js.es6 +++ b/app/assets/javascripts/admin/models/permalink.js.es6 @@ -1,5 +1,7 @@ import { ajax } from "discourse/lib/ajax"; -const Permalink = Discourse.Model.extend({ +import EmberObject from "@ember/object"; + +const Permalink = EmberObject.extend({ save: function() { return ajax("/admin/permalinks.json", { type: "POST", diff --git a/app/assets/javascripts/admin/models/report.js.es6 b/app/assets/javascripts/admin/models/report.js.es6 index bb745b13024..91a5f54002b 100644 --- a/app/assets/javascripts/admin/models/report.js.es6 +++ b/app/assets/javascripts/admin/models/report.js.es6 @@ -17,7 +17,7 @@ import { renderAvatar } from "discourse/helpers/user-avatar"; // and you want to ensure cache is reset export const SCHEMA_VERSION = 4; -const Report = Discourse.Model.extend({ +const Report = EmberObject.extend({ average: false, percent: false, higher_is_better: true, diff --git a/app/assets/javascripts/admin/models/screened-email.js.es6 b/app/assets/javascripts/admin/models/screened-email.js.es6 index 0d20f2c7d1e..ea725105515 100644 --- a/app/assets/javascripts/admin/models/screened-email.js.es6 +++ b/app/assets/javascripts/admin/models/screened-email.js.es6 @@ -1,7 +1,8 @@ import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; +import EmberObject from "@ember/object"; -const ScreenedEmail = Discourse.Model.extend({ +const ScreenedEmail = EmberObject.extend({ @discourseComputed("action") actionName(action) { return I18n.t("admin.logs.screened_actions." + action); diff --git a/app/assets/javascripts/admin/models/screened-ip-address.js.es6 b/app/assets/javascripts/admin/models/screened-ip-address.js.es6 index e2b60a21088..bfac17d86cf 100644 --- a/app/assets/javascripts/admin/models/screened-ip-address.js.es6 +++ b/app/assets/javascripts/admin/models/screened-ip-address.js.es6 @@ -1,8 +1,9 @@ import discourseComputed from "discourse-common/utils/decorators"; import { equal } from "@ember/object/computed"; import { ajax } from "discourse/lib/ajax"; +import EmberObject from "@ember/object"; -const ScreenedIpAddress = Discourse.Model.extend({ +const ScreenedIpAddress = EmberObject.extend({ @discourseComputed("action_name") actionName(actionName) { return I18n.t(`admin.logs.screened_ips.actions.${actionName}`); diff --git a/app/assets/javascripts/admin/models/screened-url.js.es6 b/app/assets/javascripts/admin/models/screened-url.js.es6 index 515ef6e82c1..31ea850778d 100644 --- a/app/assets/javascripts/admin/models/screened-url.js.es6 +++ b/app/assets/javascripts/admin/models/screened-url.js.es6 @@ -1,7 +1,8 @@ import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; +import EmberObject from "@ember/object"; -const ScreenedUrl = Discourse.Model.extend({ +const ScreenedUrl = EmberObject.extend({ @discourseComputed("action") actionName(action) { return I18n.t("admin.logs.screened_actions." + action); diff --git a/app/assets/javascripts/admin/models/site-setting.js.es6 b/app/assets/javascripts/admin/models/site-setting.js.es6 index 7760a611148..4edc89a1b96 100644 --- a/app/assets/javascripts/admin/models/site-setting.js.es6 +++ b/app/assets/javascripts/admin/models/site-setting.js.es6 @@ -1,7 +1,8 @@ import { ajax } from "discourse/lib/ajax"; import Setting from "admin/mixins/setting-object"; +import EmberObject from "@ember/object"; -const SiteSetting = Discourse.Model.extend(Setting, {}); +const SiteSetting = EmberObject.extend(Setting, {}); SiteSetting.reopenClass({ findAll() { diff --git a/app/assets/javascripts/admin/models/theme-settings.js.es6 b/app/assets/javascripts/admin/models/theme-settings.js.es6 index ab9e5bf9ce1..a823592ad2f 100644 --- a/app/assets/javascripts/admin/models/theme-settings.js.es6 +++ b/app/assets/javascripts/admin/models/theme-settings.js.es6 @@ -1,3 +1,4 @@ import Setting from "admin/mixins/setting-object"; +import EmberObject from "@ember/object"; -export default Discourse.Model.extend(Setting, {}); +export default EmberObject.extend(Setting, {}); diff --git a/app/assets/javascripts/admin/models/tl3-requirements.js.es6 b/app/assets/javascripts/admin/models/tl3-requirements.js.es6 index 966410b41c1..424aea4f58d 100644 --- a/app/assets/javascripts/admin/models/tl3-requirements.js.es6 +++ b/app/assets/javascripts/admin/models/tl3-requirements.js.es6 @@ -1,6 +1,7 @@ import discourseComputed from "discourse-common/utils/decorators"; +import EmberObject from "@ember/object"; -export default Discourse.Model.extend({ +export default EmberObject.extend({ @discourseComputed("days_visited", "time_period") days_visited_percent(daysVisited, timePeriod) { return Math.round((daysVisited * 100) / timePeriod); diff --git a/app/assets/javascripts/admin/models/version-check.js.es6 b/app/assets/javascripts/admin/models/version-check.js.es6 index 54ef9844fe0..cc888b25884 100644 --- a/app/assets/javascripts/admin/models/version-check.js.es6 +++ b/app/assets/javascripts/admin/models/version-check.js.es6 @@ -1,7 +1,8 @@ import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; +import EmberObject from "@ember/object"; -const VersionCheck = Discourse.Model.extend({ +const VersionCheck = EmberObject.extend({ @discourseComputed("updated_at") noCheckPerformed(updatedAt) { return updatedAt === null; diff --git a/app/assets/javascripts/admin/models/watched-word.js.es6 b/app/assets/javascripts/admin/models/watched-word.js.es6 index b9ef7380b68..dac78affe11 100644 --- a/app/assets/javascripts/admin/models/watched-word.js.es6 +++ b/app/assets/javascripts/admin/models/watched-word.js.es6 @@ -1,7 +1,7 @@ import { ajax } from "discourse/lib/ajax"; import EmberObject from "@ember/object"; -const WatchedWord = Discourse.Model.extend({ +const WatchedWord = EmberObject.extend({ save() { return ajax( "/admin/logs/watched_words" + (this.id ? "/" + this.id : "") + ".json", diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index fa5ef288801..10c71ca89b7 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -36,7 +36,6 @@ //= require ./discourse/lib/show-modal //= require ./discourse/mixins/scrolling //= require ./discourse/lib/ajax-error -//= require ./discourse/models/model //= require ./discourse/models/result-set //= require ./discourse/models/store //= require ./discourse/models/action-summary diff --git a/app/assets/javascripts/discourse.js.es6 b/app/assets/javascripts/discourse.js.es6 index c56acf9dc8c..25d2f74ec8b 100644 --- a/app/assets/javascripts/discourse.js.es6 +++ b/app/assets/javascripts/discourse.js.es6 @@ -6,6 +6,8 @@ import { } from "discourse-common/utils/decorators"; import computed from "@ember/object/computed"; import FocusEvent from "discourse-common/mixins/focus-event"; +import EmberObject from "@ember/object"; +import deprecated from "discourse-common/lib/deprecated"; const _pluginCallbacks = []; @@ -206,4 +208,14 @@ const Discourse = Ember.Application.extend(FocusEvent, { }) }).create(); +Object.defineProperty(Discourse, "Model", { + get() { + deprecated("Use an `@ember/object` instead of Discourse.Model", { + since: "2.4.0", + dropFrom: "2.5.0" + }); + return EmberObject; + } +}); + export default Discourse; diff --git a/app/assets/javascripts/discourse/models/draft.js.es6 b/app/assets/javascripts/discourse/models/draft.js.es6 index 62fefef8c70..178c38f94ac 100644 --- a/app/assets/javascripts/discourse/models/draft.js.es6 +++ b/app/assets/javascripts/discourse/models/draft.js.es6 @@ -1,5 +1,7 @@ import { ajax } from "discourse/lib/ajax"; -const Draft = Discourse.Model.extend(); +import EmberObject from "@ember/object"; + +const Draft = EmberObject.extend(); Draft.reopenClass({ clear(key, sequence) { diff --git a/app/assets/javascripts/discourse/models/input-validation.js.es6 b/app/assets/javascripts/discourse/models/input-validation.js.es6 index fcbd0a1536d..c7120db8465 100644 --- a/app/assets/javascripts/discourse/models/input-validation.js.es6 +++ b/app/assets/javascripts/discourse/models/input-validation.js.es6 @@ -1,4 +1,2 @@ -import Model from "discourse/models/model"; - -// A trivial model we use to handle input validation -export default Model.extend(); +import EmberObject from "@ember/object"; +export default EmberObject.extend(); diff --git a/app/assets/javascripts/discourse/models/invite.js.es6 b/app/assets/javascripts/discourse/models/invite.js.es6 index 54baf013f55..dc2d4c8538e 100644 --- a/app/assets/javascripts/discourse/models/invite.js.es6 +++ b/app/assets/javascripts/discourse/models/invite.js.es6 @@ -4,7 +4,7 @@ import { popupAjaxError } from "discourse/lib/ajax-error"; import { userPath } from "discourse/lib/url"; import { Promise } from "rsvp"; -const Invite = Discourse.Model.extend({ +const Invite = EmberObject.extend({ rescind() { ajax("/invites", { type: "DELETE", diff --git a/app/assets/javascripts/discourse/models/live-post-counts.es6 b/app/assets/javascripts/discourse/models/live-post-counts.es6 index b28c525f8df..ac5f14d76f6 100644 --- a/app/assets/javascripts/discourse/models/live-post-counts.es6 +++ b/app/assets/javascripts/discourse/models/live-post-counts.es6 @@ -1,5 +1,7 @@ import { ajax } from "discourse/lib/ajax"; -const LivePostCounts = Discourse.Model.extend({}); +import EmberObject from "@ember/object"; + +const LivePostCounts = EmberObject.extend({}); LivePostCounts.reopenClass({ find() { diff --git a/app/assets/javascripts/discourse/models/model.js.es6 b/app/assets/javascripts/discourse/models/model.js.es6 deleted file mode 100644 index 5ce0eb2eaf3..00000000000 --- a/app/assets/javascripts/discourse/models/model.js.es6 +++ /dev/null @@ -1,19 +0,0 @@ -import { isEmpty } from "@ember/utils"; -import EmberObject from "@ember/object"; -const Model = EmberObject.extend(); - -Model.reopenClass({ - extractByKey(collection, klass) { - const retval = {}; - if (isEmpty(collection)) { - return retval; - } - - collection.forEach(function(item) { - retval[item.id] = klass.create(item); - }); - return retval; - } -}); - -export default Model; diff --git a/app/assets/javascripts/discourse/models/nav-item.js.es6 b/app/assets/javascripts/discourse/models/nav-item.js.es6 index 72395681be5..4502757aee3 100644 --- a/app/assets/javascripts/discourse/models/nav-item.js.es6 +++ b/app/assets/javascripts/discourse/models/nav-item.js.es6 @@ -2,8 +2,9 @@ import discourseComputed from "discourse-common/utils/decorators"; import { toTitleCase } from "discourse/lib/formatter"; import { emojiUnescape } from "discourse/lib/text"; import Category from "discourse/models/category"; +import EmberObject from "@ember/object"; -const NavItem = Discourse.Model.extend({ +const NavItem = EmberObject.extend({ @discourseComputed("categoryName", "name") title(categoryName, name) { const extra = {}; diff --git a/app/assets/javascripts/discourse/models/permission-type.js.es6 b/app/assets/javascripts/discourse/models/permission-type.js.es6 index 94a9af04016..f6ad56c9288 100644 --- a/app/assets/javascripts/discourse/models/permission-type.js.es6 +++ b/app/assets/javascripts/discourse/models/permission-type.js.es6 @@ -1,6 +1,7 @@ import discourseComputed from "discourse-common/utils/decorators"; +import EmberObject from "@ember/object"; -const PermissionType = Discourse.Model.extend({ +const PermissionType = EmberObject.extend({ @discourseComputed("id") description(id) { var key = ""; diff --git a/app/assets/javascripts/discourse/models/topic-list.js.es6 b/app/assets/javascripts/discourse/models/topic-list.js.es6 index b0ec31a834e..489c926de30 100644 --- a/app/assets/javascripts/discourse/models/topic-list.js.es6 +++ b/app/assets/javascripts/discourse/models/topic-list.js.es6 @@ -2,11 +2,24 @@ import { notEmpty } from "@ember/object/computed"; import EmberObject from "@ember/object"; import { ajax } from "discourse/lib/ajax"; import RestModel from "discourse/models/rest"; -import Model from "discourse/models/model"; import { getOwner } from "discourse-common/lib/get-owner"; import { Promise } from "rsvp"; import Category from "discourse/models/category"; import Session from "discourse/models/session"; +import { isEmpty } from "@ember/utils"; +import User from "discourse/models/user"; + +function extractByKey(collection, klass) { + const retval = {}; + if (isEmpty(collection)) { + return retval; + } + + collection.forEach(function(item) { + retval[item.id] = klass.create(item); + }); + return retval; +} // Whether to show the category badge in topic lists function displayCategoryInList(site, category) { @@ -139,8 +152,8 @@ TopicList.reopenClass({ // Stitch together our side loaded data const categories = Category.list(), - users = Model.extractByKey(result.users, Discourse.User), - groups = Model.extractByKey(result.primary_groups, EmberObject); + users = extractByKey(result.users, User), + groups = extractByKey(result.primary_groups, EmberObject); return result.topic_list[listKey].map(t => { t.category = categories.findBy("id", t.category_id); diff --git a/app/assets/javascripts/discourse/models/topic-tracking-state.js.es6 b/app/assets/javascripts/discourse/models/topic-tracking-state.js.es6 index 46569009907..a47a9341704 100644 --- a/app/assets/javascripts/discourse/models/topic-tracking-state.js.es6 +++ b/app/assets/javascripts/discourse/models/topic-tracking-state.js.es6 @@ -8,6 +8,7 @@ import { import { defaultHomepage } from "discourse/lib/utilities"; import PreloadStore from "preload-store"; import Category from "discourse/models/category"; +import EmberObject from "@ember/object"; function isNew(topic) { return ( @@ -25,7 +26,7 @@ function isUnread(topic) { ); } -const TopicTrackingState = Discourse.Model.extend({ +const TopicTrackingState = EmberObject.extend({ messageCount: 0, @on("init") diff --git a/app/assets/javascripts/discourse/models/user-action-group.js.es6 b/app/assets/javascripts/discourse/models/user-action-group.js.es6 index b0706cd324d..c432cd694c3 100644 --- a/app/assets/javascripts/discourse/models/user-action-group.js.es6 +++ b/app/assets/javascripts/discourse/models/user-action-group.js.es6 @@ -1,8 +1,7 @@ -/** - A data model representing a group of UserActions -**/ -export default Discourse.Model.extend({ - push: function(item) { +import EmberObject from "@ember/object"; + +export default EmberObject.extend({ + push(item) { if (!this.items) { this.items = []; } diff --git a/app/assets/javascripts/discourse/models/user-badge.js.es6 b/app/assets/javascripts/discourse/models/user-badge.js.es6 index 3e00072f6e7..b6a0dbb7cf5 100644 --- a/app/assets/javascripts/discourse/models/user-badge.js.es6 +++ b/app/assets/javascripts/discourse/models/user-badge.js.es6 @@ -3,8 +3,9 @@ import { ajax } from "discourse/lib/ajax"; import Badge from "discourse/models/badge"; import { Promise } from "rsvp"; import Topic from "discourse/models/topic"; +import EmberObject from "@ember/object"; -const UserBadge = Discourse.Model.extend({ +const UserBadge = EmberObject.extend({ @discourseComputed postUrl: function() { if (this.topic_title) { diff --git a/app/assets/javascripts/discourse/models/user-posts-stream.js.es6 b/app/assets/javascripts/discourse/models/user-posts-stream.js.es6 index 6213d98d143..5a71149fb51 100644 --- a/app/assets/javascripts/discourse/models/user-posts-stream.js.es6 +++ b/app/assets/javascripts/discourse/models/user-posts-stream.js.es6 @@ -3,8 +3,9 @@ import { ajax } from "discourse/lib/ajax"; import { url } from "discourse/lib/computed"; import UserAction from "discourse/models/user-action"; import { Promise } from "rsvp"; +import EmberObject from "@ember/object"; -export default Discourse.Model.extend({ +export default EmberObject.extend({ loaded: false, @on("init") diff --git a/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb b/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb index 6f25f0823e3..c8dcad49707 100644 --- a/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb +++ b/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb @@ -89,7 +89,6 @@ JS "discourse/routes/discourse", "discourse/models/site", "discourse/models/user", - "discourse/models/model" ] ) diff --git a/test/javascripts/models/model-test.js.es6 b/test/javascripts/models/model-test.js.es6 deleted file mode 100644 index f38063d6afa..00000000000 --- a/test/javascripts/models/model-test.js.es6 +++ /dev/null @@ -1,36 +0,0 @@ -import EmberObject from "@ember/object"; -import Model from "discourse/models/model"; - -QUnit.module("model:discourse"); - -QUnit.test( - "extractByKey: converts a list of hashes into a hash of instances of specified class, indexed by their ids", - assert => { - var firstObject = { id: "id_1", foo: "foo_1" }; - var secondObject = { id: "id_2", foo: "foo_2" }; - - var actual = Model.extractByKey([firstObject, secondObject], EmberObject); - var expected = { - id_1: EmberObject.create(firstObject), - id_2: EmberObject.create(secondObject) - }; - - assert.ok(_.isEqual(actual, expected)); - } -); - -QUnit.test( - "extractByKey: returns an empty hash if there isn't anything to convert", - assert => { - assert.deepEqual( - Model.extractByKey(), - {}, - "when called without parameters" - ); - assert.deepEqual( - Model.extractByKey([]), - {}, - "when called with an empty array" - ); - } -);