From ee2a3c9beae604937f97d293355df5968cea059e Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 1 Sep 2021 15:51:46 +0300 Subject: [PATCH] fix x-skip-duplicate-check header --- .../Espo/Core/Record/CreateParamsFetcher.php | 4 +- .../Core/Record/CreateParamsFetcherTest.php | 122 ++++++++++++++++++ 2 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 tests/unit/Espo/Core/Record/CreateParamsFetcherTest.php diff --git a/application/Espo/Core/Record/CreateParamsFetcher.php b/application/Espo/Core/Record/CreateParamsFetcher.php index ea1eb782bd..ec2dc8729b 100644 --- a/application/Espo/Core/Record/CreateParamsFetcher.php +++ b/application/Espo/Core/Record/CreateParamsFetcher.php @@ -41,8 +41,8 @@ class CreateParamsFetcher { $data = $request->getParsedBody(); - $skipDuplicateCheck = - $request->getHeader('X-Skip-Duplicate-Check') ?? + $skipDuplicateCheck = $request->hasHeader('X-Skip-Duplicate-Check') ? + strtolower($request->getHeader('X-Skip-Duplicate-Check')) === 'true' : $data->_skipDuplicateCheck ?? // legacy $data->skipDuplicateCheck ?? // legacy $data->forceDuplicate ?? // legacy diff --git a/tests/unit/Espo/Core/Record/CreateParamsFetcherTest.php b/tests/unit/Espo/Core/Record/CreateParamsFetcherTest.php new file mode 100644 index 0000000000..396707bd7b --- /dev/null +++ b/tests/unit/Espo/Core/Record/CreateParamsFetcherTest.php @@ -0,0 +1,122 @@ +createMock(RequestWrapper::class); + + $request + ->method('hasHeader') + ->willReturn(true); + + $request + ->method('getHeader') + ->with('X-Skip-Duplicate-Check') + ->willReturn('true'); + + $params = (new CreateParamsFetcher())->fetch($request); + + $this->assertTrue($params->skipDuplicateCheck()); + } + + public function test2(): void + { + $request = $this->createMock(RequestWrapper::class); + + $request + ->method('hasHeader') + ->willReturn(true); + + $request + ->method('getHeader') + ->with('X-Skip-Duplicate-Check') + ->willReturn('false'); + + $params = (new CreateParamsFetcher())->fetch($request); + + $this->assertFalse($params->skipDuplicateCheck()); + } + + public function test3(): void + { + $request = $this->createMock(RequestWrapper::class); + + $request + ->method('hasHeader') + ->willReturn(false); + + $params = (new CreateParamsFetcher())->fetch($request); + + $this->assertFalse($params->skipDuplicateCheck()); + } + + public function test4(): void + { + $request = $this->createMock(RequestWrapper::class); + + $request + ->method('hasHeader') + ->willReturn(true); + + $request + ->method('getHeader') + ->with('X-Skip-Duplicate-Check') + ->willReturn('TRUE'); + + $params = (new CreateParamsFetcher())->fetch($request); + + $this->assertTrue($params->skipDuplicateCheck()); + } + + public function test5(): void + { + $request = $this->createMock(RequestWrapper::class); + + $request + ->method('hasHeader') + ->willReturn(false); + + $request + ->method('getParsedBody') + ->willReturn((object) [ + '_skipDuplicateCheck' => true, + ]); + + $params = (new CreateParamsFetcher())->fetch($request); + + $this->assertTrue($params->skipDuplicateCheck()); + } +}