import { describe, expect, it } from 'vitest';
import { joinDescription, singleParagraph, splitDescription } from './description-split';

describe('splitDescription — relit le texte RU en deux champs', () => {
    it('met tout dans la description courte quand il n’y a pas de ligne vide', () => {
        expect(splitDescription('Appartement face au parc.')).toEqual({ short: 'Appartement face au parc.', complement: '' });
    });

    it('coupe à la première ligne vide seulement', () => {
        expect(splitDescription('Court.\n\nSuite 1.\n\nSuite 2.')).toEqual({ short: 'Court.', complement: 'Suite 1.\n\nSuite 2.' });
    });

    it('gère les fins de ligne Windows et les valeurs vides', () => {
        expect(splitDescription('Court.\r\n\r\nSuite.')).toEqual({ short: 'Court.', complement: 'Suite.' });
        expect(splitDescription(null)).toEqual({ short: '', complement: '' });
    });
});

describe('joinDescription — un seul texte envoyé à Rentals United', () => {
    it('sépare les deux parties par une ligne vide', () => {
        expect(joinDescription('Court.', 'Suite.')).toBe('Court.\n\nSuite.');
    });

    it('n’ajoute rien sans complément', () => {
        expect(joinDescription('Court.', '')).toBe('Court.');
    });

    it('fait l’aller-retour sans perte, même en tapant des lignes vides dans le complément', () => {
        for (const [short, complement] of [
            ['Court.', 'Suite 1.\n\nSuite 2.'],
            ['', 'Seulement le complément.'],
            ['Court.', '\nCommence par un retour.'],
        ]) {
            expect(splitDescription(joinDescription(short, complement))).toEqual({ short, complement });
        }
    });
});

describe('singleParagraph — la description courte reste un seul paragraphe', () => {
    it('remplace les retours à la ligne par une espace', () => {
        expect(singleParagraph('Ligne 1\nLigne 2 \r\n\r\n Ligne 3')).toBe('Ligne 1 Ligne 2 Ligne 3');
    });
});
