feat(landing): заглушка страницы с рабочей формой
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { EMPTY_VALUES } from './leadFormModel';
|
||||
import { applyPrefill, getLeadPrefill, prefillLead, subscribeLeadPrefill } from './leadPrefill';
|
||||
|
||||
const ethiopia = { interest: 'one_time', comment: 'Эфиопия Иргачеффе, 250 г' } as const;
|
||||
|
||||
describe('applyPrefill', () => {
|
||||
it('ставит интерес и комментарий в пустую форму', () => {
|
||||
const r = applyPrefill(EMPTY_VALUES, ethiopia, null);
|
||||
expect(r.values).toMatchObject({ interest: 'one_time', comment: 'Эфиопия Иргачеффе, 250 г' });
|
||||
expect(r.prefilledComment).toBe('Эфиопия Иргачеффе, 250 г');
|
||||
});
|
||||
|
||||
it('не затирает комментарий, который посетитель напечатал сам', () => {
|
||||
const values = { ...EMPTY_VALUES, interest: 'question' as const, comment: 'Можно помолоть под турку?' };
|
||||
const r = applyPrefill(values, ethiopia, null);
|
||||
expect(r.values).toMatchObject({ interest: 'one_time', comment: 'Можно помолоть под турку?' });
|
||||
});
|
||||
|
||||
it('заменяет свой прошлый предзаполненный комментарий', () => {
|
||||
const first = applyPrefill(EMPTY_VALUES, ethiopia, null);
|
||||
const second = applyPrefill(first.values, { interest: 'subscription' }, first.prefilledComment);
|
||||
expect(second.values).toMatchObject({ interest: 'subscription', comment: '' });
|
||||
expect(second.prefilledComment).toBeNull();
|
||||
});
|
||||
|
||||
it('если посетитель дописал предзаполненный комментарий — он уже его', () => {
|
||||
const first = applyPrefill(EMPTY_VALUES, ethiopia, null);
|
||||
const edited = { ...first.values, comment: `${first.values.comment}, помол под эспрессо` };
|
||||
const second = applyPrefill(edited, { interest: 'subscription' }, first.prefilledComment);
|
||||
expect(second.values.comment).toBe('Эфиопия Иргачеффе, 250 г, помол под эспрессо');
|
||||
});
|
||||
|
||||
it('пробелы в поле не считаются текстом посетителя', () => {
|
||||
const r = applyPrefill({ ...EMPTY_VALUES, comment: ' ' }, ethiopia, null);
|
||||
expect(r.values.comment).toBe('Эфиопия Иргачеффе, 250 г');
|
||||
});
|
||||
});
|
||||
|
||||
describe('prefillLead', () => {
|
||||
it('уведомляет подписчиков и работает без DOM', () => {
|
||||
const got: unknown[] = [];
|
||||
const unsubscribe = subscribeLeadPrefill((p) => got.push(p));
|
||||
prefillLead({ interest: 'question', source: 'hero' });
|
||||
unsubscribe();
|
||||
prefillLead({ interest: 'subscription' });
|
||||
expect(got).toEqual([expect.objectContaining({ interest: 'question', source: 'hero' })]);
|
||||
expect(getLeadPrefill()).toMatchObject({ interest: 'subscription' });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user