import * as cut from './message-builder';

describe('BedrockPayloadBuilder', () => {
  it('should be implemented', () => {
    expect(cut.BedrockPayloadBuilder).toBeDefined();
    expect(cut.BedrockPayloadBuilder.prototype.setRole).toBeDefined();
    expect(typeof cut.BedrockPayloadBuilder.prototype.setRole).toBe('function');
    expect(cut.BedrockPayloadBuilder.prototype.addContent).toBeDefined();
    expect(typeof cut.BedrockPayloadBuilder.prototype.addContent).toBe('function');
    expect(cut.BedrockPayloadBuilder.prototype.build).toBeDefined();
    expect(typeof cut.BedrockPayloadBuilder.prototype.build).toBe('function');
  });

  it('should set role and add content correctly', () => {
    const builder = new cut.BedrockPayloadBuilder();
    builder.setRole('user');
    builder.addContent('Hello, how are you?');
    const messages = builder.build();

    expect(messages[0].role).toBe('user');
    expect(messages[0].content).toEqual([{ text: 'Hello, how are you?' }]);
  });

  it('should return empty content and role to assistant when no content is added', () => {
    const builder = new cut.BedrockPayloadBuilder('assistant');
    const messages = builder.build();

    expect(messages).not.toEqual([])
    expect(messages[0].role).toBe('assistant');
    expect(messages[0].content).toEqual([]);
  });
});

describe('PayloadBuilder', () => {
  it('should be implemented', () => {
    expect(cut.PayloadBuilder).toBeDefined();
    expect(cut.PayloadBuilder.prototype.setRole).toBeDefined();
    expect(typeof cut.PayloadBuilder.prototype.setRole).toBe('function');
    expect(cut.PayloadBuilder.prototype.addMessage).toBeDefined();
    expect(typeof cut.PayloadBuilder.prototype.addMessage).toBe('function');
    expect(cut.PayloadBuilder.prototype.build).toBeDefined();
    expect(typeof cut.PayloadBuilder.prototype.build).toBe('function');
  });

  it('should set role and add content correctly', () => {
    const builder = new cut.PayloadBuilder();
    builder.setRole('user');
    builder.addMessage('Hello, how are you?');
    const messages = builder.build();

    expect(messages[0].role).toBe('user');
    expect(messages[0].content).toEqual('Hello, how are you?');

    builder.setRole('assistant');
    builder.addMessage('More message');
    const moreMessages = builder.build();

    expect(moreMessages.length).toBe(2);
    expect(moreMessages[0].role).toBe('user');
    expect(moreMessages[1].role).toBe('assistant');
    expect(moreMessages[0].content).toEqual('Hello, how are you?');
    expect(moreMessages[1].content).toEqual('More message');
  });

  it('should return empty messages when no message is added', () => {
    const builder = new cut.PayloadBuilder('assistant');
    const messages = builder.build();

    expect(messages).toEqual([]);
  });
});