diff --git a/lib/Exceptions/UnsupportedColumnRetirementException.php b/lib/Exceptions/UnsupportedColumnRetirementException.php new file mode 100644 index 0000000..f1d3c21 --- /dev/null +++ b/lib/Exceptions/UnsupportedColumnRetirementException.php @@ -0,0 +1,10 @@ +methodNames(TableColumnRetirementStrategy::class) + ); + } + + public function testColumnExistsSignatureCarriesTableAndName(): void + { + $method = (new ReflectionClass(TableColumnRetirementStrategy::class))->getMethod('columnExists'); + + self::assertSame('bool', (string) $method->getReturnType()); + self::assertSame( + ['table', 'columnName'], + array_map(static fn ($parameter): string => $parameter->getName(), $method->getParameters()) + ); + } + + public function testRetireColumnsSignatureIsVariadicAndReturnsVoid(): void + { + $method = (new ReflectionClass(TableColumnRetirementStrategy::class))->getMethod('retireColumns'); + $parameters = $method->getParameters(); + + self::assertSame('void', (string) $method->getReturnType()); + self::assertSame(['table', 'columnNames'], array_map( + static fn ($parameter): string => $parameter->getName(), + $parameters + )); + self::assertTrue($parameters[1]->isVariadic()); + } + + public function testUnsupportedFailureIsARecoverableDatastoreFailure(): void + { + self::assertInstanceOf( + DatastoreErrorException::class, + new UnsupportedColumnRetirementException('No named-column retirement adapter is active.') + ); + } + + /** + * @param class-string $type + * @return list + */ + private function methodNames(string $type): array + { + $names = array_map( + static fn ($method): string => $method->getName(), + (new ReflectionClass($type))->getMethods() + ); + sort($names); + + return $names; + } +} + +/** A pre-capability adapter remains a valid implementation. */ +final class LegacyTableUpdateStrategy implements TableUpdateStrategy +{ + public function syncColumns(Table $table): void + { + } +}