diff --git a/locksmith/__tests__/operations/eventOperations.test.ts b/locksmith/__tests__/operations/eventOperations.test.ts index bc95348af9d..e642a47f0e6 100644 --- a/locksmith/__tests__/operations/eventOperations.test.ts +++ b/locksmith/__tests__/operations/eventOperations.test.ts @@ -78,7 +78,7 @@ describe('eventOperations', () => { }) it('should not override previously set event data', async () => { - expect.assertions(5) + expect.assertions(6) const eventParams = getEventFixture({ data: { name: 'my party', @@ -115,7 +115,8 @@ describe('eventOperations', () => { '0x123' ) expect(sameEvent.slug).toEqual(event.slug) - expect(sameEvent.data.ticket.event_end_date).toEqual('2024-05-22') + expect(sameEvent.name).toEqual('name changed!') + expect(sameEvent.data.ticket.event_end_date).toEqual('2024-05-22') // unchanged expect(sameEvent.data.ticket.event_address).toEqual( 'Central Park, New York, NY 10014, USA' ) diff --git a/locksmith/src/operations/eventOperations.ts b/locksmith/src/operations/eventOperations.ts index 7fa7d7fe0b8..97d81d1978d 100644 --- a/locksmith/src/operations/eventOperations.ts +++ b/locksmith/src/operations/eventOperations.ts @@ -1,7 +1,11 @@ import dayjs from '../config/dayjs' import { kebabCase, defaultsDeep } from 'lodash' import * as metadataOperations from './metadataOperations' -import { PaywallConfig, getLockTypeByMetadata } from '@unlock-protocol/core' +import { + PaywallConfig, + getLockTypeByMetadata, + toFormData, +} from '@unlock-protocol/core' import { CheckoutConfig, EventData } from '../models' import { saveCheckoutConfig } from './checkoutConfigOperations' import { EventBodyType } from '../controllers/v2/eventsController' @@ -63,6 +67,11 @@ export const getEventForLock = async ( if (event && !includeProtected) { event.data = removeProtectedAttributesFromObject(event.data) } + // Robustness principle: the front-end, as well as mailers expects a ticket object to be present + if (event) { + const ticket = toFormData(event?.data).ticket + event.data.ticket = defaultsDeep(ticket, event.data.ticket) + } return event } @@ -169,6 +178,12 @@ export const getEventBySlug = async ( slug, }, }) + // Robustness principle: the front-end, as well as mailers expects a ticket object to be present + if (event) { + const ticket = toFormData(event?.data).ticket + event.data.ticket = defaultsDeep(ticket, event.data.ticket) + } + if (event && !includeProtected) { event.data = removeProtectedAttributesFromObject(event.data) }