import { strict as assert } from 'assert';
import migration36 from './036';

describe('migration #36', function () {
  it('should update the version metadata', function (done) {
    const oldStorage = {
      meta: {
        version: 35,
      },
      data: {},
    };

    migration36
      .migrate(oldStorage)
      .then((newStorage) => {
        assert.deepEqual(newStorage.meta, {
          version: 36,
        });
        done();
      })
      .catch(done);
  });

  it('should remove privacyMode if featureFlags.privacyMode was false', function (done) {
    const oldStorage = {
      meta: {},
      data: {
        PreferencesController: {
          featureFlags: {
            privacyMode: false,
          },
        },
      },
    };

    migration36
      .migrate(oldStorage)
      .then((newStorage) => {
        assert.deepEqual(newStorage.data.PreferencesController, {
          featureFlags: {},
        });
        done();
      })
      .catch(done);
  });

  it('should remove privacyMode if featureFlags.privacyMode was true', function (done) {
    const oldStorage = {
      meta: {},
      data: {
        PreferencesController: {
          featureFlags: {
            privacyMode: true,
          },
        },
      },
    };

    migration36
      .migrate(oldStorage)
      .then((newStorage) => {
        assert.deepEqual(newStorage.data.PreferencesController, {
          featureFlags: {},
        });
        done();
      })
      .catch(done);
  });

  it('should NOT change any state if privacyMode does not exist', function (done) {
    const oldStorage = {
      meta: {},
      data: {
        PreferencesController: {
          migratedPrivacyMode: true,
          featureFlags: {},
        },
      },
    };

    migration36
      .migrate(oldStorage)
      .then((newStorage) => {
        assert.deepEqual(newStorage.data, oldStorage.data);
        done();
      })
      .catch(done);
  });

  it('should NOT change any state if PreferencesController is missing', function (done) {
    const oldStorage = {
      meta: {},
      data: {},
    };

    migration36
      .migrate(oldStorage)
      .then((newStorage) => {
        assert.deepEqual(newStorage.data, oldStorage.data);
        done();
      })
      .catch(done);
  });

  it('should NOT change any state if featureFlags is missing', function (done) {
    const oldStorage = {
      meta: {},
      data: {
        PreferencesController: {},
      },
    };

    migration36
      .migrate(oldStorage)
      .then((newStorage) => {
        assert.deepEqual(newStorage.data, oldStorage.data);
        done();
      })
      .catch(done);
  });
});