Skip to content

Commit 1b93a71

Browse files
Merge pull request #25 from michael-rubel/fix/big-number-internal-immutability
Make internal `BigNumber` object immutable 🔧
2 parents e1c0ecc + 81bc3cf commit 1b93a71

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

src/Collection/Primitive/Number.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ public function __construct(int|string $number, protected int $scale = 2)
5252
throw new InvalidArgumentException(static::IMMUTABLE_MESSAGE);
5353
}
5454

55-
$this->bigNumber = new BigNumber($this->sanitize($number), $this->scale);
55+
$this->bigNumber = new BigNumber(
56+
$this->sanitize($number), $this->scale, mutable: false
57+
);
5658
}
5759

5860
/**

tests/Unit/Primitive/NumberTest.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@
234234
test('number has immutable properties', function () {
235235
$this->expectException(\InvalidArgumentException::class);
236236
$valueObject = new Number('1.2000');
237-
$this->assertEquals(new BigNumber('1.20', 2), $valueObject->bigNumber);
237+
$this->assertEquals(new BigNumber('1.20', 2, false), $valueObject->bigNumber);
238238
$valueObject->bigNumber = new BigNumber('1.20');
239239
});
240240

@@ -244,6 +244,15 @@
244244
$valueObject->__construct('1.5000');
245245
});
246246

247+
test('big number is immutable', function () {
248+
Number::macro('isImmutable', function () {
249+
return ! $this->bigNumber->isMutable();
250+
});
251+
252+
$number = new Number('1.2000');
253+
$this->assertTrue($number->isImmutable());
254+
});
255+
247256
test('number uses sanitizes numbers trait', function () {
248257
$this->assertTrue(
249258
in_array('MichaelRubel\ValueObjects\Concerns\SanitizesNumbers',

0 commit comments

Comments
 (0)