import { describe, it, expect } from 'vitest'; import { SponsorSettingsViewModel, SponsorProfileViewModel, NotificationSettingsViewModel, PrivacySettingsViewModel } from './SponsorSettingsViewModel'; describe('SponsorSettingsViewModel', () => { const profile = { companyName: 'Acme Corp', contactName: 'John Doe', contactEmail: 'john@example.com', contactPhone: '+1234567890', website: 'https://acme.example', description: 'We sponsor racing', logoUrl: '/logo.png', industry: 'Automotive', address: { street: '123 Main St', city: 'Metropolis', country: 'US', postalCode: '12345', }, taxId: 'TAX-123', socialLinks: { twitter: '@acme', linkedin: 'https://linkedin.com/acme', instagram: '@acme_insta', }, }; const notifications = { emailNewSponsorships: true, emailWeeklyReport: false, emailRaceAlerts: true, emailPaymentAlerts: false, emailNewOpportunities: true, emailContractExpiry: true, }; const privacy = { publicProfile: true, showStats: false, showActiveSponsorships: true, allowDirectContact: false, }; it('maps raw settings object into nested view models', () => { const vm = new SponsorSettingsViewModel({ profile, notifications, privacy }); expect(vm.profile).toBeInstanceOf(SponsorProfileViewModel); expect(vm.notifications).toBeInstanceOf(NotificationSettingsViewModel); expect(vm.privacy).toBeInstanceOf(PrivacySettingsViewModel); expect(vm.profile.companyName).toBe(profile.companyName); expect(vm.notifications.emailNewSponsorships).toBe(true); expect(vm.privacy.publicProfile).toBe(true); }); it('exposes fullAddress computed from address fields', () => { const profileVm = new SponsorProfileViewModel(profile); expect(profileVm.fullAddress).toBe( `${profile.address.street}, ${profile.address.city}, ${profile.address.postalCode}, ${profile.address.country}`, ); }); it('preserves notification and privacy boolean flags', () => { const notificationsVm = new NotificationSettingsViewModel(notifications); const privacyVm = new PrivacySettingsViewModel(privacy); expect(notificationsVm.emailWeeklyReport).toBe(false); expect(notificationsVm.emailContractExpiry).toBe(true); expect(privacyVm.showStats).toBe(false); expect(privacyVm.allowDirectContact).toBe(false); }); });