diff --git a/__tests__/base.js b/__tests__/base.js index 8a856bc81..96c3e1a14 100644 --- a/__tests__/base.js +++ b/__tests__/base.js @@ -1,5 +1,5 @@ "use strict" -import produce, {setAutoFreeze, setUseProxies, nothing} from "../src/immer" +import produce, {setAutoFreeze, setUseProxies, nothing, isDraft} from "../src/immer" import deepFreeze from "deep-freeze" import cloneDeep from "lodash.clonedeep" import * as lodash from "lodash" @@ -1311,6 +1311,40 @@ function runBaseTest(name, useProxies, freeze, useListener) { return freeze ? deepFreeze(data) : data } }) + + describe(`isDraft - ${name}`, () => { + beforeAll(() => { + setAutoFreeze(freeze) + setUseProxies(useProxies) + }) + + it('returns true for object drafts', () => { + produce({}, state => { + expect(isDraft(state)).toBeTruthy() + }) + }) + it('returns true for array drafts', () => { + produce([], state => { + expect(isDraft(state)).toBeTruthy() + }) + }) + it('returns true for objects nested in object drafts', () => { + produce({ a: { b: {} } }, state => { + expect(isDraft(state.a)).toBeTruthy() + expect(isDraft(state.a.b)).toBeTruthy() + }) + }) + it('returns false for new objects added to a draft', () => { + produce({}, state => { + state.a = {} + expect(isDraft(state.a)).toBeFalsy() + }) + }) + it('returns false for a returned draft', () => { + const result = produce({}, state => state) + expect(isDraft(result)).toBeFalsy() + }) + }) } function enumerableOnly(x) {