/**
 * Copyright IBM Corp. 2024, 2025
 */

import { FileUploadFactory } from '../../src/model-factories/fileupload.factory.js';

describe('FileUploadFactory', () => {
  let factory: FileUploadFactory;

  beforeEach(() => {
    factory = new FileUploadFactory();
  });

  it('should create and retrieve a file by key', () => {
    factory.create({ key: 'file1', fileName: 'test.txt', value: 'data' });

    const file = factory.getUploadedFile('file1');
    expect(file).toEqual({ fileName: 'test.txt', value: 'data' });
  });

  it('should overwrite a file if the same key is used', () => {
    factory.create({ key: 'file1', fileName: 'test1.txt', value: 'data1' });
    factory.create({ key: 'file1', fileName: 'test2.txt', value: 'data2' });

    const file = factory.getUploadedFile('file1');
    expect(file).toEqual({ fileName: 'test2.txt', value: 'data2' });
  });

  it('should return undefined for a non-existent key', () => {
    expect(factory.getUploadedFile('unknown')).toBeUndefined();
  });

  it('should return all uploaded files', () => {
    factory.create({ key: 'file1', fileName: 'a.txt', value: 'A' });
    factory.create({ key: 'file2', fileName: 'b.txt', value: 'B' });

    const allFiles = factory.getAllUploadedFiles();
    expect(allFiles).toContainEqual({ fileName: 'a.txt', value: 'A' });
    expect(allFiles).toContainEqual({ fileName: 'b.txt', value: 'B' });
    expect(allFiles).toHaveLength(2);
  });
});
