import File from '..';

const testFile = `
this is
a
test file
`.trim();

describe('files', () => {
  describe('file', () => {
    test('it should be able to create a file', () => {
      const file = new File('location', testFile);
      expect(file.location).toEqual('location');
      expect(file.lines).toEqual({
        0: 'this is',
        1: 'a',
        2: 'test file',
      });
    });

    test('it should be able to recreate a file', () => {
      const file = new File('location', testFile);
      expect(file.toString()).toEqual(testFile);
    });

    test('it should not be able to add new keys', () => {
      const file = new File('location', testFile);
      expect(() => {
        file.lines[100] = 'test';
      }).toThrow();
    });

    test('it should be able to update state', () => {
      const file = new File('location', testFile);
      expect(file.changed).toBeFalsy();
      file.lines[1] = 'foo';

      expect(file.lines).toEqual({
        0: 'this is',
        1: 'foo',
        2: 'test file',
      });

      expect(file.toString()).toEqual(`
this is
foo
test file
      `.trim());

      expect(file.changed).toBeTruthy();
    });
  });
});
