Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\PointBundle\Tests\Entity; | |
| use Doctrine\Persistence\Mapping\MappingException; | |
| use Mautic\CoreBundle\Helper\IntHelper; | |
| use Mautic\CoreBundle\Test\MauticMysqlTestCase; | |
| use Mautic\PointBundle\Entity\Point; | |
| use Symfony\Component\DomCrawler\Form; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\HttpFoundation\Response; | |
| class PointEntityValidationTest extends MauticMysqlTestCase | |
| { | |
| /** | |
| * @dataProvider deltaScenariosProvider | |
| * | |
| * @throws MappingException | |
| */ | |
| public function testDeltaValidationOnCreate(int $delta, string $errorMessage = ''): void | |
| { | |
| $crawler = $this->client->request(Request::METHOD_GET, '/s/points/new'); | |
| $buttonCrawler = $crawler->selectButton('Save & Close'); | |
| $form = $buttonCrawler->form(); | |
| $form['point[name]']->setValue('Add point'); | |
| $this->testPointData($form, $delta, $errorMessage); | |
| } | |
| /** | |
| * @dataProvider deltaScenariosProvider | |
| */ | |
| public function testDeltaValidationOnCreateViaAPI(int $delta, string $errorMessage = ''): void | |
| { | |
| $this->client->request( | |
| Request::METHOD_POST, | |
| '/api/points/new', | |
| [ | |
| 'name' => 'Point1', | |
| 'delta' => $delta, | |
| 'isPublished' => true, | |
| 'type' => 'form.submit', | |
| ] | |
| ); | |
| $response = $this->client->getResponse(); | |
| if ($errorMessage) { | |
| self::assertResponseStatusCodeSame(Response::HTTP_BAD_REQUEST); | |
| self::assertStringContainsString('error', $response->getContent()); | |
| self::assertStringContainsString($errorMessage, $response->getContent()); | |
| } else { | |
| self::assertResponseStatusCodeSame(Response::HTTP_CREATED); | |
| self::assertStringNotContainsString('error', $response->getContent()); | |
| } | |
| } | |
| /** | |
| * @dataProvider deltaScenariosProvider | |
| * | |
| * @throws MappingException | |
| */ | |
| public function testDeltaValidationOnUpdate(int $delta, string $errorMessage = ''): void | |
| { | |
| $point = new Point(); | |
| $point->setName('Edit point'); | |
| $point->setDelta(5); | |
| $point->setType('form.submit'); | |
| $point->setIsPublished(true); | |
| $this->em->persist($point); | |
| $this->em->flush(); | |
| $pointId = $point->getId(); | |
| $crawler = $this->client->request(Request::METHOD_GET, '/s/points/edit/'.$pointId); | |
| $buttonCrawler = $crawler->selectButton('Save & Close'); | |
| $form = $buttonCrawler->form(); | |
| $form['point[name]']->setValue('Edit point'); | |
| $this->testPointData($form, $delta, $errorMessage); | |
| } | |
| /** | |
| * @return iterable<string, array<mixed>> | |
| * | |
| * @throws \Exception | |
| */ | |
| public static function deltaScenariosProvider(): iterable | |
| { | |
| yield 'within range positive number' => [3000, '']; | |
| yield 'within range negative number' => [-7857, '']; | |
| yield 'within range zero' => [0, '']; | |
| yield 'upper limit' => [IntHelper::MAX_INTEGER_VALUE, '']; | |
| yield 'lower limit' => [IntHelper::MIN_INTEGER_VALUE, '']; | |
| yield 'above upper limit' => [IntHelper::MAX_INTEGER_VALUE + 10, 'This value should be between -2147483648 and 2147483647.']; | |
| yield 'below lower limit' => [IntHelper::MIN_INTEGER_VALUE - 10, 'This value should be between -2147483648 and 2147483647.']; | |
| } | |
| /** | |
| * @throws MappingException | |
| */ | |
| private function testPointData(Form $form, int $delta, string $errorMessage): void | |
| { | |
| $form['point[delta]']->setValue((string) $delta); | |
| $form['point[isPublished]']->setValue('1'); | |
| $form['point[type]']->setValue('form.submit'); | |
| $this->client->submit($form); | |
| self::assertTrue($this->client->getResponse()->isOk()); | |
| $response = $this->client->getResponse()->getContent(); | |
| self::assertStringContainsString($errorMessage, (string) $response); | |
| $pointDetail = $this->em->getRepository(Point::class)->findOneBy(['delta' => $delta]); | |
| '' == $errorMessage ? self::assertNotNull($pointDetail) : self::assertNull($pointDetail); | |
| } | |
| } | |