Skip to content

Commit

Permalink
Fixed issue #9: Non-standard conversion from given value into display…
Browse files Browse the repository at this point in the history
…ed value

version set to 1.2.1
  • Loading branch information
jsillitoe committed Feb 13, 2017
1 parent b50a03e commit b58119b
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 2 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-currency-input",
"version": "1.1.1",
"version": "1.2.1",
"description": "React component for inputing currency amounts",
"main": "lib/index.js",
"scripts": {
Expand Down
11 changes: 11 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,17 @@ const CurrencyInput = React.createClass({
let initialValue = props.value;
if (!initialValue) {
initialValue = props.allowEmpty? null : '';
}else{

if (typeof initialValue == 'string') {
initialValue = Number.parseFloat(initialValue);
}
initialValue = Number(initialValue).toLocaleString(undefined, {
style : 'decimal',
minimumFractionDigits: props.precision,
maximumFractionDigits: props.precision
})

}

const { maskedValue, value } = mask(
Expand Down
87 changes: 86 additions & 1 deletion test/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ describe('react-currency-input', function(){
});

it('<CurrencyInput> should have masked value of "123.456,789"', function() {
expect(this.renderedComponent.getMaskedValue()).to.equal('123.456,789')
expect(this.renderedComponent.getMaskedValue()).to.equal('123.456.789,000')
});

it('<input> should be of type "tel"', function() {
Expand All @@ -62,6 +62,91 @@ describe('react-currency-input', function(){
});


describe('properly convert number value props into display values', function(){

it('adds decimals to whole numbers to match precision', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="2" value={123456789} />
);
expect (renderedComponent.getMaskedValue()).to.equal('123,456,789.00')
});

it('Does not change value when precision matches', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="2" value={1234567.89} />
);
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.89')
});


it('Rounds down properly when an number with extra decimals is passed in', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="2" value={1234567.89123} />
);
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.89')
});


it('Rounds up properly when an number with extra decimals is passed in', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="2" value={1234567.89999} />
);
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.90')
});

it('Rounds up the whole number when an number with extra decimals is passed in', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="0" value={1234567.89999} />
);
expect (renderedComponent.getMaskedValue()).to.equal('1,234,568')
});

});


describe('properly convert string value props into display values', function(){

it('adds decimals to whole numbers to match precision', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="2" value="6300" />
);
expect (renderedComponent.getMaskedValue()).to.equal('6,300.00')
});


it('Does not change value when precision matches', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="2" value="1234567.89" />
);
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.89')
});


it('Rounds down properly when an number with extra decimals is passed in', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="2" value="1234567.89123" />
);
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.89')
});


it('Rounds up properly when an number with extra decimals is passed in', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="2" value="1234567.89999" />
);
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.90')
});


it('Rounds up the whole number when an number with extra decimals is passed in', function() {
var renderedComponent = ReactTestUtils.renderIntoDocument(
<CurrencyInput precision="0" value="1234567.89999" />
);
expect (renderedComponent.getMaskedValue()).to.equal('1,234,568')
});

});

describe('change events', function(){

before('render and locate element', function() {
Expand Down

0 comments on commit b58119b

Please sign in to comment.