|
11 | 11 |
|
12 | 12 | import test from 'japa'
|
13 | 13 | import { DateTime } from 'luxon'
|
| 14 | +import { lodash } from '@poppinss/utils' |
14 | 15 | import { ApplicationContract } from '@ioc:Adonis/Core/Application'
|
15 | 16 | import type { HasOne, HasMany, BelongsTo } from '@ioc:Adonis/Lucid/Orm'
|
16 | 17 |
|
@@ -458,6 +459,36 @@ test.group('Base Model | getter-setters', (group) => {
|
458 | 459 | assert.equal(user.username, 'virk')
|
459 | 460 | assert.equal(user.toJSON().username, 'VIRK')
|
460 | 461 | })
|
| 462 | + |
| 463 | + test.failing('implement custom merge strategies using getters and setters', (assert) => { |
| 464 | + class User extends BaseModel { |
| 465 | + private _preferences: object = {} |
| 466 | + |
| 467 | + @column() |
| 468 | + public get preferences(): object { |
| 469 | + return this._preferences |
| 470 | + } |
| 471 | + |
| 472 | + public set preferences(value: object) { |
| 473 | + lodash.merge(this._preferences, value) |
| 474 | + } |
| 475 | + } |
| 476 | + |
| 477 | + const user = new User() |
| 478 | + user.preferences = { |
| 479 | + theme: 'dark', |
| 480 | + } |
| 481 | + |
| 482 | + assert.deepEqual(user.preferences, { theme: 'dark' }) |
| 483 | + user.$hydrateOriginals() |
| 484 | + |
| 485 | + assert.deepEqual(user.$dirty, {}) |
| 486 | + |
| 487 | + user.merge({ preferences: { notifications: true } }) |
| 488 | + assert.deepEqual(user.preferences, { theme: 'dark', notifications: true }) |
| 489 | + |
| 490 | + assert.deepEqual(user.$dirty, { preferences: { theme: 'dark', notifications: true } }) |
| 491 | + }) |
461 | 492 | })
|
462 | 493 |
|
463 | 494 | test.group('Base Model | dirty', (group) => {
|
|
0 commit comments