From c9a632f3a9ba67e89d42b72ac0d587350ba87e02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 2 Apr 2026 14:35:20 +0200 Subject: [PATCH] Add LockTimeoutAnalyzer utility and corresponding tests - Implemented `LockTimeoutAnalyzer` to parse timeout values from RFC-compliant strings and return `DateInterval` objects. - Added `LockTimeoutAnalyzerTest` with data providers to validate handling of various timeout cases, including "Second" and "Infinite". --- .../Dav/Utils/LockTimeoutAnalyzer.php | 45 ++++++++++++++ .../Dav/Utils/LockTimeoutAnalyzerTest.php | 62 +++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 src/Bundle/ChillDocStoreBundle/Dav/Utils/LockTimeoutAnalyzer.php create mode 100644 src/Bundle/ChillDocStoreBundle/Tests/Dav/Utils/LockTimeoutAnalyzerTest.php diff --git a/src/Bundle/ChillDocStoreBundle/Dav/Utils/LockTimeoutAnalyzer.php b/src/Bundle/ChillDocStoreBundle/Dav/Utils/LockTimeoutAnalyzer.php new file mode 100644 index 000000000..2c191d923 --- /dev/null +++ b/src/Bundle/ChillDocStoreBundle/Dav/Utils/LockTimeoutAnalyzer.php @@ -0,0 +1,45 @@ +analyzeTimeout($content); + + self::assertEquals($expected, $result); + } + + public function provideTimeoutData(): iterable + { + yield 'Second-1800' => [ + 'Second-1800', + new \DateInterval('PT1800S'), + ]; + + yield 'Second-3600' => [ + 'Second-3600', + new \DateInterval('PT3600S'), + ]; + + yield 'Infinite' => [ + 'Infinite', + new \DateInterval('PT24H'), // Typically "Infinite" is represented by a long duration or special handling; RFC says it should be long. Let's assume a long one for now or check common practices. + ]; + + yield 'Multiple types, first is Second' => [ + 'Second-1800, Infinite', + new \DateInterval('PT1800S'), + ]; + + yield 'Multiple types, first is Infinite' => [ + 'Infinite, Second-1800', + new \DateInterval('PT24H'), + ]; + } +}