diff --git a/client/src/i18n/locales/en-US.ts b/client/src/i18n/locales/en-US.ts index 1a31a88..b20c867 100644 --- a/client/src/i18n/locales/en-US.ts +++ b/client/src/i18n/locales/en-US.ts @@ -425,8 +425,6 @@ export default { vip: 'VIP', nationality: 'Nationality', nationalityPlaceholder: 'Select nationality', - nationalityKr: 'KR', - nationalityChn: 'CHN', email: 'Email', idType: 'ID Type', idNumber: 'ID Number', @@ -449,7 +447,7 @@ export default { paymentTypeRequired: 'Select payment type.', paymentTypeAllowed: 'Only BTQR or CA are currently allowed.', nationalityRequired: 'Select nationality.', - nationalityAllowed: 'Only KR or CHN are currently allowed.', + nationalityAllowed: 'Only KR, CN, TH, MM, RS, or TW are currently allowed.', invalidEmail: 'Invalid email.', }, errors: { diff --git a/client/src/i18n/locales/th-TH.ts b/client/src/i18n/locales/th-TH.ts index 4ccface..fbba17a 100644 --- a/client/src/i18n/locales/th-TH.ts +++ b/client/src/i18n/locales/th-TH.ts @@ -425,8 +425,6 @@ export default { vip: 'VIP', nationality: 'Nationality', nationalityPlaceholder: 'เลือก Nationality', - nationalityKr: 'KR', - nationalityChn: 'CHN', email: 'Email', idType: 'ID Type', idNumber: 'ID Number', @@ -449,7 +447,7 @@ export default { paymentTypeRequired: 'กรุณาเลือก Payment Type', paymentTypeAllowed: 'รองรับเฉพาะ BTQR หรือ CA ในตอนนี้', nationalityRequired: 'กรุณาเลือก Nationality', - nationalityAllowed: 'รองรับเฉพาะ KR หรือ CHN ในตอนนี้', + nationalityAllowed: 'รองรับเฉพาะ KR, CN, TH, MM, RS หรือ TW ในตอนนี้', invalidEmail: 'รูปแบบ Email ไม่ถูกต้อง', }, errors: { diff --git a/client/src/i18n/locales/zh-CN.ts b/client/src/i18n/locales/zh-CN.ts index bb0bddb..56a7d2f 100644 --- a/client/src/i18n/locales/zh-CN.ts +++ b/client/src/i18n/locales/zh-CN.ts @@ -424,8 +424,6 @@ export default { vip: 'VIP', nationality: '国籍(Nationality)', nationalityPlaceholder: '请选择国籍', - nationalityKr: 'KR', - nationalityChn: 'CHN', email: '邮箱(Email)', idType: '证件类型(ID Type)', idNumber: '证件号码(ID Number)', @@ -448,7 +446,7 @@ export default { paymentTypeRequired: '请选择付款方式。', paymentTypeAllowed: '付款方式当前只允许 BTQR 或 CA。', nationalityRequired: '请选择国籍。', - nationalityAllowed: '国籍当前只允许 KR 或 CHN。', + nationalityAllowed: '国籍当前只允许 KR、CN、TH、MM、RS 或 TW。', invalidEmail: 'Email 格式不正确。', }, errors: { diff --git a/client/src/tests/roomingListService.spec.ts b/client/src/tests/roomingListService.spec.ts index 460b8fa..565523a 100644 --- a/client/src/tests/roomingListService.spec.ts +++ b/client/src/tests/roomingListService.spec.ts @@ -19,7 +19,7 @@ function createInput(): RoomingListGenerationInput { departure: '2026-05-16', roomType: 'DLX', paymentType: 'CA', - nationality: 'CHN', + nationality: 'CN', } } @@ -80,7 +80,7 @@ describe('roomingListService', () => { expect(formData.get('departure')).toBe('2026-05-16') expect(formData.get('room_type')).toBe('DLX') expect(formData.get('payment_type')).toBe('CA') - expect(formData.get('nationality')).toBe('CHN') + expect(formData.get('nationality')).toBe('CN') expect(formData.get('title')).toBeNull() expect(formData.get('rate_code')).toBeNull() expect(formData.get('adults')).toBeNull() diff --git a/client/src/tests/roomingListView.spec.ts b/client/src/tests/roomingListView.spec.ts index 131c2b1..bff9e45 100644 --- a/client/src/tests/roomingListView.spec.ts +++ b/client/src/tests/roomingListView.spec.ts @@ -86,7 +86,7 @@ async function fillRequiredFields(wrapper: ReturnType) { ) await wrapper.find('[data-testid="rooming-list-people-per-room"]').setValue('2') await wrapper.find('[data-testid="rooming-list-room-type"]').setValue('DLX') - await wrapper.find('[data-testid="rooming-list-nationality"]').setValue('CHN') + await wrapper.find('[data-testid="rooming-list-nationality"]').setValue('CN') } describe('ReservationRoomingListGenerationView', () => { @@ -188,7 +188,7 @@ describe('ReservationRoomingListGenerationView', () => { departure: '', roomType: 'DLX', paymentType: 'BTQR', - nationality: 'CHN', + nationality: 'CN', }) expect(URL.createObjectURL).toHaveBeenCalledWith(expect.any(Blob)) expect(HTMLAnchorElement.prototype.click).toHaveBeenCalledOnce() @@ -216,6 +216,27 @@ describe('ReservationRoomingListGenerationView', () => { ) }) + it('allows submitting expanded nationality codes when selected', async () => { + vi.mocked(generateReservationRoomingListExcel).mockResolvedValue({ + blob: new Blob(['xlsx-binary'], { + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + }), + fileName: 'rooming-list-HOTEL-TEST.xlsx', + }) + const wrapper = mountView() + await fillRequiredFields(wrapper) + await wrapper.find('[data-testid="rooming-list-nationality"]').setValue('TH') + + await wrapper.find('[data-testid="rooming-list-submit"]').trigger('click') + await flushPromises() + + expect(generateReservationRoomingListExcel).toHaveBeenCalledWith( + expect.objectContaining({ + nationality: 'TH', + }), + ) + }) + it('submits optional manual stay dates when they are provided', async () => { vi.mocked(generateReservationRoomingListExcel).mockResolvedValue({ blob: new Blob(['xlsx-binary'], { diff --git a/client/src/views/reservation/ReservationRoomingListGenerationView.vue b/client/src/views/reservation/ReservationRoomingListGenerationView.vue index d38b9f1..7e628e0 100644 --- a/client/src/views/reservation/ReservationRoomingListGenerationView.vue +++ b/client/src/views/reservation/ReservationRoomingListGenerationView.vue @@ -222,11 +222,12 @@ > {{ t('roomingList.nationalityPlaceholder') }} - -