mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 06:29:30 +08:00
Convert Badges / User Badges to ES6.
This commit is contained in:
parent
113e8d62ba
commit
abd9b26642
|
@ -485,6 +485,3 @@ DEPENDENCIES
|
||||||
uglifier
|
uglifier
|
||||||
unf
|
unf
|
||||||
unicorn
|
unicorn
|
||||||
|
|
||||||
BUNDLED WITH
|
|
||||||
1.10.6
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import UserBadge from 'discourse/models/user-badge';
|
||||||
|
|
||||||
export default Ember.ArrayController.extend({
|
export default Ember.ArrayController.extend({
|
||||||
needs: ["adminUser"],
|
needs: ["adminUser"],
|
||||||
user: Em.computed.alias('controllers.adminUser.model'),
|
user: Em.computed.alias('controllers.adminUser.model'),
|
||||||
|
@ -86,7 +88,7 @@ export default Ember.ArrayController.extend({
|
||||||
**/
|
**/
|
||||||
grantBadge: function(badgeId) {
|
grantBadge: function(badgeId) {
|
||||||
var self = this;
|
var self = this;
|
||||||
Discourse.UserBadge.grant(badgeId, this.get('user.username'), this.get('badgeReason')).then(function(userBadge) {
|
UserBadge.grant(badgeId, this.get('user.username'), this.get('badgeReason')).then(function(userBadge) {
|
||||||
self.set('badgeReason', '');
|
self.set('badgeReason', '');
|
||||||
self.pushObject(userBadge);
|
self.pushObject(userBadge);
|
||||||
Ember.run.next(function() {
|
Ember.run.next(function() {
|
||||||
|
@ -102,12 +104,6 @@ export default Ember.ArrayController.extend({
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
Revoke the selected userBadge.
|
|
||||||
|
|
||||||
@method revokeBadge
|
|
||||||
@param {Discourse.UserBadge} userBadge the `Discourse.UserBadge` instance that needs to be revoked.
|
|
||||||
**/
|
|
||||||
revokeBadge: function(userBadge) {
|
revokeBadge: function(userBadge) {
|
||||||
var self = this;
|
var self = this;
|
||||||
return bootbox.confirm(I18n.t("admin.badges.revoke_confirm"), I18n.t("no_value"), I18n.t("yes_value"), function(result) {
|
return bootbox.confirm(I18n.t("admin.badges.revoke_confirm"), I18n.t("no_value"), I18n.t("yes_value"), function(result) {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import Badge from 'discourse/models/badge';
|
||||||
import showModal from 'discourse/lib/show-modal';
|
import showModal from 'discourse/lib/show-modal';
|
||||||
|
|
||||||
export default Ember.Route.extend({
|
export default Ember.Route.extend({
|
||||||
|
@ -7,7 +8,7 @@ export default Ember.Route.extend({
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
if (params.badge_id === "new") {
|
if (params.badge_id === "new") {
|
||||||
return Discourse.Badge.create({
|
return Badge.create({
|
||||||
name: I18n.t('admin.badges.new_badge')
|
name: I18n.t('admin.badges.new_badge')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import Badge from 'discourse/models/badge';
|
||||||
|
|
||||||
export default Discourse.Route.extend({
|
export default Discourse.Route.extend({
|
||||||
_json: null,
|
_json: null,
|
||||||
|
|
||||||
|
@ -5,7 +7,7 @@ export default Discourse.Route.extend({
|
||||||
var self = this;
|
var self = this;
|
||||||
return Discourse.ajax('/admin/badges.json').then(function(json) {
|
return Discourse.ajax('/admin/badges.json').then(function(json) {
|
||||||
self._json = json;
|
self._json = json;
|
||||||
return Discourse.Badge.createFromJson(json);
|
return Badge.createFromJson(json);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
26
app/assets/javascripts/admin/routes/admin-user-badges.js.es6
Normal file
26
app/assets/javascripts/admin/routes/admin-user-badges.js.es6
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import UserBadge from 'discourse/models/user-badge';
|
||||||
|
import Badge from 'discourse/models/badge';
|
||||||
|
|
||||||
|
export default Discourse.Route.extend({
|
||||||
|
model() {
|
||||||
|
const username = this.modelFor('adminUser').get('username');
|
||||||
|
return UserBadge.findByUsername(username);
|
||||||
|
},
|
||||||
|
|
||||||
|
setupController(controller, model) {
|
||||||
|
// Find all badges.
|
||||||
|
controller.set('loading', true);
|
||||||
|
Badge.findAll().then(function(badges) {
|
||||||
|
controller.set('badges', badges);
|
||||||
|
if (badges.length > 0) {
|
||||||
|
var grantableBadges = controller.get('grantableBadges');
|
||||||
|
if (grantableBadges.length > 0) {
|
||||||
|
controller.set('selectedBadgeId', grantableBadges[0].get('id'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
controller.set('loading', false);
|
||||||
|
});
|
||||||
|
// Set the model.
|
||||||
|
controller.set('model', model);
|
||||||
|
}
|
||||||
|
});
|
|
@ -1,32 +0,0 @@
|
||||||
/**
|
|
||||||
Shows all of the badges that have been granted to a user, and allow granting and
|
|
||||||
revoking badges.
|
|
||||||
|
|
||||||
@class AdminUserBadgesRoute
|
|
||||||
@extends Discourse.Route
|
|
||||||
@namespace Discourse
|
|
||||||
@module Discourse
|
|
||||||
**/
|
|
||||||
Discourse.AdminUserBadgesRoute = Discourse.Route.extend({
|
|
||||||
model: function() {
|
|
||||||
var username = this.modelFor('adminUser').get('username');
|
|
||||||
return Discourse.UserBadge.findByUsername(username);
|
|
||||||
},
|
|
||||||
|
|
||||||
setupController: function(controller, model) {
|
|
||||||
// Find all badges.
|
|
||||||
controller.set('loading', true);
|
|
||||||
Discourse.Badge.findAll().then(function(badges) {
|
|
||||||
controller.set('badges', badges);
|
|
||||||
if (badges.length > 0) {
|
|
||||||
var grantableBadges = controller.get('grantableBadges');
|
|
||||||
if (grantableBadges.length > 0) {
|
|
||||||
controller.set('selectedBadgeId', grantableBadges[0].get('id'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
controller.set('loading', false);
|
|
||||||
});
|
|
||||||
// Set the model.
|
|
||||||
controller.set('model', model);
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -157,9 +157,6 @@ window.Discourse = Ember.Application.createWithMixins(Discourse.Ajax, {
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: Remove this, it is in for backwards compatibiltiy with plugins
|
|
||||||
Discourse.HasCurrentUser = {};
|
|
||||||
|
|
||||||
function proxyDep(propName, moduleFunc, msg) {
|
function proxyDep(propName, moduleFunc, msg) {
|
||||||
if (Discourse.hasOwnProperty(propName)) { return; }
|
if (Discourse.hasOwnProperty(propName)) { return; }
|
||||||
Object.defineProperty(Discourse, propName, {
|
Object.defineProperty(Discourse, propName, {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import UserBadge from 'discourse/models/user-badge';
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
noMoreBadges: false,
|
noMoreBadges: false,
|
||||||
userBadges: null,
|
userBadges: null,
|
||||||
|
@ -8,7 +10,7 @@ export default Ember.Controller.extend({
|
||||||
const self = this;
|
const self = this;
|
||||||
const userBadges = this.get('userBadges');
|
const userBadges = this.get('userBadges');
|
||||||
|
|
||||||
Discourse.UserBadge.findByBadgeId(this.get('model.id'), {
|
UserBadge.findByBadgeId(this.get('model.id'), {
|
||||||
offset: userBadges.length
|
offset: userBadges.length
|
||||||
}).then(function(result) {
|
}).then(function(result) {
|
||||||
userBadges.pushObjects(result);
|
userBadges.pushObjects(result);
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
|
import Badge from 'discourse/models/badge';
|
||||||
|
|
||||||
export default Ember.Mixin.create({
|
export default Ember.Mixin.create({
|
||||||
saving: false,
|
saving: false,
|
||||||
saved: false,
|
saved: false,
|
||||||
|
|
||||||
selectableUserBadges: function() {
|
selectableUserBadges: function() {
|
||||||
var items = this.get('filteredList');
|
let items = this.get('filteredList');
|
||||||
items = _.uniq(items, false, function(e) { return e.get('badge.name'); });
|
items = _.uniq(items, false, function(e) { return e.get('badge.name'); });
|
||||||
items.unshiftObject(Em.Object.create({
|
items.unshiftObject(Em.Object.create({
|
||||||
badge: Discourse.Badge.create({name: I18n.t('badges.none')})
|
badge: Badge.create({name: I18n.t('badges.none')})
|
||||||
}));
|
}));
|
||||||
return items;
|
return items;
|
||||||
}.property('filteredList'),
|
}.property('filteredList'),
|
||||||
|
@ -20,8 +22,8 @@ export default Ember.Mixin.create({
|
||||||
}.property('saving'),
|
}.property('saving'),
|
||||||
|
|
||||||
selectedUserBadge: function() {
|
selectedUserBadge: function() {
|
||||||
var selectedUserBadgeId = parseInt(this.get('selectedUserBadgeId'));
|
const selectedUserBadgeId = parseInt(this.get('selectedUserBadgeId'));
|
||||||
var selectedUserBadge = null;
|
let selectedUserBadge = null;
|
||||||
this.get('selectableUserBadges').forEach(function(userBadge) {
|
this.get('selectableUserBadges').forEach(function(userBadge) {
|
||||||
if (userBadge.get('id') === selectedUserBadgeId) {
|
if (userBadge.get('id') === selectedUserBadgeId) {
|
||||||
selectedUserBadge = userBadge;
|
selectedUserBadge = userBadge;
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
import computed from 'ember-addons/ember-computed-decorators';
|
||||||
|
import RestModel from 'discourse/models/rest';
|
||||||
|
|
||||||
|
export default RestModel.extend({
|
||||||
|
|
||||||
|
@computed('name')
|
||||||
|
i18nNameKey() {
|
||||||
|
return this.get('name').toLowerCase().replace(/\s/g, '_');
|
||||||
|
},
|
||||||
|
|
||||||
|
@computed
|
||||||
|
displayName() {
|
||||||
|
const i18nKey = `badges.badge_grouping.${this.get('i18nNameKey')}.name`;
|
||||||
|
return I18n.t(i18nKey, {defaultValue: this.get('name')});
|
||||||
|
}
|
||||||
|
});
|
|
@ -1,22 +1,12 @@
|
||||||
/**
|
import BadgeGrouping from 'discourse/models/badge-grouping';
|
||||||
A data model representing a badge on Discourse
|
import RestModel from 'discourse/models/rest';
|
||||||
|
|
||||||
@class Badge
|
const Badge = RestModel.extend({
|
||||||
@extends Discourse.Model
|
|
||||||
@namespace Discourse
|
|
||||||
@module Discourse
|
|
||||||
**/
|
|
||||||
Discourse.Badge = Discourse.Model.extend({
|
|
||||||
/**
|
|
||||||
Is this a new badge?
|
|
||||||
|
|
||||||
@property newBadge
|
|
||||||
@type {String}
|
|
||||||
**/
|
|
||||||
newBadge: Em.computed.none('id'),
|
newBadge: Em.computed.none('id'),
|
||||||
|
|
||||||
hasQuery: function(){
|
hasQuery: function(){
|
||||||
var query = this.get('query');
|
const query = this.get('query');
|
||||||
return query && query.trim().length > 0;
|
return query && query.trim().length > 0;
|
||||||
}.property('query'),
|
}.property('query'),
|
||||||
|
|
||||||
|
@ -40,7 +30,7 @@ Discourse.Badge = Discourse.Model.extend({
|
||||||
@type {String}
|
@type {String}
|
||||||
**/
|
**/
|
||||||
displayName: function() {
|
displayName: function() {
|
||||||
var i18nKey = "badges.badge." + this.get('i18nNameKey') + ".name";
|
const i18nKey = "badges.badge." + this.get('i18nNameKey') + ".name";
|
||||||
return I18n.t(i18nKey, {defaultValue: this.get('name')});
|
return I18n.t(i18nKey, {defaultValue: this.get('name')});
|
||||||
}.property('name', 'i18nNameKey'),
|
}.property('name', 'i18nNameKey'),
|
||||||
|
|
||||||
|
@ -52,8 +42,8 @@ Discourse.Badge = Discourse.Model.extend({
|
||||||
@type {String}
|
@type {String}
|
||||||
**/
|
**/
|
||||||
translatedDescription: function() {
|
translatedDescription: function() {
|
||||||
var i18nKey = "badges.badge." + this.get('i18nNameKey') + ".description",
|
const i18nKey = "badges.badge." + this.get('i18nNameKey') + ".description";
|
||||||
translation = I18n.t(i18nKey);
|
let translation = I18n.t(i18nKey);
|
||||||
if (translation.indexOf(i18nKey) !== -1) {
|
if (translation.indexOf(i18nKey) !== -1) {
|
||||||
translation = null;
|
translation = null;
|
||||||
}
|
}
|
||||||
|
@ -73,7 +63,7 @@ Discourse.Badge = Discourse.Model.extend({
|
||||||
@type {String}
|
@type {String}
|
||||||
**/
|
**/
|
||||||
displayDescriptionHtml: function() {
|
displayDescriptionHtml: function() {
|
||||||
var translated = this.get('translatedDescription');
|
const translated = this.get('translatedDescription');
|
||||||
return (translated === null ? this.get('description') : translated) || "";
|
return (translated === null ? this.get('description') : translated) || "";
|
||||||
}.property('description', 'translatedDescription'),
|
}.property('description', 'translatedDescription'),
|
||||||
|
|
||||||
|
@ -84,7 +74,7 @@ Discourse.Badge = Discourse.Model.extend({
|
||||||
@param {Object} json The JSON response returned by the server
|
@param {Object} json The JSON response returned by the server
|
||||||
**/
|
**/
|
||||||
updateFromJson: function(json) {
|
updateFromJson: function(json) {
|
||||||
var self = this;
|
const self = this;
|
||||||
if (json.badge) {
|
if (json.badge) {
|
||||||
Object.keys(json.badge).forEach(function(key) {
|
Object.keys(json.badge).forEach(function(key) {
|
||||||
self.set(key, json.badge[key]);
|
self.set(key, json.badge[key]);
|
||||||
|
@ -100,7 +90,7 @@ Discourse.Badge = Discourse.Model.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
badgeTypeClassName: function() {
|
badgeTypeClassName: function() {
|
||||||
var type = this.get('badge_type.name') || "";
|
const type = this.get('badge_type.name') || "";
|
||||||
return "badge-type-" + type.toLowerCase();
|
return "badge-type-" + type.toLowerCase();
|
||||||
}.property('badge_type.name'),
|
}.property('badge_type.name'),
|
||||||
|
|
||||||
|
@ -111,9 +101,9 @@ Discourse.Badge = Discourse.Model.extend({
|
||||||
@returns {Promise} A promise that resolves to the updated `Discourse.Badge`
|
@returns {Promise} A promise that resolves to the updated `Discourse.Badge`
|
||||||
**/
|
**/
|
||||||
save: function(data) {
|
save: function(data) {
|
||||||
var url = "/admin/badges",
|
let url = "/admin/badges",
|
||||||
requestType = "POST",
|
requestType = "POST";
|
||||||
self = this;
|
const self = this;
|
||||||
|
|
||||||
if (this.get('id')) {
|
if (this.get('id')) {
|
||||||
// We are updating an existing badge.
|
// We are updating an existing badge.
|
||||||
|
@ -146,7 +136,7 @@ Discourse.Badge = Discourse.Model.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Discourse.Badge.reopenClass({
|
Badge.reopenClass({
|
||||||
/**
|
/**
|
||||||
Create `Discourse.Badge` instances from the server JSON response.
|
Create `Discourse.Badge` instances from the server JSON response.
|
||||||
|
|
||||||
|
@ -156,29 +146,29 @@ Discourse.Badge.reopenClass({
|
||||||
**/
|
**/
|
||||||
createFromJson: function(json) {
|
createFromJson: function(json) {
|
||||||
// Create BadgeType objects.
|
// Create BadgeType objects.
|
||||||
var badgeTypes = {};
|
const badgeTypes = {};
|
||||||
if ('badge_types' in json) {
|
if ('badge_types' in json) {
|
||||||
json.badge_types.forEach(function(badgeTypeJson) {
|
json.badge_types.forEach(function(badgeTypeJson) {
|
||||||
badgeTypes[badgeTypeJson.id] = Ember.Object.create(badgeTypeJson);
|
badgeTypes[badgeTypeJson.id] = Ember.Object.create(badgeTypeJson);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var badgeGroupings = {};
|
const badgeGroupings = {};
|
||||||
if ('badge_groupings' in json) {
|
if ('badge_groupings' in json) {
|
||||||
json.badge_groupings.forEach(function(badgeGroupingJson) {
|
json.badge_groupings.forEach(function(badgeGroupingJson) {
|
||||||
badgeGroupings[badgeGroupingJson.id] = Discourse.BadgeGrouping.create(badgeGroupingJson);
|
badgeGroupings[badgeGroupingJson.id] = BadgeGrouping.create(badgeGroupingJson);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create Badge objects.
|
// Create Badge objects.
|
||||||
var badges = [];
|
let badges = [];
|
||||||
if ("badge" in json) {
|
if ("badge" in json) {
|
||||||
badges = [json.badge];
|
badges = [json.badge];
|
||||||
} else {
|
} else {
|
||||||
badges = json.badges;
|
badges = json.badges;
|
||||||
}
|
}
|
||||||
badges = badges.map(function(badgeJson) {
|
badges = badges.map(function(badgeJson) {
|
||||||
var badge = Discourse.Badge.create(badgeJson);
|
const badge = Discourse.Badge.create(badgeJson);
|
||||||
badge.set('badge_type', badgeTypes[badge.get('badge_type_id')]);
|
badge.set('badge_type', badgeTypes[badge.get('badge_type_id')]);
|
||||||
badge.set('badge_grouping', badgeGroupings[badge.get('badge_grouping_id')]);
|
badge.set('badge_grouping', badgeGroupings[badge.get('badge_grouping_id')]);
|
||||||
return badge;
|
return badge;
|
||||||
|
@ -198,7 +188,7 @@ Discourse.Badge.reopenClass({
|
||||||
@returns {Promise} a promise that resolves to an array of `Discourse.Badge`
|
@returns {Promise} a promise that resolves to an array of `Discourse.Badge`
|
||||||
**/
|
**/
|
||||||
findAll: function(opts) {
|
findAll: function(opts) {
|
||||||
var listable = "";
|
let listable = "";
|
||||||
if(opts && opts.onlyListable){
|
if(opts && opts.onlyListable){
|
||||||
listable = "?only_listable=true";
|
listable = "?only_listable=true";
|
||||||
}
|
}
|
||||||
|
@ -220,3 +210,6 @@ Discourse.Badge.reopenClass({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export default Badge;
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
Discourse.BadgeGrouping= Discourse.Model.extend({
|
|
||||||
i18nNameKey: function() {
|
|
||||||
return this.get('name').toLowerCase().replace(/\s/g, '_');
|
|
||||||
}.property('name'),
|
|
||||||
|
|
||||||
displayName: function(){
|
|
||||||
var i18nKey = "badges.badge_grouping." + this.get('i18nNameKey') + ".name";
|
|
||||||
return I18n.t(i18nKey, {defaultValue: this.get('name')});
|
|
||||||
}.property()
|
|
||||||
});
|
|
|
@ -1,12 +1,6 @@
|
||||||
/**
|
import Badge from 'discourse/models/badge';
|
||||||
A data model representing a user badge grant on Discourse
|
|
||||||
|
|
||||||
@class UserBadge
|
const UserBadge = Discourse.Model.extend({
|
||||||
@extends Discourse.Model
|
|
||||||
@namespace Discourse
|
|
||||||
@module Discourse
|
|
||||||
**/
|
|
||||||
Discourse.UserBadge = Discourse.Model.extend({
|
|
||||||
postUrl: function() {
|
postUrl: function() {
|
||||||
if(this.get('topic_title')) {
|
if(this.get('topic_title')) {
|
||||||
return "/t/-/" + this.get('topic_id') + "/" + this.get('post_number');
|
return "/t/-/" + this.get('topic_id') + "/" + this.get('post_number');
|
||||||
|
@ -25,14 +19,8 @@ Discourse.UserBadge = Discourse.Model.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Discourse.UserBadge.reopenClass({
|
UserBadge.reopenClass({
|
||||||
/**
|
|
||||||
Create `Discourse.UserBadge` instances from the server JSON response.
|
|
||||||
|
|
||||||
@method createFromJson
|
|
||||||
@param {Object} json The JSON returned by the server
|
|
||||||
@returns Array or instance of `Discourse.UserBadge` depending on the input JSON
|
|
||||||
**/
|
|
||||||
createFromJson: function(json) {
|
createFromJson: function(json) {
|
||||||
// Create User objects.
|
// Create User objects.
|
||||||
if (json.users === undefined) { json.users = []; }
|
if (json.users === undefined) { json.users = []; }
|
||||||
|
@ -51,7 +39,7 @@ Discourse.UserBadge.reopenClass({
|
||||||
// Create the badges.
|
// Create the badges.
|
||||||
if (json.badges === undefined) { json.badges = []; }
|
if (json.badges === undefined) { json.badges = []; }
|
||||||
var badges = {};
|
var badges = {};
|
||||||
Discourse.Badge.createFromJson(json).forEach(function(badge) {
|
Badge.createFromJson(json).forEach(function(badge) {
|
||||||
badges[badge.get('id')] = badge;
|
badges[badge.get('id')] = badge;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -146,3 +134,5 @@ Discourse.UserBadge.reopenClass({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export default UserBadge;
|
|
@ -6,6 +6,8 @@ import UserPostsStream from 'discourse/models/user-posts-stream';
|
||||||
import Singleton from 'discourse/mixins/singleton';
|
import Singleton from 'discourse/mixins/singleton';
|
||||||
import { longDate } from 'discourse/lib/formatter';
|
import { longDate } from 'discourse/lib/formatter';
|
||||||
import computed from 'ember-addons/ember-computed-decorators';
|
import computed from 'ember-addons/ember-computed-decorators';
|
||||||
|
import Badge from 'discourse/models/badge';
|
||||||
|
import UserBadge from 'discourse/models/user-badge';
|
||||||
|
|
||||||
const User = RestModel.extend({
|
const User = RestModel.extend({
|
||||||
|
|
||||||
|
@ -299,8 +301,8 @@ const User = RestModel.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Em.isEmpty(json.user.featured_user_badge_ids)) {
|
if (!Em.isEmpty(json.user.featured_user_badge_ids)) {
|
||||||
var userBadgesMap = {};
|
const userBadgesMap = {};
|
||||||
Discourse.UserBadge.createFromJson(json).forEach(function(userBadge) {
|
UserBadge.createFromJson(json).forEach(function(userBadge) {
|
||||||
userBadgesMap[ userBadge.get('id') ] = userBadge;
|
userBadgesMap[ userBadge.get('id') ] = userBadge;
|
||||||
});
|
});
|
||||||
json.user.featured_user_badges = json.user.featured_user_badge_ids.map(function(id) {
|
json.user.featured_user_badges = json.user.featured_user_badge_ids.map(function(id) {
|
||||||
|
@ -309,7 +311,7 @@ const User = RestModel.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (json.user.card_badge) {
|
if (json.user.card_badge) {
|
||||||
json.user.card_badge = Discourse.Badge.create(json.user.card_badge);
|
json.user.card_badge = Badge.create(json.user.card_badge);
|
||||||
}
|
}
|
||||||
|
|
||||||
user.setProperties(json.user);
|
user.setProperties(json.user);
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
|
import Badge from 'discourse/models/badge';
|
||||||
|
|
||||||
export default Discourse.Route.extend({
|
export default Discourse.Route.extend({
|
||||||
model() {
|
model() {
|
||||||
if (PreloadStore.get("badges")) {
|
if (PreloadStore.get("badges")) {
|
||||||
return PreloadStore.getAndRemove("badges").then(json => Discourse.Badge.createFromJson(json));
|
return PreloadStore.getAndRemove("badges").then(json => Badge.createFromJson(json));
|
||||||
} else {
|
} else {
|
||||||
return Discourse.Badge.findAll({ onlyListable: true });
|
return Badge.findAll({ onlyListable: true });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
import UserBadge from 'discourse/models/user-badge';
|
||||||
|
import Badge from 'discourse/models/badge';
|
||||||
|
|
||||||
export default Discourse.Route.extend({
|
export default Discourse.Route.extend({
|
||||||
actions: {
|
actions: {
|
||||||
didTransition() {
|
didTransition() {
|
||||||
|
@ -15,14 +18,14 @@ export default Discourse.Route.extend({
|
||||||
|
|
||||||
model(params) {
|
model(params) {
|
||||||
if (PreloadStore.get("badge")) {
|
if (PreloadStore.get("badge")) {
|
||||||
return PreloadStore.getAndRemove("badge").then(json => Discourse.Badge.createFromJson(json));
|
return PreloadStore.getAndRemove("badge").then(json => Badge.createFromJson(json));
|
||||||
} else {
|
} else {
|
||||||
return Discourse.Badge.findById(params.id);
|
return Badge.findById(params.id);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
afterModel(model) {
|
afterModel(model) {
|
||||||
return Discourse.UserBadge.findByBadgeId(model.get("id")).then(userBadges => {
|
return UserBadge.findByBadgeId(model.get("id")).then(userBadges => {
|
||||||
this.userBadges = userBadges;
|
this.userBadges = userBadges;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import showModal from "discourse/lib/show-modal";
|
import showModal from "discourse/lib/show-modal";
|
||||||
import OpenComposer from "discourse/mixins/open-composer";
|
import OpenComposer from "discourse/mixins/open-composer";
|
||||||
|
|
||||||
Discourse.DiscoveryCategoriesRoute = Discourse.Route.extend(OpenComposer, {
|
const DiscoveryCategoriesRoute = Discourse.Route.extend(OpenComposer, {
|
||||||
renderTemplate() {
|
renderTemplate() {
|
||||||
this.render("navigation/categories", { outlet: "navigation-bar" });
|
this.render("navigation/categories", { outlet: "navigation-bar" });
|
||||||
this.render("discovery/categories", { outlet: "list-container" });
|
this.render("discovery/categories", { outlet: "list-container" });
|
||||||
|
@ -67,4 +67,4 @@ Discourse.DiscoveryCategoriesRoute = Discourse.Route.extend(OpenComposer, {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export default Discourse.DiscoveryCategoriesRoute;
|
export default DiscoveryCategoriesRoute;
|
|
@ -1,8 +1,9 @@
|
||||||
|
import UserBadge from 'discourse/models/badge';
|
||||||
import RestrictedUserRoute from "discourse/routes/restricted-user";
|
import RestrictedUserRoute from "discourse/routes/restricted-user";
|
||||||
|
|
||||||
export default RestrictedUserRoute.extend({
|
export default RestrictedUserRoute.extend({
|
||||||
model: function() {
|
model: function() {
|
||||||
return Discourse.UserBadge.findByUsername(this.modelFor('user').get('username'));
|
return UserBadge.findByUsername(this.modelFor('user').get('username'));
|
||||||
},
|
},
|
||||||
|
|
||||||
renderTemplate: function() {
|
renderTemplate: function() {
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
import UserBadge from 'discourse/models/user-badge';
|
||||||
import RestrictedUserRoute from "discourse/routes/restricted-user";
|
import RestrictedUserRoute from "discourse/routes/restricted-user";
|
||||||
|
|
||||||
export default RestrictedUserRoute.extend({
|
export default RestrictedUserRoute.extend({
|
||||||
model: function() {
|
model: function() {
|
||||||
return Discourse.UserBadge.findByUsername(this.modelFor('user').get('username'));
|
return UserBadge.findByUsername(this.modelFor('user').get('username'));
|
||||||
},
|
},
|
||||||
|
|
||||||
renderTemplate: function() {
|
renderTemplate: function() {
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import ViewingActionType from "discourse/mixins/viewing-action-type";
|
import ViewingActionType from "discourse/mixins/viewing-action-type";
|
||||||
|
import UserBadge from 'discourse/models/user-badge';
|
||||||
|
|
||||||
export default Discourse.Route.extend(ViewingActionType, {
|
export default Discourse.Route.extend(ViewingActionType, {
|
||||||
model() {
|
model() {
|
||||||
return Discourse.UserBadge.findByUsername(this.modelFor("user").get("username_lower"), { grouped: true });
|
return UserBadge.findByUsername(this.modelFor("user").get("username_lower"), { grouped: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
setupController(controller, model) {
|
setupController(controller, model) {
|
||||||
|
|
|
@ -25,6 +25,9 @@
|
||||||
//= require ./discourse/lib/eyeline
|
//= require ./discourse/lib/eyeline
|
||||||
//= require ./discourse/helpers/register-unbound
|
//= require ./discourse/helpers/register-unbound
|
||||||
//= require ./discourse/mixins/scrolling
|
//= require ./discourse/mixins/scrolling
|
||||||
|
//= require ./discourse/models/rest
|
||||||
|
//= require ./discourse/models/badge-grouping
|
||||||
|
//= require ./discourse/models/badge
|
||||||
//= require_tree ./discourse/mixins
|
//= require_tree ./discourse/mixins
|
||||||
//= require ./discourse/lib/ajax-error
|
//= require ./discourse/lib/ajax-error
|
||||||
//= require ./discourse/lib/markdown
|
//= require ./discourse/lib/markdown
|
||||||
|
@ -51,6 +54,7 @@
|
||||||
//= require ./discourse/models/draft
|
//= require ./discourse/models/draft
|
||||||
//= require ./discourse/models/composer
|
//= require ./discourse/models/composer
|
||||||
//= require ./discourse/models/invite
|
//= require ./discourse/models/invite
|
||||||
|
//= require ./discourse/models/user-badge
|
||||||
//= require ./discourse/controllers/discovery-sortable
|
//= require ./discourse/controllers/discovery-sortable
|
||||||
//= require ./discourse/controllers/navigation/default
|
//= require ./discourse/controllers/navigation/default
|
||||||
//= require ./discourse/views/grouped
|
//= require ./discourse/views/grouped
|
||||||
|
|
|
@ -87,7 +87,9 @@ class DiscoursePluginRegistry
|
||||||
self.asset_globs.each do |g|
|
self.asset_globs.each do |g|
|
||||||
root, ext, options = *g
|
root, ext, options = *g
|
||||||
|
|
||||||
next if options[:admin] && !each_options[:admin]
|
if each_options[:admin]
|
||||||
|
next unless options[:admin]
|
||||||
|
end
|
||||||
|
|
||||||
Dir.glob("#{root}/**/*") do |f|
|
Dir.glob("#{root}/**/*") do |f|
|
||||||
yield f, ext
|
yield f, ext
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
|
import Badge from 'discourse/models/badge';
|
||||||
|
|
||||||
moduleFor('controller:admin-user-badges', {
|
moduleFor('controller:admin-user-badges', {
|
||||||
needs: ['controller:adminUser']
|
needs: ['controller:adminUser']
|
||||||
});
|
});
|
||||||
|
|
||||||
test("grantableBadges", function() {
|
test("grantableBadges", function() {
|
||||||
var badge_first = Discourse.Badge.create({id: 3, name: "A Badge"});
|
const badgeFirst = Badge.create({id: 3, name: "A Badge"});
|
||||||
var badge_middle = Discourse.Badge.create({id: 1, name: "My Badge"});
|
const badgeMiddle = Badge.create({id: 1, name: "My Badge"});
|
||||||
var badge_last = Discourse.Badge.create({id: 2, name: "Zoo Badge"});
|
const badgeLast = Badge.create({id: 2, name: "Zoo Badge"});
|
||||||
var controller = this.subject({ badges: [badge_last, badge_first, badge_middle] });
|
const controller = this.subject({ badges: [badgeLast, badgeFirst, badgeMiddle] });
|
||||||
var sorted_names = [badge_first.name, badge_middle.name, badge_last.name];
|
const sortedNames = [badgeFirst.name, badgeMiddle.name, badgeLast.name];
|
||||||
var badge_names = controller.get('grantableBadges').map(function(badge) {
|
const badgeNames = controller.get('grantableBadges').map(function(badge) {
|
||||||
return badge.name;
|
return badge.name;
|
||||||
});
|
});
|
||||||
|
|
||||||
deepEqual(badge_names, sorted_names, "sorts badges by name");
|
deepEqual(badgeNames, sortedNames, "sorts badges by name");
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,43 +1,45 @@
|
||||||
module("Discourse.Badge");
|
import Badge from 'discourse/models/badge';
|
||||||
|
|
||||||
|
module("model:badge");
|
||||||
|
|
||||||
test('newBadge', function() {
|
test('newBadge', function() {
|
||||||
var badge1 = Discourse.Badge.create({name: "New Badge"}),
|
const badge1 = Badge.create({name: "New Badge"}),
|
||||||
badge2 = Discourse.Badge.create({id: 1, name: "Old Badge"});
|
badge2 = Badge.create({id: 1, name: "Old Badge"});
|
||||||
ok(badge1.get('newBadge'), "badges without ids are new");
|
ok(badge1.get('newBadge'), "badges without ids are new");
|
||||||
ok(!badge2.get('newBadge'), "badges with ids are not new");
|
ok(!badge2.get('newBadge'), "badges with ids are not new");
|
||||||
});
|
});
|
||||||
|
|
||||||
test('displayName', function() {
|
test('displayName', function() {
|
||||||
var badge1 = Discourse.Badge.create({id: 1, name: "Test Badge 1"});
|
const badge1 = Badge.create({id: 1, name: "Test Badge 1"});
|
||||||
equal(badge1.get('displayName'), "Test Badge 1", "falls back to the original name in the absence of a translation");
|
equal(badge1.get('displayName'), "Test Badge 1", "falls back to the original name in the absence of a translation");
|
||||||
|
|
||||||
sandbox.stub(I18n, "t").returnsArg(0);
|
sandbox.stub(I18n, "t").returnsArg(0);
|
||||||
var badge2 = Discourse.Badge.create({id: 2, name: "Test Badge 2"});
|
const badge2 = Badge.create({id: 2, name: "Test Badge 2"});
|
||||||
equal(badge2.get('displayName'), "badges.badge.test_badge_2.name", "uses translation when available");
|
equal(badge2.get('displayName'), "badges.badge.test_badge_2.name", "uses translation when available");
|
||||||
});
|
});
|
||||||
|
|
||||||
test('translatedDescription', function() {
|
test('translatedDescription', function() {
|
||||||
var badge1 = Discourse.Badge.create({id: 1, name: "Test Badge 1", description: "TEST"});
|
const badge1 = Badge.create({id: 1, name: "Test Badge 1", description: "TEST"});
|
||||||
equal(badge1.get('translatedDescription'), null, "returns null when no translation exists");
|
equal(badge1.get('translatedDescription'), null, "returns null when no translation exists");
|
||||||
|
|
||||||
var badge2 = Discourse.Badge.create({id: 2, name: "Test Badge 2 **"});
|
const badge2 = Badge.create({id: 2, name: "Test Badge 2 **"});
|
||||||
sandbox.stub(I18n, "t").returns("description translation");
|
sandbox.stub(I18n, "t").returns("description translation");
|
||||||
equal(badge2.get('translatedDescription'), "description translation", "users translated description");
|
equal(badge2.get('translatedDescription'), "description translation", "users translated description");
|
||||||
});
|
});
|
||||||
|
|
||||||
test('displayDescription', function() {
|
test('displayDescription', function() {
|
||||||
var badge1 = Discourse.Badge.create({id: 1, name: "Test Badge 1", description: "TEST"});
|
const badge1 = Badge.create({id: 1, name: "Test Badge 1", description: "TEST"});
|
||||||
equal(badge1.get('displayDescription'), "TEST", "returns original description when no translation exists");
|
equal(badge1.get('displayDescription'), "TEST", "returns original description when no translation exists");
|
||||||
|
|
||||||
var badge2 = Discourse.Badge.create({id: 2, name: "Test Badge 2 **"});
|
const badge2 = Badge.create({id: 2, name: "Test Badge 2 **"});
|
||||||
sandbox.stub(I18n, "t").returns("description translation");
|
sandbox.stub(I18n, "t").returns("description translation");
|
||||||
equal(badge2.get('displayDescription'), "description translation", "users translated description");
|
equal(badge2.get('displayDescription'), "description translation", "users translated description");
|
||||||
});
|
});
|
||||||
|
|
||||||
test('createFromJson array', function() {
|
test('createFromJson array', function() {
|
||||||
var badgesJson = {"badge_types":[{"id":6,"name":"Silver 1"}],"badges":[{"id":1126,"name":"Badge 1","description":null,"badge_type_id":6}]};
|
const badgesJson = {"badge_types":[{"id":6,"name":"Silver 1"}],"badges":[{"id":1126,"name":"Badge 1","description":null,"badge_type_id":6}]};
|
||||||
|
|
||||||
var badges = Discourse.Badge.createFromJson(badgesJson);
|
const badges = Badge.createFromJson(badgesJson);
|
||||||
|
|
||||||
ok(Array.isArray(badges), "returns an array");
|
ok(Array.isArray(badges), "returns an array");
|
||||||
equal(badges[0].get('name'), "Badge 1", "badge details are set");
|
equal(badges[0].get('name'), "Badge 1", "badge details are set");
|
||||||
|
@ -45,16 +47,16 @@ test('createFromJson array', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('createFromJson single', function() {
|
test('createFromJson single', function() {
|
||||||
var badgeJson = {"badge_types":[{"id":6,"name":"Silver 1"}],"badge":{"id":1126,"name":"Badge 1","description":null,"badge_type_id":6}};
|
const badgeJson = {"badge_types":[{"id":6,"name":"Silver 1"}],"badge":{"id":1126,"name":"Badge 1","description":null,"badge_type_id":6}};
|
||||||
|
|
||||||
var badge = Discourse.Badge.createFromJson(badgeJson);
|
const badge = Badge.createFromJson(badgeJson);
|
||||||
|
|
||||||
ok(!Array.isArray(badge), "does not returns an array");
|
ok(!Array.isArray(badge), "does not returns an array");
|
||||||
});
|
});
|
||||||
|
|
||||||
test('updateFromJson', function() {
|
test('updateFromJson', function() {
|
||||||
var badgeJson = {"badge_types":[{"id":6,"name":"Silver 1"}],"badge":{"id":1126,"name":"Badge 1","description":null,"badge_type_id":6}};
|
const badgeJson = {"badge_types":[{"id":6,"name":"Silver 1"}],"badge":{"id":1126,"name":"Badge 1","description":null,"badge_type_id":6}};
|
||||||
var badge = Discourse.Badge.create({name: "Badge 1"});
|
const badge = Badge.create({name: "Badge 1"});
|
||||||
badge.updateFromJson(badgeJson);
|
badge.updateFromJson(badgeJson);
|
||||||
equal(badge.get('id'), 1126, "id is set");
|
equal(badge.get('id'), 1126, "id is set");
|
||||||
equal(badge.get('badge_type.name'), "Silver 1", "badge_type reference is set");
|
equal(badge.get('badge_type.name'), "Silver 1", "badge_type reference is set");
|
||||||
|
@ -62,7 +64,7 @@ test('updateFromJson', function() {
|
||||||
|
|
||||||
test('save', function() {
|
test('save', function() {
|
||||||
sandbox.stub(Discourse, 'ajax').returns(Ember.RSVP.resolve({}));
|
sandbox.stub(Discourse, 'ajax').returns(Ember.RSVP.resolve({}));
|
||||||
var badge = Discourse.Badge.create({name: "New Badge", description: "This is a new badge.", badge_type_id: 1});
|
const badge = Badge.create({name: "New Badge", description: "This is a new badge.", badge_type_id: 1});
|
||||||
// TODO: clean API
|
// TODO: clean API
|
||||||
badge.save(["name", "description", "badge_type_id"]);
|
badge.save(["name", "description", "badge_type_id"]);
|
||||||
ok(Discourse.ajax.calledOnce, "saved badge");
|
ok(Discourse.ajax.calledOnce, "saved badge");
|
||||||
|
@ -70,7 +72,7 @@ test('save', function() {
|
||||||
|
|
||||||
test('destroy', function() {
|
test('destroy', function() {
|
||||||
sandbox.stub(Discourse, 'ajax');
|
sandbox.stub(Discourse, 'ajax');
|
||||||
var badge = Discourse.Badge.create({name: "New Badge", description: "This is a new badge.", badge_type_id: 1});
|
const badge = Badge.create({name: "New Badge", description: "This is a new badge.", badge_type_id: 1});
|
||||||
badge.destroy();
|
badge.destroy();
|
||||||
ok(!Discourse.ajax.calledOnce, "no AJAX call for a new badge");
|
ok(!Discourse.ajax.calledOnce, "no AJAX call for a new badge");
|
||||||
badge.set('id', 3);
|
badge.set('id', 3);
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
module("Discourse.UserBadge");
|
import UserBadge from 'discourse/models/user-badge';
|
||||||
|
|
||||||
var singleBadgeJson = {"badges":[{"id":874,"name":"Badge 2","description":null,"badge_type_id":7}],"badge_types":[{"id":7,"name":"Silver 2"}],"users":[{"id":13470,"username":"anne3","avatar_template":"//www.gravatar.com/avatar/a4151b1fd72089c54e2374565a87da7f.png?s={size}\u0026r=pg\u0026d=identicon"}],"user_badge":{"id":665,"granted_at":"2014-03-09T20:30:01.190-04:00","badge_id":874,"granted_by_id":13470}},
|
module("model:user-badge");
|
||||||
|
|
||||||
|
const singleBadgeJson = {"badges":[{"id":874,"name":"Badge 2","description":null,"badge_type_id":7}],"badge_types":[{"id":7,"name":"Silver 2"}],"users":[{"id":13470,"username":"anne3","avatar_template":"//www.gravatar.com/avatar/a4151b1fd72089c54e2374565a87da7f.png?s={size}\u0026r=pg\u0026d=identicon"}],"user_badge":{"id":665,"granted_at":"2014-03-09T20:30:01.190-04:00","badge_id":874,"granted_by_id":13470}},
|
||||||
multipleBadgesJson = {"badges":[{"id":880,"name":"Badge 8","description":null,"badge_type_id":13}],"badge_types":[{"id":13,"name":"Silver 8"}],"users":[],"user_badges":[{"id":668,"granted_at":"2014-03-09T20:30:01.420-04:00","badge_id":880,"granted_by_id":null}]};
|
multipleBadgesJson = {"badges":[{"id":880,"name":"Badge 8","description":null,"badge_type_id":13}],"badge_types":[{"id":13,"name":"Silver 8"}],"users":[],"user_badges":[{"id":668,"granted_at":"2014-03-09T20:30:01.420-04:00","badge_id":880,"granted_by_id":null}]};
|
||||||
|
|
||||||
test('createFromJson single', function() {
|
test('createFromJson single', function() {
|
||||||
var userBadge = Discourse.UserBadge.createFromJson(singleBadgeJson);
|
const userBadge = UserBadge.createFromJson(singleBadgeJson);
|
||||||
ok(!Array.isArray(userBadge), "does not return an array");
|
ok(!Array.isArray(userBadge), "does not return an array");
|
||||||
equal(userBadge.get('badge.name'), "Badge 2", "badge reference is set");
|
equal(userBadge.get('badge.name'), "Badge 2", "badge reference is set");
|
||||||
equal(userBadge.get('badge.badge_type.name'), "Silver 2", "badge.badge_type reference is set");
|
equal(userBadge.get('badge.badge_type.name'), "Silver 2", "badge.badge_type reference is set");
|
||||||
|
@ -12,7 +14,7 @@ test('createFromJson single', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('createFromJson array', function() {
|
test('createFromJson array', function() {
|
||||||
var userBadges = Discourse.UserBadge.createFromJson(multipleBadgesJson);
|
const userBadges = UserBadge.createFromJson(multipleBadgesJson);
|
||||||
ok(Array.isArray(userBadges), "returns an array");
|
ok(Array.isArray(userBadges), "returns an array");
|
||||||
equal(userBadges[0].get('granted_by'), null, "granted_by reference is not set when null");
|
equal(userBadges[0].get('granted_by'), null, "granted_by reference is not set when null");
|
||||||
});
|
});
|
||||||
|
@ -20,7 +22,7 @@ test('createFromJson array', function() {
|
||||||
asyncTestDiscourse('findByUsername', function() {
|
asyncTestDiscourse('findByUsername', function() {
|
||||||
expect(2);
|
expect(2);
|
||||||
sandbox.stub(Discourse, 'ajax').returns(Ember.RSVP.resolve(multipleBadgesJson));
|
sandbox.stub(Discourse, 'ajax').returns(Ember.RSVP.resolve(multipleBadgesJson));
|
||||||
Discourse.UserBadge.findByUsername("anne3").then(function(badges) {
|
UserBadge.findByUsername("anne3").then(function(badges) {
|
||||||
ok(Array.isArray(badges), "returns an array");
|
ok(Array.isArray(badges), "returns an array");
|
||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
|
@ -30,7 +32,7 @@ asyncTestDiscourse('findByUsername', function() {
|
||||||
asyncTestDiscourse('findByBadgeId', function() {
|
asyncTestDiscourse('findByBadgeId', function() {
|
||||||
expect(2);
|
expect(2);
|
||||||
sandbox.stub(Discourse, 'ajax').returns(Ember.RSVP.resolve(multipleBadgesJson));
|
sandbox.stub(Discourse, 'ajax').returns(Ember.RSVP.resolve(multipleBadgesJson));
|
||||||
Discourse.UserBadge.findByBadgeId(880).then(function(badges) {
|
UserBadge.findByBadgeId(880).then(function(badges) {
|
||||||
ok(Array.isArray(badges), "returns an array");
|
ok(Array.isArray(badges), "returns an array");
|
||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
|
@ -40,7 +42,7 @@ asyncTestDiscourse('findByBadgeId', function() {
|
||||||
asyncTestDiscourse('grant', function() {
|
asyncTestDiscourse('grant', function() {
|
||||||
expect(2);
|
expect(2);
|
||||||
sandbox.stub(Discourse, 'ajax').returns(Ember.RSVP.resolve(singleBadgeJson));
|
sandbox.stub(Discourse, 'ajax').returns(Ember.RSVP.resolve(singleBadgeJson));
|
||||||
Discourse.UserBadge.grant(1, "username").then(function(userBadge) {
|
UserBadge.grant(1, "username").then(function(userBadge) {
|
||||||
ok(!Array.isArray(userBadge), "does not return an array");
|
ok(!Array.isArray(userBadge), "does not return an array");
|
||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
|
@ -49,7 +51,7 @@ asyncTestDiscourse('grant', function() {
|
||||||
|
|
||||||
test('revoke', function() {
|
test('revoke', function() {
|
||||||
sandbox.stub(Discourse, 'ajax');
|
sandbox.stub(Discourse, 'ajax');
|
||||||
var userBadge = Discourse.UserBadge.create({id: 1});
|
const userBadge = UserBadge.create({id: 1});
|
||||||
userBadge.revoke();
|
userBadge.revoke();
|
||||||
ok(Discourse.ajax.calledOnce, "makes an AJAX call");
|
ok(Discourse.ajax.calledOnce, "makes an AJAX call");
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user