mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 07:07:35 +01:00
prevent selling negative items (#10061)
This commit is contained in:
@@ -75,6 +75,16 @@ describe('shared.ops.sell', () => {
|
||||
}
|
||||
});
|
||||
|
||||
it('returns an error when the requested amount is negative', (done) => {
|
||||
try {
|
||||
sell(user, {params: { type, key }, query: {amount: -42} });
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(BadRequest);
|
||||
expect(err.message).to.equal(i18n.t('positiveAmountRequired', {type}));
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
it('reduces item count from user', () => {
|
||||
sell(user, {params: { type, key } });
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
b.how-many-to-sell {{ $t('howManyToSell') }}
|
||||
|
||||
div
|
||||
b-input.itemsToSell(type="number", v-model="selectedAmountToSell", :max="itemCount", min="1")
|
||||
b-input.itemsToSell(type="number", v-model="selectedAmountToSell", :max="itemCount", min="1", @keyup.native="preventNegative($event)")
|
||||
|
||||
span.svg-icon.inline.icon-32(aria-hidden="true", v-html="icons.gold")
|
||||
span.value {{ item.value }}
|
||||
@@ -141,6 +141,13 @@
|
||||
|
||||
this.selectedAmountToSell = 1;
|
||||
},
|
||||
preventNegative ($event) {
|
||||
let value = $event.target.value;
|
||||
|
||||
if (isNaN($event.target.valueAsNumber) || Number(value) < 0) {
|
||||
this.selectedAmountToSell = 0;
|
||||
}
|
||||
},
|
||||
sellItems () {
|
||||
this.$store.dispatch('shops:sellItems', {
|
||||
type: this.itemType,
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
"invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.",
|
||||
"mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.",
|
||||
"typeRequired": "Type is required",
|
||||
"positiveAmountRequired": "Positive amount is required",
|
||||
"keyRequired": "Key is required",
|
||||
"notAccteptedType": "Type must be in [eggs, hatchingPotions, premiumHatchingPotions, food, quests, gear]",
|
||||
"contentKeyNotFound": "Key not found for Content <%= type %>",
|
||||
|
||||
@@ -17,6 +17,10 @@ module.exports = function sell (user, req = {}) {
|
||||
let type = get(req.params, 'type');
|
||||
let amount = get(req.query, 'amount', 1);
|
||||
|
||||
if (amount < 0) {
|
||||
throw new BadRequest(i18n.t('positiveAmountRequired', req.language));
|
||||
}
|
||||
|
||||
if (!type) {
|
||||
throw new BadRequest(i18n.t('typeRequired', req.language));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user