From 89acf0ac201afbb14166830515e2fec6961f816d Mon Sep 17 00:00:00 2001 From: Benedikt Magnus <magnus@magnuscraft.de> Date: Sat, 6 Nov 2021 18:32:37 +0100 Subject: [PATCH] Country names are now localised (correctly capitalised) in outputs. --- scripts/utility/localisation.ts | 10 ++++++++++ scripts/utility/tokenString.ts | 3 ++- .../message/modules/informationModule.ts | 7 +++---- tests/tests/messages/statefulCommands.ts | 19 ++++++++++++++----- tests/tests/utility.tokenString.ts | 6 +++++- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/scripts/utility/localisation.ts b/scripts/utility/localisation.ts index 42f32ea..8d4e189 100644 --- a/scripts/utility/localisation.ts +++ b/scripts/utility/localisation.ts @@ -165,4 +165,14 @@ export default abstract class Localisation return result; } + + public static translateCountry (country: string): string + { + // NOTE: The countries are already in the local language all over the database. Technically, this only corrects the capitalisation. + + const indexOfCountry = Config.main.allowedCountries.indexOf(country); + const localisedCountry = Config.rawCountries[indexOfCountry]; + + return localisedCountry; + } } diff --git a/scripts/utility/tokenString.ts b/scripts/utility/tokenString.ts index d82a159..d8e30b2 100644 --- a/scripts/utility/tokenString.ts +++ b/scripts/utility/tokenString.ts @@ -94,7 +94,6 @@ export default class TokenString if (contactData instanceof Member) { map.set('address', contactData.information.address); - map.set('country', contactData.information.country); map.set('digitalAddress', contactData.information.digitalAddress); map.set('wishList', contactData.information.wishList); map.set('allergies', contactData.information.allergies); @@ -102,6 +101,8 @@ export default class TokenString map.set('userExclusion', contactData.information.userExclusion); map.set('freeText', contactData.information.freeText); + map.set('country', Localisation.translateCountry(contactData.information.country)); + map.set('internationalAllowed', Localisation.translateBoolean(contactData.information.internationalAllowed)); map.set('giftTypeAsTaker', Localisation.translateGiftType(contactData.information.giftTypeAsTaker)); diff --git a/scripts/wichtelbot/message/modules/informationModule.ts b/scripts/wichtelbot/message/modules/informationModule.ts index b516dd7..0f2c384 100644 --- a/scripts/wichtelbot/message/modules/informationModule.ts +++ b/scripts/wichtelbot/message/modules/informationModule.ts @@ -129,10 +129,9 @@ export default class InformationModule { const member = this.database.getMember(message.author.id); - // TODO: The country from the database is all lowercase, it should be made "normal" (starting with an upper case, - // or even decently localised) at this point. + const localisedCountry = Localisation.translateCountry(member.information.country); - await this.sendCurrentInformationValue(message, member, member.information.country); + await this.sendCurrentInformationValue(message, member, localisedCountry); } public async sendCurrentDigitalAddress (message: Message): Promise<void> @@ -341,7 +340,7 @@ export default class InformationModule visualisations.push( { headline: Localisation.texts.profileCounty.process(member), - text: member.information.country, + text: Localisation.translateCountry(member.information.country), type: VisualisationType.Compact } ); diff --git a/tests/tests/messages/statefulCommands.ts b/tests/tests/messages/statefulCommands.ts index 49af6a4..1d3faa7 100644 --- a/tests/tests/messages/statefulCommands.ts +++ b/tests/tests/messages/statefulCommands.ts @@ -647,15 +647,23 @@ describe('statefulCommands', { const expectedFreeText = '-'; + let called = false; + const testCallback = (text: string, member: Member): void => { - const parameters = new KeyValuePairList('currentEventName', Config.main.currentEvent.name); - assert.strictEqual(text, Localisation.texts.becameMember.process(member, parameters)); - assert.strictEqual(member.state, State.Waiting); - assert.strictEqual(member.type, ContactType.Member); - assert.strictEqual(member.information.freeText, expectedFreeText); + if (!called) // Only check the first call. + { + const parameters = new KeyValuePairList('currentEventName', Config.main.currentEvent.name); + assert.strictEqual(text, Localisation.texts.becameMember.process(member, parameters)); + assert.strictEqual(member.state, State.Waiting); + assert.strictEqual(member.type, ContactType.Member); + assert.strictEqual(member.information.freeText, expectedFreeText); + } + called = true; }; + // TODO: This is messy. Using mockito instead could make this much easier. + const message = new CommandTestMessage(database, testCallback, ChannelType.Personal); message.content = expectedFreeText; @@ -664,6 +672,7 @@ describe('statefulCommands', await messageHandler.process(message); assert.strictEqual(message.called, true); + assert.strictEqual(called, true); } ); } diff --git a/tests/tests/utility.tokenString.ts b/tests/tests/utility.tokenString.ts index e57c9de..5228673 100644 --- a/tests/tests/utility.tokenString.ts +++ b/tests/tests/utility.tokenString.ts @@ -5,6 +5,7 @@ import ContactTestUtility from '../utility/contact'; import { KeyValuePairList } from '../../scripts/utility/keyValuePair'; import Localisation from '../../scripts/utility/localisation'; import TokenString from '../../scripts/utility/tokenString'; +import Config from '../../scripts/utility/config'; describe('tokenString', function () @@ -46,6 +47,9 @@ describe('tokenString', { const member = ContactTestUtility.createRandomMember(); + member.information.country = Config.main.allowedCountries[0]; + const expectedCountry = Localisation.translateCountry(member.information.country); + const internationalAllowedString = Localisation.translateBoolean(member.information.internationalAllowed); const giftTypeAsTakerString = Localisation.translateGiftType(member.information.giftTypeAsTaker); const giftTypeAsGiverString = Localisation.translateGiftType(member.information.giftTypeAsGiver); @@ -58,7 +62,7 @@ describe('tokenString', '{information.userExclusion}, {information.freeText}'; const expectedString = `${member.name}, ${member.tag}, ${member.nickname},` + `${giftTypeAsTakerString}, ${giftTypeAsGiverString},` + - `${member.information.address}, ${member.information.country}, ${member.information.digitalAddress},` + + `${member.information.address}, ${expectedCountry}, ${member.information.digitalAddress},` + `${internationalAllowedString}, ${member.information.wishList},` + `${member.information.allergies}, ${member.information.giftExclusion},` + `${member.information.userExclusion}, ${member.information.freeText}`; -- GitLab