public void Patch()
        {
            ObjectModel modelToUpdate = new ObjectModel();

            modelToUpdate.Boards.Add(new Board
            {
                FirmwareName = "Foobar"
            });
            modelToUpdate.Heat.BedHeaters.Add(-1);
            modelToUpdate.Heat.BedHeaters.Add(1);
            modelToUpdate.Heat.BedHeaters.Add(2);
            modelToUpdate.Heat.Heaters.Add(null);
            modelToUpdate.Heat.Heaters.Add(new Heater
            {
                Name    = "BED2",
                Standby = 20F
            });
            modelToUpdate.Heat.Heaters.Add(new Heater
            {
                Active = 45F,
                Name   = "BED3"
            });
            modelToUpdate.State.Status = MachineStatus.Busy;

            ObjectModel updatedModel = new ObjectModel();

            updatedModel.Boards.Add(new Board
            {
                FirmwareName = "Yum"
            });
            updatedModel.Heat.BedHeaters.Add(0);
            updatedModel.Heat.BedHeaters.Add(1);
            updatedModel.Heat.Heaters.Add(new Heater
            {
                Active  = 90F,
                Standby = 21F,
                Name    = "Bed"
            });
            updatedModel.Heat.Heaters.Add(new Heater
            {
                Name    = "BED2",
                Standby = 20F
            });
            updatedModel.Fans.Add(new Fan
            {
                ActualValue    = 0.5F,
                RequestedValue = 0.75F
            });
            updatedModel.State.Status   = MachineStatus.Pausing;
            updatedModel.Scanner.Status = ScannerStatus.PostProcessing;

            string patch = updatedModel.MakeStringPatch(modelToUpdate);

            TestContext.Out.Write(patch);

            using JsonDocument jsonPatch = JsonDocument.Parse(patch);
            modelToUpdate.UpdateFromJson(jsonPatch.RootElement);

            Assert.AreEqual("Yum", modelToUpdate.Boards[0].FirmwareName);
            Assert.AreEqual(2, modelToUpdate.Heat.BedHeaters.Count);
            Assert.AreEqual("Bed", modelToUpdate.Heat.Heaters[0].Name);
            Assert.AreEqual(90F, modelToUpdate.Heat.Heaters[0].Active);
            Assert.AreEqual(21F, modelToUpdate.Heat.Heaters[0].Standby);
            Assert.AreEqual("BED2", modelToUpdate.Heat.Heaters[1].Name);
            Assert.AreEqual(20F, modelToUpdate.Heat.Heaters[1].Standby);
            Assert.AreEqual(1, modelToUpdate.Fans.Count);
            Assert.AreEqual(0.5F, modelToUpdate.Fans[0].ActualValue);
            Assert.AreEqual(0.75F, modelToUpdate.Fans[0].RequestedValue);
            Assert.AreEqual(MachineStatus.Pausing, modelToUpdate.State.Status);
            Assert.AreEqual(ScannerStatus.PostProcessing, modelToUpdate.Scanner.Status);
        }