import {TestBed} from '@angular/core/testing';
import {EditService} from './edit.service';

describe('EditService', () => {
  let service: EditService;

  beforeEach(async () => {
    await TestBed.configureTestingModule({});
    service = TestBed.inject(EditService);
  });

  it('should be created', () => {
    expect(service).toBeTruthy();
  });

  it('should create a form with all editable song fields populated', () => {
    const form = service.createSongForm({
      text: 'Line 1',
      title: 'Amazing Grace',
      comment: 'Comment',
      flags: 'fast',
      key: 'G',
      tempo: 90,
      type: 'Praise',
      status: 'final',
      legalType: 'allowed',
      legalOwner: 'CCLI',
      legalOwnerId: '123',
      artist: 'Artist',
      label: 'Label',
      termsOfUse: 'Use it',
      origin: 'Origin',
    } as never);

    expect(form.getRawValue()).toEqual({
      text: 'Line 1',
      title: 'Amazing Grace',
      comment: 'Comment',
      flags: 'fast',
      key: 'G',
      tempo: 90,
      type: 'Praise',
      status: 'final',
      legalType: 'allowed',
      legalOwner: 'CCLI',
      legalOwnerId: '123',
      artist: 'Artist',
      label: 'Label',
      termsOfUse: 'Use it',
      origin: 'Origin',
    });
  });

  it('should default the status control to draft when the song has no status', () => {
    const form = service.createSongForm({
      text: '',
      title: 'Untitled',
      comment: '',
      flags: '',
      key: 'C',
      tempo: 80,
      type: 'Misc',
      legalType: 'open',
      legalOwner: 'other',
      legalOwnerId: '',
      artist: '',
      label: '',
      termsOfUse: '',
      origin: '',
    } as never);

    expect(form.get('status')?.value).toBe('draft');
  });
});
