diff --git a/src/__tests__/entity.update.unit.test.ts b/src/__tests__/entity.update.unit.test.ts index cf962080f..d170c22e3 100644 --- a/src/__tests__/entity.update.unit.test.ts +++ b/src/__tests__/entity.update.unit.test.ts @@ -90,6 +90,24 @@ const TestEntity3 = new Entity({ table: TestTable3 } as const) +const TestTable4 = new Table({ + name: 'test-table4', + partitionKey: 'pk', + entityField: false, + DocumentClient +}) + +const TestEntity4 = new Entity({ + name: 'TestEntity4', + autoExecute: false, + attributes: { + email: { type: 'string', partitionKey: true }, + test_number_default_with_map: { type: 'number', map: 'test_mapped_number', default: 0, onUpdate: false }, + }, + timestamps: false, + table: TestTable4 +} as const) + const TestEntityGSI = new Entity({ name: 'TestEntityGSI', autoExecute: false, @@ -204,6 +222,26 @@ describe('update', () => { ) }) + it('allows overriding default field values that use mapping', () => { + const { + UpdateExpression, + ExpressionAttributeNames, + ExpressionAttributeValues + } = TestEntity4.updateParams({ + email: 'test-pk', + test_number_default_with_map: 111 + }) + + expect(ExpressionAttributeNames?.['#test_mapped_number']).toBe('test_mapped_number') + expect(ExpressionAttributeValues?.[':test_mapped_number']).toBe(111) + + expect(UpdateExpression).toBe( + 'SET #test_mapped_number = :test_mapped_number' + ) + + }) + + it('fails when removing fields with default values', () => { expect(() => TestEntity.updateParams({ email: 'test-pk', sort: 'test-sk', $remove: 'test_string' }) diff --git a/src/classes/Entity/Entity.ts b/src/classes/Entity/Entity.ts index 7d75333ec..a083a6141 100644 --- a/src/classes/Entity/Entity.ts +++ b/src/classes/Entity/Entity.ts @@ -1178,7 +1178,7 @@ class Entity