Files
portal/app/tests/Unit/ClientSms/ConsentLetterBuilderTest.php
T

177 lines
13 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Services\ClientSms\ConsentLetterBuilder;
/**
* Генератор письма-разрешения от правообладателя — все 8 комбинаций «объект ×
* правообладатель» строго по образцам МТС (support.mts.ru → «Письмо-разрешение
* от правообладателя»). Имя у оператора регистрирует Лидерра, правообладатель —
* клиент, поэтому получатель во всех письмах один (мы). Что знаем о клиенте —
* подставляем; чего не знаем — оставляем пропуски (цельный бланк). Паспортные
* данные физлица НЕ храним (152-ФЗ) — всегда пропуск.
*/
$RECIPIENT = 'ИП Кондратьев П. Д. (ИНН 245210851872)';
$TERM = 'до 31.12.2027';
/** Реквизиты юрлица/ИП по умолчанию (валидный ИНН). */
function reqFull(array $over = []): array
{
return array_merge(
['legal_name' => 'ООО «Ромашка»', 'contact_name' => 'Иван Иванов', 'inn' => '7707083893'],
$over,
);
}
function letter(): ConsentLetterBuilder
{
return new ConsentLetterBuilder;
}
// ─── Объект «Юридическое наименование» — только правообладатель-юрлицо ────────
it('1. юр.наименование × юрлицо', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('legal', 'legal_entity', 'ROMASHKA', reqFull(), $RECIPIENT, $TERM);
expect($l['title_object'])->toBe('юридического наименования');
expect($l['is_individual'])->toBeFalse();
expect($l['signer'])->toBe('ООО «Ромашка»');
expect($l['body'])->toBe(
'ООО «Ромашка» (ИНН 7707083893) в лице генерального директора ________________________, '
.'действующего на основании Устава, настоящим письмом даёт своё согласие для '
.'ИП Кондратьев П. Д. (ИНН 245210851872) на использование юридического наименования организации '
.'в виде имени отправителя для проведения рекламных SMS-рассылок, направленных на продвижение '
.'ООО «Ромашка» на территории Российской Федерации. Право на использование предоставлено '
.'безвозмездно на срок до 31.12.2027.'
);
});
// ─── Объект «Название ИП» — только правообладатель-ИП ─────────────────────────
it('2. наименование ИП × ИП (префикс «ИП» добавляется)', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('ip', 'sole_proprietor', 'IVANOV', reqFull(['legal_name' => 'Иванов И. И.']), $RECIPIENT, $TERM);
expect($l['title_object'])->toBe('наименования ИП');
expect($l['is_individual'])->toBeFalse();
expect($l['signer'])->toBe('ИП Иванов И. И.');
expect($l['body'])->toBe(
'Я, ИП Иванов И. И. (ИНН 7707083893), настоящим письмом даю своё согласие для '
.'ИП Кондратьев П. Д. (ИНН 245210851872) на использование наименования индивидуального предпринимателя '
.'в виде имени отправителя для проведения рекламных SMS-рассылок на территории Российской Федерации. '
.'Право на использование предоставлено безвозмездно на срок до 31.12.2027.'
);
});
// ─── Объект «Товарный знак» — юрлицо / ИП / физлицо ──────────────────────────
it('3. товарный знак × юрлицо', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('trademark', 'legal_entity', 'BREND', reqFull(), $RECIPIENT, $TERM);
expect($l['title_object'])->toBe('товарного знака');
expect($l['body'])->toBe(
'ООО «Ромашка» (ИНН 7707083893) в лице генерального директора ________________________, '
.'действующего на основании Устава, настоящим письмом даёт своё согласие для '
.'ИП Кондратьев П. Д. (ИНН 245210851872) на использование товарного знака № ____________ '
.'в виде имени отправителя для проведения рекламных SMS-рассылок, направленных на продвижение '
.'ООО «Ромашка» на территории Российской Федерации. Право на использование предоставлено '
.'безвозмездно на срок до 31.12.2027.'
);
});
it('4. товарный знак × ИП', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('trademark', 'sole_proprietor', 'BREND', reqFull(['legal_name' => 'ИП Иванов И. И.']), $RECIPIENT, $TERM);
expect($l['is_individual'])->toBeFalse();
expect($l['body'])->toBe(
'Я, ИП Иванов И. И. (ИНН 7707083893), настоящим письмом даю своё согласие для '
.'ИП Кондратьев П. Д. (ИНН 245210851872) на использование товарного знака № ____________ '
.'в виде имени отправителя для проведения рекламных SMS-рассылок на территории Российской Федерации. '
.'Право на использование предоставлено безвозмездно на срок до 31.12.2027.'
);
});
it('5. товарный знак × физлицо (паспорт — пропуск)', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('trademark', 'individual', 'BREND',
['legal_name' => '', 'contact_name' => 'Пётр Петров', 'inn' => ''], $RECIPIENT, $TERM);
expect($l['is_individual'])->toBeTrue();
expect($l['signer'])->toBe('Пётр Петров');
expect($l['body'])->toBe(
'Я, Пётр Петров (паспортные или иные дополнительные данные о физлице, позволяющие сопоставить их '
.'со сведениями из подтверждающего документа: серия ____ № __________, выдан ______________________), '
.'правообладатель товарного знака № ____________, настоящим письмом даю своё согласие для '
.'ИП Кондратьев П. Д. (ИНН 245210851872) на использование товарного знака № ____________ '
.'в виде имени отправителя для проведения рекламных SMS-рассылок на территории Российской Федерации. '
.'Право на использование предоставлено безвозмездно на срок до 31.12.2027.'
);
});
// ─── Объект «Домен» — юрлицо / ИП / физлицо ──────────────────────────────────
it('6. домен × юрлицо', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('website', 'legal_entity', 'shop.ru', reqFull(), $RECIPIENT, $TERM);
expect($l['title_object'])->toBe('доменного имени');
expect($l['body'])->toBe(
'ООО «Ромашка» (ИНН 7707083893) в лице генерального директора ________________________, '
.'действующего на основании Устава, настоящим письмом даёт своё согласие для '
.'ИП Кондратьев П. Д. (ИНН 245210851872) на использование доменного имени «shop.ru» '
.'в виде имени отправителя для проведения рекламных SMS-рассылок, направленных на продвижение '
.'ООО «Ромашка» на территории Российской Федерации. Право на использование предоставлено '
.'безвозмездно на срок до 31.12.2027.'
);
});
it('7. домен × ИП', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('website', 'sole_proprietor', 'shop.ru', reqFull(['legal_name' => 'ИП Иванов И. И.']), $RECIPIENT, $TERM);
expect($l['body'])->toBe(
'Я, ИП Иванов И. И. (ИНН 7707083893), настоящим письмом даю своё согласие для '
.'ИП Кондратьев П. Д. (ИНН 245210851872) на использование доменного имени «shop.ru» '
.'в виде имени отправителя для проведения рекламных SMS-рассылок на территории Российской Федерации. '
.'Право на использование предоставлено безвозмездно на срок до 31.12.2027.'
);
});
it('8. домен × физлицо (владелец домена, паспорт — пропуск)', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('website', 'individual', 'shop.ru',
['legal_name' => '', 'contact_name' => 'Пётр Петров', 'inn' => ''], $RECIPIENT, $TERM);
expect($l['is_individual'])->toBeTrue();
expect($l['body'])->toBe(
'Я, Пётр Петров (паспортные или иные дополнительные данные о физлице, позволяющие сопоставить их '
.'со сведениями из подтверждающего документа: серия ____ № __________, выдан ______________________), '
.'владелец домена «shop.ru», настоящим письмом даю своё согласие для '
.'ИП Кондратьев П. Д. (ИНН 245210851872) на использование доменного имени «shop.ru» '
.'в виде имени отправителя для проведения рекламных SMS-рассылок на территории Российской Федерации. '
.'Право на использование предоставлено безвозмездно на срок до 31.12.2027.'
);
});
// ─── Пропуски: данных нет → цельный бланк с прочерками ───────────────────────
it('юрлицо без названия и ИНН → прочерки в бланке', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('legal', 'legal_entity', 'ROMASHKA',
['legal_name' => '', 'contact_name' => '', 'inn' => ''], $RECIPIENT, $TERM);
expect($l['body'])->toContain('«______________________» (ИНН ____________) в лице генерального директора');
expect($l['signer'])->toBe('«______________________»');
});
it('физлицо без ФИО → прочерк вместо ФИО', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('website', 'individual', 'shop.ru',
['legal_name' => '', 'contact_name' => '', 'inn' => ''], $RECIPIENT, $TERM);
expect($l['body'])->toStartWith('Я, ________________________ (паспортные');
expect($l['signer'])->toBe('________________________');
});
it('домен/товарный знак с неизвестным типом лица → трактуется как физлицо (цельный бланк)', function () use ($RECIPIENT, $TERM) {
$l = letter()->build('website', null, 'shop.ru',
['legal_name' => '', 'contact_name' => '', 'inn' => ''], $RECIPIENT, $TERM);
expect($l['is_individual'])->toBeTrue();
expect($l['body'])->toContain('владелец домена «shop.ru»');
});