open($tmp); $xml = $zip->getFromName('word/document.xml'); $zip->close(); @unlink($tmp); // Убираем XML-теги — остаётся видимый текст. return strip_tags((string) $xml); } it('на выходе валидный docx (ZIP), а не PDF', function () { $bytes = (new ConsentDocxWriter)->render( ['title_object' => 'доменного имени', 'body' => 'ТЕЛО-ПИСЬМА-МАРКЕР', 'signer' => 'ООО «Ромашка»', 'is_individual' => false], true, ); // docx = ZIP: сигнатура «PK». PDF был бы «%PDF». expect(substr($bytes, 0, 2))->toBe('PK'); expect(substr($bytes, 0, 4))->not->toBe('%PDF'); }); it('внутри docx — тело письма и подписант', function () { $bytes = (new ConsentDocxWriter)->render( ['title_object' => 'доменного имени', 'body' => 'ТЕЛО-ПИСЬМА-МАРКЕР', 'signer' => 'ООО «Ромашка»', 'is_individual' => false], true, ); $text = docxText($bytes); expect($text)->toContain('ПИСЬМО-РАЗРЕШЕНИЕ'); expect($text)->toContain('ТЕЛО-ПИСЬМА-МАРКЕР'); expect($text)->toContain('ООО «Ромашка»'); }); it('физлицо → внутри есть акцент про паспорт', function () { $bytes = (new ConsentDocxWriter)->render( ['title_object' => 'доменного имени', 'body' => 'тело', 'signer' => 'Пётр Петров', 'is_individual' => true], true, ); expect(docxText($bytes))->toContain('Заполните реквизиты паспорта'); }); it('реквизиты не заполнены → внутри памятка про прочерки', function () { $bytes = (new ConsentDocxWriter)->render( ['title_object' => 'доменного имени', 'body' => 'тело', 'signer' => 'подпись', 'is_individual' => false], false, ); expect(docxText($bytes))->toContain('незаполненные поля'); });