Извините за странный заголовок, но я не был уверен там.
У меня есть сущность с именем Slide
.Здесь есть несколько свойств:
- id
- owner
- url
- image
- image alt
- file
Изображение используется для строки изображения, хранящейся в базе данных, файл используется для загрузки файла.Дело в том, что если изображение выбрано (/ загружается) или если вы редактируете слайд, в котором уже есть изображение, изображение alt не может быть нулевым, поскольку каждое изображение должно иметь изображение alt (в данном случае).
Это решается с помощью следующей функции:
/**
* Validates the image alt. The image alt is only required if the slide has an image
*
* @Assert\Callback
*
* @param ExecutionContextInterface $context
*/
public function validateImageAlt(ExecutionContextInterface $context) {
if (($this->file || $this->image) && !$this->imageAlt) {
$context->buildViolation('Cannot leave image alt empty if an image is chosen / if the slide already has an image')->atPath('imageAlt')->addViolation();
}
}
Теперь проблема заключается в редактировании.Когда я пытаюсь отредактировать слайд вручную и очищаю изображение alt, когда изображение выбрано (/ загружается), я возвращаюсь на ту же страницу и вижу ошибку.То же самое касается случая, когда на существующем слайде уже есть изображение, а я просто очищаю изображение alt.Это все хорошо, как и должно быть.
В моем тесте у меня есть следующее:
/**
* @dataProvider editDataProvider
*/
public function testEditPage($id, $owner, $url, $imageAlt, $image, $hasRights, $assertion, $errorElement = '') {
В моем поставщике данных у меня есть следующая строка:
yield [1, 2, '81-', null, 'measurement-slide.png', true, false, '#slide_data_imageAlt']; // no image alt, but image chosen
Эта строка является единственной строкой для редактирования.Это тело функции, которое содержит только важную часть:
$form = $crawler->selectButton('saveData')->form();
$form['slide_data[owner]']->select($owner);
$form['slide_data[url]'] = $url;
if ($image) {
$form['slide_data[file]']->upload(new UploadedFile(dirname(__FILE__) . '/../../Uploads/measurement-slide.png', $image, 'image/webp'));
}
$form['slide_data[imageAlt]'] = $imageAlt;
$submitForm = $this->client->submit($form);
if ($assertion) {
// ....
} else {
$this->assertEquals(1, $submitForm->filter('div.form-group.has-error')->count());
$this->assertEquals(1, $submitForm->filter('div.form-group.has-error ' . $errorElement)->count());
}
Строка имеет $assertion
false, что означает, что она должна идти в другом.Он делает это, но мой тест не пройден, и код $submitForm->filter('div.form-group.has-error')->count()
возвращает 0 и, следовательно, не равен 1.
Я выкинул HTML-код $submitForm
так же, как и мой оригинальный $crawler
и $this->client->getResponse()
и все не показывают ошибку.Но если я делаю именно то, что должен делать мой тест, он не работает.