import { SubjectType } from '@metamask/subject-metadata-controller';
import migration69 from './069';

describe('migration #69', () => {
  it('should update the version metadata', async () => {
    const oldStorage = {
      meta: {
        version: 68,
      },
      data: {},
    };

    const newStorage = await migration69.migrate(oldStorage);
    expect(newStorage.meta).toStrictEqual({
      version: 69,
    });
  });

  it('should migrate all data', async () => {
    const oldStorage = {
      meta: {
        version: 68,
      },
      data: {
        FooController: { a: 'b' },
        SubjectMetadataController: {
          subjectMetadata: {
            'https://1inch.exchange': {
              iconUrl:
                'https://1inch.exchange/assets/favicon/favicon-32x32.png',
              name: 'DEX Aggregator - 1inch.exchange',
              origin: 'https://1inch.exchange',
              extensionId: null,
            },
            'https://ascii-tree-generator.com': {
              iconUrl: 'https://ascii-tree-generator.com/favicon.ico',
              name: 'ASCII Tree Generator',
              origin: 'https://ascii-tree-generator.com',
              extensionId: 'ascii-tree-generator-extension',
            },
            'https://null.com': null,
            'https://foo.com': 'bad data',
            'https://bar.com': ['bad data'],
          },
        },
      },
    };

    const newStorage = await migration69.migrate(oldStorage);
    expect(newStorage).toStrictEqual({
      meta: {
        version: 69,
      },
      data: {
        FooController: { a: 'b' },
        SubjectMetadataController: {
          subjectMetadata: {
            'https://1inch.exchange': {
              iconUrl:
                'https://1inch.exchange/assets/favicon/favicon-32x32.png',
              name: 'DEX Aggregator - 1inch.exchange',
              origin: 'https://1inch.exchange',
              extensionId: null,
              subjectType: SubjectType.Website,
            },
            'https://ascii-tree-generator.com': {
              iconUrl: 'https://ascii-tree-generator.com/favicon.ico',
              name: 'ASCII Tree Generator',
              origin: 'https://ascii-tree-generator.com',
              extensionId: 'ascii-tree-generator-extension',
              subjectType: SubjectType.Extension,
            },
            'https://null.com': null,
            'https://foo.com': 'bad data',
            'https://bar.com': ['bad data'],
          },
        },
      },
    });
  });

  it('should handle missing SubjectMetadataController', async () => {
    const oldStorage = {
      meta: {
        version: 68,
      },
      data: {
        FooController: { a: 'b' },
      },
    };

    const newStorage = await migration69.migrate(oldStorage);
    expect(newStorage).toStrictEqual({
      meta: {
        version: 69,
      },
      data: {
        FooController: { a: 'b' },
      },
    });
  });
});
