Admin badge creation bug fixes.

This commit is contained in:
Vikhyat Korrapati 2014-05-24 08:03:46 +05:30
parent d208e4d517
commit a79bf11edb
7 changed files with 41 additions and 13 deletions

View file

@ -21,15 +21,42 @@ Discourse.AdminBadgesController = Ember.ArrayController.extend({
/** /**
Badge that is currently selected. Badge that is currently selected.
@property selectedItem @property selectedItem
@type {Discourse.Badge} @type {Discourse.Badge}
**/ **/
selectedItem: function() { selectedItem: function() {
var selectedId = parseInt(this.get('selectedId')); if (this.get('selectedId') === undefined || this.get('selectedId') === "undefined") {
// New Badge
return this.get('newBadge');
} else {
// Existing Badge
var selectedId = parseInt(this.get('selectedId'));
return this.get('model').filter(function(badge) {
return parseInt(badge.get('id')) === selectedId;
})[0];
}
}.property('selectedId', 'newBadge'),
/**
Unsaved badge, if one exists.
@property newBadge
@type {Discourse.Badge}
**/
newBadge: function() {
return this.get('model').filter(function(badge) { return this.get('model').filter(function(badge) {
return badge.get('id') === selectedId; return badge.get('id') === undefined;
})[0]; })[0];
}.property('selectedId'), }.property('model.@each.id'),
/**
Whether a new unsaved badge exists.
@property newBadgeExists
@type {Discourse.Badge}
**/
newBadgeExists: Em.computed.notEmpty('newBadge'),
/** /**
We don't allow setting a description if a translation for the given badge We don't allow setting a description if a translation for the given badge
@ -55,7 +82,7 @@ Discourse.AdminBadgesController = Ember.ArrayController.extend({
@method newBadge @method newBadge
**/ **/
newBadge: function() { createNewBadge: function() {
var badge = Discourse.Badge.create({ var badge = Discourse.Badge.create({
name: I18n.t('admin.badges.new_badge') name: I18n.t('admin.badges.new_badge')
}); });

View file

@ -14,7 +14,7 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
<button {{action newBadge}} class='btn'><i class="fa fa-plus"></i>{{i18n admin.badges.new}}</button> <button {{action createNewBadge}} {{bind-attr disabled=newBadgeExists}} class='btn'><i class="fa fa-plus"></i>{{i18n admin.badges.new}}</button>
</div> </div>
{{#if selectedItem}} {{#if selectedItem}}

View file

@ -115,8 +115,8 @@ Discourse.Badge = Discourse.Model.extend({
name: this.get('name'), name: this.get('name'),
description: this.get('description'), description: this.get('description'),
badge_type_id: this.get('badge_type_id'), badge_type_id: this.get('badge_type_id'),
allow_title: this.get('allow_title'), allow_title: !!this.get('allow_title'),
multiple_grant: this.get('multiple_grant') multiple_grant: !!this.get('multiple_grant')
} }
}).then(function(json) { }).then(function(json) {
self.updateFromJson(json); self.updateFromJson(json);

View file

@ -5,6 +5,7 @@ class Badge < ActiveRecord::Base
validates :name, presence: true, uniqueness: true validates :name, presence: true, uniqueness: true
validates :badge_type, presence: true validates :badge_type, presence: true
validates :allow_title, inclusion: [true, false] validates :allow_title, inclusion: [true, false]
validates :multiple_grant, inclusion: [true, false]
def self.trust_level_badge_ids def self.trust_level_badge_ids
(1..4).to_a (1..4).to_a
@ -33,7 +34,7 @@ end
# created_at :datetime # created_at :datetime
# updated_at :datetime # updated_at :datetime
# allow_title :boolean default(FALSE), not null # allow_title :boolean default(FALSE), not null
# multiple_grant :boolean default(FALSE) # multiple_grant :boolean default(FALSE), not null
# #
# Indexes # Indexes
# #

View file

@ -1,6 +1,6 @@
class AddMultipleAwardToBadges < ActiveRecord::Migration class AddMultipleAwardToBadges < ActiveRecord::Migration
def change def change
add_column :badges, :multiple_grant, :boolean, default: false add_column :badges, :multiple_grant, :boolean, default: false, null: false
reversible do |dir| reversible do |dir|
dir.up do dir.up do

View file

@ -35,12 +35,12 @@ describe Admin::BadgesController do
context '.update' do context '.update' do
it 'returns success' do it 'returns success' do
xhr :put, :update, id: badge.id, name: "123456", badge_type_id: badge.badge_type_id, allow_title: false xhr :put, :update, id: badge.id, name: "123456", badge_type_id: badge.badge_type_id, allow_title: false, multiple_grant: false
response.should be_success response.should be_success
end end
it 'updates the badge' do it 'updates the badge' do
xhr :put, :update, id: badge.id, name: "123456", badge_type_id: badge.badge_type_id, allow_title: false xhr :put, :update, id: badge.id, name: "123456", badge_type_id: badge.badge_type_id, allow_title: false, multiple_grant: true
badge.reload.name.should eq('123456') badge.reload.name.should eq('123456')
end end
end end

View file

@ -15,9 +15,9 @@ test("canEditDescription", function() {
ok(!controller.get('canEditDescription'), "shows the displayName when it is different from the name"); ok(!controller.get('canEditDescription'), "shows the displayName when it is different from the name");
}); });
test("newBadge", function() { test("createNewBadge", function() {
var controller = testController(Discourse.AdminBadgesController, []); var controller = testController(Discourse.AdminBadgesController, []);
controller.send('newBadge'); controller.send('createNewBadge');
equal(controller.get('model.length'), 1, "adds a new badge to the list of badges"); equal(controller.get('model.length'), 1, "adds a new badge to the list of badges");
}); });