return function() local PatchSet = require(script.Parent.Parent.PatchSet) local InstanceMap = require(script.Parent.Parent.InstanceMap) local createPatchSet = require(script.Parent.createPatchSet) it("should return a patch", function() local patch = createPatchSet(InstanceMap.new(), {}) assert(PatchSet.validate(patch)) end) it("should contain updates for every instance with property changes", function() local instanceMap = InstanceMap.new() local part1 = Instance.new("Part") instanceMap:insert("PART_1", part1) local part2 = Instance.new("Part") instanceMap:insert("PART_2", part2) local changes = { [part1] = { Position = true, Size = true, Color = true, }, [part2] = { CFrame = true, Velocity = true, Transparency = true, }, } local patch = createPatchSet(instanceMap, changes) expect(#patch.updated).to.equal(2) end) it("should not contain any updates for removed instances", function() local instanceMap = InstanceMap.new() local part1 = Instance.new("Part") instanceMap:insert("PART_1", part1) local changes = { [part1] = { Parent = true, Position = true, Size = true, }, } local patch = createPatchSet(instanceMap, changes) expect(#patch.removed).to.equal(1) expect(#patch.updated).to.equal(0) end) it("should remove instances from the property change table", function() local instanceMap = InstanceMap.new() local part1 = Instance.new("Part") instanceMap:insert("PART_1", part1) local changes = { [part1] = {}, } createPatchSet(instanceMap, changes) expect(next(changes)).to.equal(nil) end) end