|
| 1 | +<?php |
| 2 | + |
| 3 | +use FakeCar\Tests\TestProviders\BMWFakeCarData; |
| 4 | +use FakeCar\Tests\TestProviders\FerrariEnzoTestProvider; |
| 5 | + |
| 6 | +test('custom provider data source', function () { |
| 7 | + $BMWCarData = new BMWFakeCarData; |
| 8 | + $fakeCarDataProvider = new \Faker\Provider\FakeCarDataProvider($BMWCarData); |
| 9 | + |
| 10 | + $faker = (new \Faker\Factory())::create(); |
| 11 | + $fakeCar = new \Faker\Provider\FakeCar($faker); |
| 12 | + $fakeCar->setDataProvider($fakeCarDataProvider); |
| 13 | + $faker->addProvider($fakeCar); |
| 14 | + |
| 15 | + for ($i = 0; $i <= 100; $i++) { |
| 16 | + $data = $faker->vehicleArray(); |
| 17 | + expect($data['brand'])->toEqual('BMW') |
| 18 | + ->and($faker->vehicleBrand())->toEqual('BMW') |
| 19 | + ->and((BMWFakeCarData::$brandsWithModels)['BMW'])->toContain($faker->vehicleModel()) |
| 20 | + ->and(BMWFakeCarData::$vehicleTypes)->toContain($faker->vehicleType()); |
| 21 | + |
| 22 | + $regex = '/^(?<value>\d+) (?<unit>[a-zA-Z]+)$/'; |
| 23 | + expect($faker->vehicleEnginePower())->toMatch($regex); |
| 24 | + preg_match($regex, $faker->vehicleEnginePower(), $matches); |
| 25 | + expect($matches['value'])->toBeGreaterThanOrEqual(BMWFakeCarData::$vehicleEnginePower['range'][0]) |
| 26 | + ->and($matches['value'])->toBeLessThanOrEqual(BMWFakeCarData::$vehicleEnginePower['range'][1]) |
| 27 | + ->and($matches['unit'])->toEqual('hp') |
| 28 | + ->and($faker->vehicleEngineTorque())->toMatch($regex); |
| 29 | + |
| 30 | + preg_match($regex, $faker->vehicleEngineTorque(), $matches); |
| 31 | + expect($matches['value'])->toBeGreaterThanOrEqual(BMWFakeCarData::$vehicleEngineTorque['range'][0]) |
| 32 | + ->and($matches['value'])->toBeLessThanOrEqual(BMWFakeCarData::$vehicleEngineTorque['range'][1]) |
| 33 | + ->and($matches['unit'])->toEqual('nm'); |
| 34 | + } |
| 35 | +}); |
| 36 | + |
| 37 | +test('custom provider class', function () { |
| 38 | + $fakeCarDataProvider = new FerrariEnzoTestProvider(); |
| 39 | + |
| 40 | + $faker = (new \Faker\Factory())::create(); |
| 41 | + $fakeCar = new \Faker\Provider\FakeCar($faker); |
| 42 | + $fakeCar->setDataProvider($fakeCarDataProvider); |
| 43 | + $faker->addProvider($fakeCar); |
| 44 | + |
| 45 | + $vehicleArray = $faker->vehicleArray(); |
| 46 | + expect($vehicleArray['brand'])->toEqual('Ferrari') |
| 47 | + ->and($vehicleArray['model'])->toEqual('Enzo') |
| 48 | + ->and($faker->vehicle())->toEqual('Ferrari Enzo') |
| 49 | + ->and($faker->vehicleBrand())->toEqual('Ferrari') |
| 50 | + ->and($faker->vehicleModel())->toEqual('Enzo') |
| 51 | + ->and($faker->vehicleType())->toEqual('coupe') |
| 52 | + ->and($faker->vehicleFuelType())->toEqual('gasoline') |
| 53 | + ->and($faker->vehicleDoorCount())->toEqual(2) |
| 54 | + ->and($faker->vehicleSeatCount())->toEqual(2) |
| 55 | + ->and($faker->vehicleProperties())->toEqual([ |
| 56 | + 'Air condition', |
| 57 | + 'GPS', |
| 58 | + 'Leather seats', |
| 59 | + ]); |
| 60 | + |
| 61 | +}); |
0 commit comments