import { describe, it, expect } from 'vitest';
import { isNotEmpty, formatPrice } from '@/helpers.js';

describe('helpers.js', () => {
  describe('isNotEmpty', () => {
    it('должен возвращать false для null', () => {
      expect(isNotEmpty(null)).toBe(false);
    });

    it('должен возвращать false для undefined', () => {
      expect(isNotEmpty(undefined)).toBe(false);
    });

    it('должен возвращать false для пустой строки', () => {
      expect(isNotEmpty('')).toBe(false);
      expect(isNotEmpty('   ')).toBe(false);
    });

    it('должен возвращать true для непустой строки', () => {
      expect(isNotEmpty('test')).toBe(true);
      expect(isNotEmpty('  test  ')).toBe(true);
    });

    it('должен возвращать false для пустого массива', () => {
      expect(isNotEmpty([])).toBe(false);
    });

    it('должен возвращать true для непустого массива', () => {
      expect(isNotEmpty([1, 2, 3])).toBe(true);
    });

    it('должен возвращать false для пустого объекта', () => {
      expect(isNotEmpty({})).toBe(false);
    });

    it('должен возвращать true для непустого объекта', () => {
      expect(isNotEmpty({ key: 'value' })).toBe(true);
    });

    it('должен возвращать true для чисел', () => {
      expect(isNotEmpty(0)).toBe(true);
      expect(isNotEmpty(42)).toBe(true);
      expect(isNotEmpty(-10)).toBe(true);
    });

    it('должен возвращать true для булевых значений', () => {
      expect(isNotEmpty(true)).toBe(true);
      expect(isNotEmpty(false)).toBe(true);
    });
  });

  describe('formatPrice', () => {
    it('должен возвращать пустую строку для null', () => {
      expect(formatPrice(null)).toBe('');
    });

    it('должен возвращать пустую строку для undefined', () => {
      expect(formatPrice(undefined)).toBe('');
    });

    it('должен форматировать положительные числа', () => {
      expect(formatPrice(1000)).toBe('1 000');
      expect(formatPrice(1234567)).toBe('1 234 567');
      expect(formatPrice(42)).toBe('42');
    });

    it('должен форматировать отрицательные числа', () => {
      expect(formatPrice(-1000)).toBe('-1 000');
      expect(formatPrice(-42)).toBe('-42');
    });

    it('должен обрабатывать строки с числами', () => {
      expect(formatPrice('1000')).toBe('1 000');
      expect(formatPrice('  1234  ')).toBe('1 234');
    });

    it('должен возвращать пустую строку для нуля', () => {
      expect(formatPrice(0)).toBe('');
      expect(formatPrice('0')).toBe('');
    });

    it('должен обрабатывать десятичные числа (округляет)', () => {
      expect(formatPrice(1234.56)).toBe('1 235');
      expect(formatPrice(999.99)).toBe('1 000');
    });

    it('должен возвращать пустую строку для невалидных значений', () => {
      expect(formatPrice('abc')).toBe('');
      expect(formatPrice('')).toBe('');
    });
  });
});

