Skip to content

Commit bb5bdc9

Browse files
committed
test: use vi stub instead of Object.defineProperty to mock navigator language
1 parent c3c3ba3 commit bb5bdc9

File tree

5 files changed

+25
-19
lines changed

5 files changed

+25
-19
lines changed

packages/clerk-js/src/core/resources/SignUp.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,10 @@ export class SignUp extends BaseResource implements SignUpResource {
158158

159159
// Inject browser locale if not already provided
160160
if (!finalParams.locale) {
161-
finalParams.locale = getBrowserLocale();
161+
const browserLocale = getBrowserLocale();
162+
if (browserLocale) {
163+
finalParams.locale = browserLocale;
164+
}
162165
}
163166

164167
if (!__BUILD_DISABLE_RHC__ && !this.clientBypass() && !this.shouldBypassCaptchaForAttempt(params)) {
@@ -484,6 +487,7 @@ export class SignUp extends BaseResource implements SignUpResource {
484487
this.abandonAt = data.abandon_at;
485488
this.web3wallet = data.web3_wallet;
486489
this.legalAcceptedAt = data.legal_accepted_at;
490+
this.locale = data.locale;
487491
}
488492

489493
eventBus.emit('resource:update', { resource: this });
@@ -512,6 +516,7 @@ export class SignUp extends BaseResource implements SignUpResource {
512516
abandon_at: this.abandonAt,
513517
web3_wallet: this.web3wallet,
514518
legal_accepted_at: this.legalAcceptedAt,
519+
locale: this.locale,
515520
external_account: this.externalAccount,
516521
external_account_strategy: this.externalAccount?.strategy,
517522
};
@@ -627,6 +632,10 @@ class SignUpFuture implements SignUpFutureResource {
627632
return this.resource.legalAcceptedAt;
628633
}
629634

635+
get locale() {
636+
return this.resource.locale;
637+
}
638+
630639
get unverifiedFields() {
631640
return this.resource.unverifiedFields;
632641
}
@@ -685,7 +694,7 @@ class SignUpFuture implements SignUpFutureResource {
685694
async create(params: SignUpFutureCreateParams): Promise<{ error: unknown }> {
686695
return runAsyncResourceTask(this.resource, async () => {
687696
// Inject browser locale if not already provided
688-
const locale = params.locale || getBrowserLocale();
697+
const locale = params.locale || getBrowserLocale() || undefined;
689698
await this._create({ ...params, locale });
690699
});
691700
}

packages/clerk-js/src/test/core-fixtures.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ export const createSignUp = (signUpParams: Partial<SignUpJSON> = {}) => {
231231
first_name: signUpParams.first_name,
232232
has_password: signUpParams.has_password,
233233
last_name: signUpParams.last_name,
234+
legal_accepted_at: signUpParams.legal_accepted_at,
235+
locale: signUpParams.locale,
234236
missing_fields: signUpParams.missing_fields,
235237
object: 'sign_up',
236238
optional_fields: signUpParams.optional_fields,

packages/clerk-js/src/utils/__tests__/locale.test.ts

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,32 @@
1-
import { describe, expect, it } from 'vitest';
1+
import { afterEach, describe, expect, it, vi } from 'vitest';
22

33
import { getBrowserLocale } from '../locale';
44

55
describe('getBrowserLocale()', () => {
6+
afterEach(() => {
7+
vi.unstubAllGlobals();
8+
});
9+
610
it('returns the browser locale when available', () => {
7-
Object.defineProperty(window.navigator, 'language', {
8-
value: 'es-ES',
9-
configurable: true,
10-
});
11+
vi.stubGlobal('navigator', { language: 'es-ES' });
1112

1213
expect(getBrowserLocale()).toBe('es-ES');
1314
});
1415

1516
it('returns null as default when navigator.language is not available', () => {
16-
Object.defineProperty(window.navigator, 'language', {
17-
value: undefined,
18-
configurable: true,
19-
});
17+
vi.stubGlobal('navigator', { language: undefined });
2018

2119
expect(getBrowserLocale()).toBeNull();
2220
});
2321

2422
it('returns null as default when navigator.language is empty string', () => {
25-
Object.defineProperty(window.navigator, 'language', {
26-
value: '',
27-
configurable: true,
28-
});
23+
vi.stubGlobal('navigator', { language: '' });
2924

3025
expect(getBrowserLocale()).toBeNull();
3126
});
3227

3328
it('returns null as default when navigator object is not defined', () => {
34-
Object.defineProperty(window, 'navigator', {
35-
value: undefined,
36-
configurable: true,
37-
});
29+
vi.stubGlobal('navigator', undefined);
3830

3931
expect(getBrowserLocale()).toBeNull();
4032
});

packages/types/src/json.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export interface SignUpJSON extends ClerkResourceJSON {
136136
created_user_id: string | null;
137137
abandon_at: number | null;
138138
legal_accepted_at: number | null;
139+
locale: string | null;
139140
verifications: SignUpVerificationsJSON | null;
140141
}
141142

packages/types/src/signUpFuture.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ export interface SignUpFutureResource {
137137

138138
readonly legalAcceptedAt: number | null;
139139

140+
readonly locale: string | null;
141+
140142
create: (params: SignUpFutureCreateParams) => Promise<{ error: unknown }>;
141143

142144
update: (params: SignUpFutureUpdateParams) => Promise<{ error: unknown }>;

0 commit comments

Comments
 (0)