Skip to content

Commit b66beea

Browse files
committed
Merge branch 'main' into update/boolean
2 parents b8a325a + b6e59f3 commit b66beea

File tree

5 files changed

+110
-131
lines changed

5 files changed

+110
-131
lines changed

.github/workflows/run-tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
fail-fast: true
1414
matrix:
1515
os: [ubuntu-latest, windows-latest]
16-
php: [8.0, 8.1]
16+
php: [8.0, 8.1, 8.2]
1717
laravel: ["9.x"]
1818
stability: [prefer-lowest, prefer-stable]
1919

@@ -37,7 +37,7 @@ jobs:
3737
3838
- name: Install dependencies
3939
run: |
40-
composer require "laravel/framework:${{ matrix.laravel }}" --dev --no-interaction --no-update
40+
composer require "laravel/framework:${{ matrix.laravel }}" "nesbot/carbon:^2.62.1" --dev --no-interaction --no-update
4141
composer update --${{ matrix.stability }} --prefer-dist --no-interaction
4242
4343
- name: Execute tests

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
# Laravel Value Objects
44
[![Latest Version on Packagist](https://img.shields.io/packagist/v/michael-rubel/laravel-value-objects.svg?style=flat-square&logo=packagist)](https://packagist.org/packages/michael-rubel/laravel-value-objects)
5-
[![Total Downloads](https://img.shields.io/packagist/dt/michael-rubel/laravel-value-objects.svg?style=flat-square&logo=packagist)](https://packagist.org/packages/michael-rubel/laravel-value-objects)
5+
[![Tests](https://img.shields.io/github/workflow/status/michael-rubel/laravel-value-objects/run-tests/main?style=flat-square&label=tests&logo=github)](https://github.com/michael-rubel/laravel-value-objects/actions)
66
[![Code Quality](https://img.shields.io/scrutinizer/quality/g/michael-rubel/laravel-value-objects.svg?style=flat-square&logo=scrutinizer)](https://scrutinizer-ci.com/g/michael-rubel/laravel-value-objects/?branch=main)
77
[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/michael-rubel/laravel-value-objects.svg?style=flat-square&logo=scrutinizer)](https://scrutinizer-ci.com/g/michael-rubel/laravel-value-objects/?branch=main)
8-
[![GitHub Tests Action Status](https://img.shields.io/github/workflow/status/michael-rubel/laravel-value-objects/run-tests/main?style=flat-square&label=tests&logo=github)](https://github.com/michael-rubel/laravel-value-objects/actions)
9-
[![PHPStan](https://img.shields.io/github/workflow/status/michael-rubel/laravel-value-objects/phpstan/main?style=flat-square&label=larastan&logo=laravel)](https://github.com/michael-rubel/laravel-value-objects/actions)
8+
[![Infection](https://img.shields.io/github/workflow/status/michael-rubel/laravel-value-objects/infection/main?style=flat-square&label=infection&logo=php)](https://github.com/michael-rubel/laravel-package-template/actions)
9+
[![Larastan](https://img.shields.io/github/workflow/status/michael-rubel/laravel-value-objects/phpstan/main?style=flat-square&label=larastan&logo=laravel)](https://github.com/michael-rubel/laravel-value-objects/actions)
1010

1111
A bunch of general-purpose value objects you can use in your Laravel application.
1212

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"require": {
1919
"php": "^8.0",
2020
"illuminate/contracts": "^9.33",
21-
"michael-rubel/laravel-formatters": "^6.3|^7.0",
21+
"michael-rubel/laravel-formatters": "^7.0.4",
2222
"phpmath/bignumber": "^1.2",
2323
"spatie/laravel-package-tools": "^1.12"
2424
},

tests/Unit/Complex/FullNameTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,19 @@
5151
$this->assertSame('Le Poidevin', $name->lastName());
5252
});
5353

54+
test('full name covnerts the first letter of each word to uppercase', function ($input, $result) {
55+
$name = new FullName($input);
56+
$this->assertSame($result, $name->fullName());
57+
})->with([
58+
['michael mcKenzie', 'Michael McKenzie'],
59+
['michael McKenzie', 'Michael McKenzie'],
60+
['Michael mcKenzie', 'Michael McKenzie'],
61+
['Michael McKenzie', 'Michael McKenzie'],
62+
['michael mckenzie', 'Michael Mckenzie'],
63+
['michael mc-kenzie', 'Michael Mc-kenzie'],
64+
[' michael mc-Kenzie ', 'Michael Mc-Kenzie'],
65+
]);
66+
5467
test('can get cast to string', function () {
5568
$name = new FullName('Michael Rubél');
5669
$this->assertSame('Michael Rubél', (string) $name);

tests/Unit/Primitive/NumberTest.php

Lines changed: 91 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -37,78 +37,67 @@
3737
$this->assertSame('40001.586', $number->multiply(2));
3838
});
3939

40-
test('number can accept string', function () {
41-
$valueObject = new Number('1');
42-
$this->assertSame('1.00', $valueObject->value());
43-
$valueObject = new Number('1.2');
44-
$this->assertSame('1.20', $valueObject->value());
45-
$valueObject = new Number('1.3');
46-
$this->assertSame('1.30', $valueObject->value());
47-
$valueObject = new Number('1.7');
48-
$this->assertSame('1.70', $valueObject->value());
49-
$valueObject = new Number('1.8');
50-
$this->assertSame('1.80', $valueObject->value());
51-
$valueObject = new Number('2');
52-
$this->assertSame('2.00', $valueObject->value());
53-
$valueObject = new Number('3.1');
54-
$this->assertSame('3.10', $valueObject->value());
55-
$valueObject = new Number(' 100,000 ');
56-
$this->assertSame('100.00', $valueObject->value());
57-
$valueObject = new Number(' 100 000,000 ', 3);
58-
$this->assertSame('100000.000', $valueObject->value());
59-
});
60-
61-
test('number accepts formatted value', function () {
40+
test('number strips zeros when the value starts from zero', function ($input, $result) {
41+
$valueObject = new Number($input);
42+
$this->assertSame($result, $valueObject->value());
43+
})->with([
44+
['0000123.987', '123.98'],
45+
['0000123', '123.00'],
46+
]);
47+
48+
test('number can accept string', function ($input, $result) {
49+
$valueObject = new Number($input);
50+
$this->assertSame($result, $valueObject->value());
51+
})->with([
52+
['1', '1.00'],
53+
['1.2', '1.20'],
54+
['1.3', '1.30'],
55+
['1.7', '1.70'],
56+
['1.8', '1.80'],
57+
['2', '2.00'],
58+
['3.1', '3.10'],
59+
[' 100,000 ', '100.00'],
60+
[' 100 000 ,000 ', '100000.00'],
61+
]);
62+
63+
test('number accepts formatted value', function ($input, $scale, $result) {
64+
$valueObject = new Number($input, $scale);
65+
$this->assertSame($result, $valueObject->value());
66+
})->with([
6267
// Only commas:
63-
$valueObject = new Number('1,230,00');
64-
assertSame('1230.00', $valueObject->value());
65-
$valueObject = new Number('123,123,123,5555', scale: 3);
66-
assertSame('123123123.555', $valueObject->value());
68+
['1,230,00', 2, '1230.00'],
69+
['123,123,123,5555', 3, '123123123.555'],
6770

6871
// Only dots:
69-
$valueObject = new Number('1.230.00');
70-
assertSame('1230.00', $valueObject->value());
71-
$valueObject = new Number('123.123.123.555');
72-
assertSame('123123123.55', $valueObject->value());
72+
['1.230.00', 2, '1230.00'],
73+
['123.123.123.555', 2, '123123123.55'],
7374

7475
// Dot-comma convention:
75-
$valueObject = new Number('1.230,00');
76-
assertSame('1230.00', $valueObject->value());
77-
$valueObject = new Number('123.123.123,556', scale: 3);
78-
assertSame('123123123.556', $valueObject->value());
76+
['1.230,00', 2, '1230.00'],
77+
['123.123.123,556', 3, '123123123.556'],
7978

8079
// Comma-dot convention:
81-
$valueObject = new Number('1,230.00');
82-
assertSame('1230.00', $valueObject->value());
83-
$valueObject = new Number('123,123,123.555');
84-
assertSame('123123123.55', $valueObject->value());
80+
['1,230.00', 2, '1230.00'],
81+
['123,123,123.555', 2, '123123123.55'],
8582

8683
// Space-dot convention:
87-
$valueObject = new Number('1 230.00');
88-
assertSame('1230.00', $valueObject->value());
89-
$valueObject = new Number('123 123 123.55');
90-
assertSame('123123123.55', $valueObject->value());
84+
['1 230.00', 2, '1230.00'],
85+
['123 123 123.55', 2, '123123123.55'],
9186

9287
// Space-comma convention:
93-
$valueObject = new Number('1 230,00');
94-
assertSame('1230.00', $valueObject->value());
95-
$valueObject = new Number('123 123 123,55');
96-
assertSame('123123123.55', $valueObject->value());
88+
['1 230,00', 2, '1230.00'],
89+
['123 123 123,55', 2, '123123123.55'],
9790

9891
// Mixed convention:
99-
$valueObject = new Number('1 230,');
100-
assertSame('1230.00', $valueObject->value());
101-
$valueObject = new Number(',00');
102-
assertSame('0.00', $valueObject->value());
103-
$valueObject = new Number('.00');
104-
assertSame('0.00', $valueObject->value());
105-
$valueObject = new Number('123.123 123,55');
106-
assertSame('123123123.55', $valueObject->value());
107-
$valueObject = new Number('123,123.123,55');
108-
assertSame('123123123.55', $valueObject->value());
109-
$valueObject = new Number('123 123 123,55');
110-
assertSame('123123123.55', $valueObject->value());
111-
});
92+
['1 230,', 2, '1230.00'],
93+
[',00', 2, '0.00'],
94+
['.00', 2, '0.00'],
95+
['123.123 123,55', 2, '123123123.55'],
96+
['123,123.123,55', 2, '123123123.55'],
97+
['123 123 123,55', 2, '123123123.55'],
98+
[' 100 000,00 ', 3, '100000.000'],
99+
[' 100 000,000 ', 2, '100000.00'],
100+
]);
112101

113102
test('number fails when no argument passed', function () {
114103
$this->expectException(\TypeError::class);
@@ -134,72 +123,49 @@
134123
new Number(null);
135124
});
136125

137-
test('number can change decimals', function () {
138-
$valueObject = new Number('111777999.97');
139-
$this->assertSame('111777999.97', $valueObject->value());
140-
$valueObject = new Number('111777999,97');
141-
$this->assertSame('111777999.97', $valueObject->value());
142-
$valueObject = new Number('111777999.99999999997', 11);
143-
$this->assertSame('111777999.99999999997', $valueObject->value());
144-
$valueObject = new Number('92233720368.547', 3);
145-
$this->assertSame('92233720368.547', $valueObject->value());
146-
147-
$valueObject = new Number('7.1', 0);
148-
$this->assertSame('7', $valueObject->value());
149-
$valueObject = new Number('7.1', 1);
150-
$this->assertSame('7.1', $valueObject->value());
151-
$valueObject = new Number('7.11', 2);
152-
$this->assertSame('7.11', $valueObject->value());
153-
$valueObject = new Number('7.99', 3);
154-
$this->assertSame('7.990', $valueObject->value());
155-
$valueObject = new Number('70.1', 4);
156-
$this->assertSame('70.1000', $valueObject->value());
157-
$valueObject = new Number('71.1', 5);
158-
$this->assertSame('71.10000', $valueObject->value());
159-
$valueObject = new Number('17.9', 6);
160-
$this->assertSame('17.900000', $valueObject->value());
161-
$valueObject = new Number('11.1', 7);
162-
$this->assertSame('11.1000000', $valueObject->value());
163-
$valueObject = new Number('11.7', 8);
164-
$this->assertSame('11.70000000', $valueObject->value());
165-
$valueObject = new Number('77.77', 9);
166-
$this->assertSame('77.770000000', $valueObject->value());
167-
$valueObject = new Number('777.7', 10);
168-
$this->assertSame('777.7000000000', $valueObject->value());
169-
$valueObject = new Number('777.7', 11);
170-
$this->assertSame('777.70000000000', $valueObject->value());
171-
$valueObject = new Number('777.77', 12);
172-
$this->assertSame('777.770000000000', $valueObject->value());
173-
$valueObject = new Number('777.777', 13);
174-
$this->assertSame('777.7770000000000', $valueObject->value());
175-
$valueObject = new Number('7771.777', 14);
176-
$this->assertSame('7771.77700000000000', $valueObject->value());
177-
$valueObject = new Number('7771.7771', 15);
178-
$this->assertSame('7771.777100000000000', $valueObject->value());
179-
$valueObject = new Number('7771.77711', 16);
180-
$this->assertSame('7771.7771100000000000', $valueObject->value());
181-
$valueObject = new Number('7771.777111', 17);
182-
$this->assertSame('7771.77711100000000000', $valueObject->value());
183-
$valueObject = new Number('7771.7771119', 18);
184-
$this->assertSame('7771.777111900000000000', $valueObject->value());
185-
$valueObject = new Number('7771.77711199', 19);
186-
$this->assertSame('7771.7771119900000000000', $valueObject->value());
187-
$valueObject = new Number('777177711191777.99977777777777777777', 20);
188-
$this->assertSame('777177711191777.99977777777777777777', $valueObject->value());
189-
$valueObject = new Number('777177711191777.99977777777777777777', 20);
190-
$this->assertSame('777177711191777.99977777777777777777', $valueObject->value());
191-
});
192-
193-
test('number can handle huge numbers', function () {
194-
$valueObject = new Number('111777999.97');
195-
$this->assertSame('111777999.97', $valueObject->value());
196-
$valueObject = new Number('111777999,97');
197-
$this->assertSame('111777999.97', $valueObject->value());
198-
$valueObject = new Number('111777999.99999999997', 11);
199-
$this->assertSame('111777999.99999999997', $valueObject->value());
200-
$valueObject = new Number('92233720368.547', 3);
201-
$this->assertSame('92233720368.547', $valueObject->value());
202-
});
126+
test('number can change decimals', function ($input, $scale, $result) {
127+
$valueObject = new Number($input, $scale);
128+
$this->assertSame($result, $valueObject->value());
129+
})->with([
130+
['111777999.97', 2, '111777999.97'],
131+
['111777999,97', 2, '111777999.97'],
132+
['111777999.99999999997', 11, '111777999.99999999997'],
133+
['92233720368.547', 3, '92233720368.547'],
134+
135+
['7.1', 0, '7'],
136+
['7.1', 1, '7.1'],
137+
['7.11', 2, '7.11'],
138+
['7.99', 3, '7.990'],
139+
['70.1', 4, '70.1000'],
140+
['71.1', 5, '71.10000'],
141+
['17.9', 6, '17.900000'],
142+
['11.1', 7, '11.1000000'],
143+
['11.7', 8, '11.70000000'],
144+
['77.77', 9, '77.770000000'],
145+
['777.7', 10, '777.7000000000'],
146+
['777.7', 11, '777.70000000000'],
147+
['777.77', 12, '777.770000000000'],
148+
['777.777', 13, '777.7770000000000'],
149+
['7771.777', 14, '7771.77700000000000'],
150+
['7771.7771', 15, '7771.777100000000000'],
151+
['7771.77711', 16, '7771.7771100000000000'],
152+
['7771.777111', 17, '7771.77711100000000000'],
153+
['7771.7771119', 18, '7771.777111900000000000'],
154+
['7771.77711199', 19, '7771.7771119900000000000'],
155+
['777177711191777.99977777777777777777', 20, '777177711191777.99977777777777777777'],
156+
]);
157+
158+
test('number can handle huge numbers', function ($input, $scale, $result) {
159+
$valueObject = new Number($input, $scale);
160+
$this->assertSame($result, $valueObject->value());
161+
})->with([
162+
['111777999.97', 2, '111777999.97'],
163+
['111777999,97', 2, '111777999.97'],
164+
['111777999.99999999997', 11, '111777999.99999999997'],
165+
['92233720368.547', 3, '92233720368.547'],
166+
['9876543210111777999.9087', 2, '9876543210111777999.90'],
167+
['98765432101117779990000.9087', 1, '98765432101117779990000.9'],
168+
]);
203169

204170
test('number is makeable', function () {
205171
$valueObject = Number::make('1');

0 commit comments

Comments
 (0)