sut = new DurationStringToSecondsTransformer(); } public function getValidTestDataTransform(): array { return [ ['0:00', '0'], ['123:00', '442800'], ['123:00', 442800], ['0:00', 0], ['2:00', 7213], // by default no seconds are returned [null, null], ]; } public function getInvalidTestDataTransform(): array { return [ [''], ['xxx'], ]; } /** * @dataProvider getValidTestDataTransform */ public function testTransform($expected, $transform): void { $this->assertEquals($expected, $this->sut->transform($transform)); } /** * @dataProvider getInvalidTestDataTransform */ public function testInvalidTransformThrowsException($transform): void { $value = $this->sut->transform($transform); $this->assertNull($value); } /** * @return array> */ public function getValidTestDataReverseTransform(): array { return [ ['2h3s', 7203], ['0:00', 0], ['0', null], [null, null], ['87600000000:00:00', 315360000000000], [87600000000, 315360000000000], // int will be treated we could argue if this is a correct behavior [87599999999.5, 315359999998200], // only int can be used as hourly input ]; } /** * @return array> */ public function getInvalidTestDataReverseTransform(): array { return [ ['xxx'], [':::'], ['0::0'], // too large ['87600000000:00:01'], // too large [315360000000001], ]; } /** * @dataProvider getValidTestDataReverseTransform */ public function testReverseTransform($transform, $expected): void { $this->assertEquals($expected, $this->sut->reverseTransform($transform)); } /** * @dataProvider getInvalidTestDataReverseTransform */ public function testInvalidReverseTransformThrowsException($transform): void { $this->expectException(TransformationFailedException::class); $this->sut->reverseTransform($transform); } }