mirror of
https://github.com/bitwarden/browser
synced 2025-12-17 16:53:34 +00:00
[PM-6511] New i18n for angular (#8122)
* Use state provider to store preferred language * migrate preferred language * Use new i18n provider to get LOCAL_ID * Fix preloaded english i18n This is a mock service that forces english translations, it doesn't need the i18n interface that allows changing of locales. * PR improvements * Fixup merge
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import { MockProxy } from "jest-mock-extended";
|
||||
|
||||
import { MigrationHelper } from "../migration-helper";
|
||||
import { mockMigrationHelper } from "../migration-helper.spec";
|
||||
|
||||
import { LOCALE_KEY, PreferredLanguageMigrator } from "./32-move-preferred-language";
|
||||
|
||||
function exampleJSON() {
|
||||
return {
|
||||
global: {
|
||||
locale: "en",
|
||||
otherStuff: "otherStuff1",
|
||||
},
|
||||
otherStuff: "otherStuff2",
|
||||
};
|
||||
}
|
||||
|
||||
function rollbackJSON() {
|
||||
return {
|
||||
global_translation_locale: "en",
|
||||
global: {
|
||||
otherStuff: "otherStuff1",
|
||||
},
|
||||
otherStuff: "otherStuff2",
|
||||
};
|
||||
}
|
||||
|
||||
describe("PreferredLanguageMigrator", () => {
|
||||
let helper: MockProxy<MigrationHelper>;
|
||||
let sut: PreferredLanguageMigrator;
|
||||
|
||||
describe("migrate", () => {
|
||||
beforeEach(() => {
|
||||
helper = mockMigrationHelper(exampleJSON(), 31);
|
||||
sut = new PreferredLanguageMigrator(31, 32);
|
||||
});
|
||||
|
||||
it("should remove locale setting from global", async () => {
|
||||
await sut.migrate(helper);
|
||||
expect(helper.set).toHaveBeenCalledTimes(1);
|
||||
expect(helper.set).toHaveBeenCalledWith("global", {
|
||||
otherStuff: "otherStuff1",
|
||||
});
|
||||
});
|
||||
|
||||
it("should set locale for global state provider", async () => {
|
||||
await sut.migrate(helper);
|
||||
|
||||
expect(helper.setToGlobal).toHaveBeenCalledTimes(1);
|
||||
expect(helper.setToGlobal).toHaveBeenCalledWith(LOCALE_KEY, "en");
|
||||
});
|
||||
});
|
||||
|
||||
describe("rollback", () => {
|
||||
beforeEach(() => {
|
||||
helper = mockMigrationHelper(rollbackJSON(), 32);
|
||||
sut = new PreferredLanguageMigrator(31, 32);
|
||||
});
|
||||
|
||||
it("should null out new values for global", async () => {
|
||||
await sut.rollback(helper);
|
||||
|
||||
expect(helper.setToGlobal).toHaveBeenCalledTimes(1);
|
||||
expect(helper.setToGlobal).toHaveBeenCalledWith(LOCALE_KEY, null);
|
||||
});
|
||||
|
||||
it("should add locale back to the old global object", async () => {
|
||||
await sut.rollback(helper);
|
||||
|
||||
expect(helper.set).toHaveBeenCalledTimes(1);
|
||||
expect(helper.set).toHaveBeenCalledWith("global", {
|
||||
locale: "en",
|
||||
otherStuff: "otherStuff1",
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,39 @@
|
||||
import { MigrationHelper } from "../migration-helper";
|
||||
import { Migrator } from "../migrator";
|
||||
|
||||
type ExpectedGlobal = {
|
||||
locale?: string;
|
||||
};
|
||||
|
||||
export const LOCALE_KEY = {
|
||||
key: "locale",
|
||||
stateDefinition: {
|
||||
name: "translation",
|
||||
},
|
||||
};
|
||||
|
||||
export class PreferredLanguageMigrator extends Migrator<31, 32> {
|
||||
async migrate(helper: MigrationHelper): Promise<void> {
|
||||
// global state
|
||||
const global = await helper.get<ExpectedGlobal>("global");
|
||||
if (!global?.locale) {
|
||||
return;
|
||||
}
|
||||
|
||||
await helper.setToGlobal(LOCALE_KEY, global.locale);
|
||||
delete global.locale;
|
||||
await helper.set("global", global);
|
||||
}
|
||||
|
||||
async rollback(helper: MigrationHelper): Promise<void> {
|
||||
const locale = await helper.getFromGlobal<string>(LOCALE_KEY);
|
||||
|
||||
if (!locale) {
|
||||
return;
|
||||
}
|
||||
const global = (await helper.get<ExpectedGlobal>("global")) ?? {};
|
||||
global.locale = locale;
|
||||
await helper.set("global", global);
|
||||
await helper.setToGlobal(LOCALE_KEY, null);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user