diff --git a/__test__/unit/user/user.test.ts b/__test__/unit/user/user.test.ts index cfac447b2..8226eb0cb 100644 --- a/__test__/unit/user/user.test.ts +++ b/__test__/unit/user/user.test.ts @@ -54,4 +54,20 @@ describe('User tests', () => { expect(tags).toBe(tagsSample); }); + + + test('getLanguage should return the correct user language', async () => { + await TestEnvironment.initialize(); + + const languageSample = 'fr' + + const propertyModel = getDummyPropertyOSModel(); + propertyModel.set('language', languageSample); + OneSignal.coreDirector.add(ModelName.Properties, propertyModel); + + const user = User.createOrGetInstance(); + const language = user.getLanguage(); + + expect(language).toBe(languageSample); + }); }); diff --git a/src/onesignal/User.ts b/src/onesignal/User.ts index 695aa8668..3001bfe2a 100644 --- a/src/onesignal/User.ts +++ b/src/onesignal/User.ts @@ -341,4 +341,27 @@ export default class User { return OneSignal.coreDirector.getPropertiesModel()?.data?.tags; } + + public setLanguage(language: string): void { + logMethodCall('setLanguage', { language }); + + if (typeof language !== 'string') { + throw new InvalidArgumentError( + 'language', + InvalidArgumentReason.WrongType, + ); + } + + if (!language) { + throw new InvalidArgumentError('language', InvalidArgumentReason.Empty); + } + + const propertiesModel = OneSignal.coreDirector.getPropertiesModel(); + propertiesModel?.set('language', language); + } + + public getLanguage(): string { + logMethodCall('getLanguage'); + return OneSignal.coreDirector.getPropertiesModel()?.data?.language; + } } diff --git a/src/onesignal/UserNamespace.ts b/src/onesignal/UserNamespace.ts index a8beed3c0..fc27342c5 100644 --- a/src/onesignal/UserNamespace.ts +++ b/src/onesignal/UserNamespace.ts @@ -91,6 +91,14 @@ export default class UserNamespace extends EventListenerBase { return this._currentUser?.getTags() || {}; } + public setLanguage(language: string): void { + this._currentUser?.setLanguage(language); + } + + public getLanguage(): string { + return this._currentUser?.getLanguage() || ''; + } + addEventListener( event: 'change', listener: (userChange: UserChangeEvent) => void,