/**
 * Tests for the Cart domain services.
 * @packageDocumentation
 */

import { describe, it, expect, vi, beforeEach } from 'vitest';
import { CartService, CartError } from './CartService';

describe('CartService', () => {
  let service: CartService;
  let mockPort: any;

  beforeEach(() => {
    mockPort = {
      getAll: vi.fn(),
      getById: vi.fn(),
      create: vi.fn(),
      update: vi.fn(),
      delete: vi.fn(),
    };
    service = new CartService(mockPort);
  });

  describe('getAll', () => {
    it('should return all entities', async () => {
      const mockEntities = [{ id: '1' }];
      mockPort.getAll.mockResolvedValue(mockEntities);

      const result = await service.getAll();
      expect(result).toEqual(mockEntities);
    });

    it('should throw error when port fails', async () => {
      mockPort.getAll.mockRejectedValue(new Error());

      await expect(service.getAll()).rejects.toThrow(CartError);
    });
  });

  // Add more test cases for other methods...
});