Untitled
unknown
plain_text
a year ago
2.4 kB
7
Indexable
<?php
namespace App\Tests\pest\Unit\Content\Service\Entity\Controlpanel\ModelMetaData;
use App\Content\Service\Entity\Controlpanel\ModelMetaData;
class Calculator
{
public function add(int $a, int $b): int
{
if (!is_int($a) || !is_int($b)) {
throw new \InvalidArgumentException('Both inputs must be integers.');
}
return $a + $b;
}
}
class CalculatorService
{
private Calculator $calculator;
public function __construct(Calculator $calculator)
{
$this->calculator = $calculator;
}
public function doubleSum(int $a, int $b): int
{
return $this->calculator->add($a, $b) * 2;
}
}
beforeEach(function() {
$this->calculator = mock(Calculator::class);
$this->service = new CalculatorService($this->calculator);
});
describe('test that checks if math works', function() {
dataset('numbers', [
[1, 2, 3],
[2, 2, 4],
[3, 2, 5],
[4, 2, 6],
[5, 2, 7],
[6, 2, 8],
[7, 2, 9],
[8, 2, 10],
[9, 2, 11],
[10, 2, 12],
[10, 1, 11]
]);
dataset('edge cases', [
[1, 2, 3],
[-1, -2, -3],
[-7, 8, 1]
]);
it('if true is true', function() {
expect(true)->toBeTrue();
});
it('checks if the values in the array ammount to the right sum :key', function($a, $b, $sum) {
expect($a+$b)->toBe($sum);
})->with('numbers');
it('checks for edge cases', function($a, $b, $sum) {
expect($a+$b)->toBe($sum);
})->with('edge cases');
it(' checks the functioning of calculatorservice', function($a, $b, $sum) {
$this->calculator->shouldReceive('add')
->with($a, $b)
->andReturn($sum);
expect($this->service->doubleSum($a, $b))->toBe($sum*2);
})->with('numbers');
});
describe(' test that checks for invalid types', function() {
dataset('nullable inputs', [
[null, null, 0],
[1, null, 1],
[null, 2, 2],
]);
it('checks if the exception is thrown', function($a, $b, $sum) {
$this->calculator->shouldReceive('add')
->with($a, $b)
->andThrow(new \InvalidArgumentException('Both inputs must be integers.'));
expect(fn() => $this->service->doubleSum($a, $b))->toThrow(\TypeError::class);
})->with('nullable inputs');
});
Editor is loading...
Leave a Comment