public void ConvertOperations_MissingIdInValue_Throws()
        {
            var service = new ChannelPatchService();

            var channelId   = Guid.NewGuid();
            var application = new Application
            {
                Channels = new List <Channel>
                {
                    new Channel {
                        Id = channelId
                    }
                }
            };

            var patchDocument = new JsonPatchDocument <Application>();

            patchDocument.Operations.Add(new Operation <Application>("replace", $"/channels/{channelId}", null, JObject.FromObject(
                                                                         new
            {
                name = "Named channel"
            })));

            Assert.Throws <InvalidOperationException>(() => service.ConvertOperations(patchDocument, application));
        }
        public void ConvertOperations_AddChannel_GeneratesChannelId()
        {
            var service = new ChannelPatchService();

            var application = new Application
            {
                Channels = new List <Channel>()
            };
            var nonExistingChannelId = Guid.NewGuid();
            var patchDocument        = new JsonPatchDocument <Application>();

            patchDocument.Operations.Add(new Operation <Application>("add", "/channels/-", null, JObject.FromObject(new
            {
                id = nonExistingChannelId
            })));

            var convertedPatch = service.ConvertOperations(patchDocument, application);

            convertedPatch.ApplyTo(application);

            var newChannelId = application.Channels.Single().Id;

            Assert.NotEqual(nonExistingChannelId, newChannelId);
            Assert.NotEqual(Guid.Empty, newChannelId);
        }
        public void ConvertOperations_RemoveChannel_RemovesOnlyTheSpecified()
        {
            var service = new ChannelPatchService();

            var channelId          = Guid.NewGuid();
            var remainingChannelId = Guid.NewGuid();
            var application        = new Application
            {
                Channels = new List <Channel>
                {
                    new Channel {
                        Id = channelId
                    },
                    new Channel {
                        Id = remainingChannelId
                    }
                }
            };

            var patchDocument = new JsonPatchDocument <Application>();

            patchDocument.Operations.Add(new Operation <Application>("remove", $"/channels/{channelId}", null));

            var convertedPatch = service.ConvertOperations(patchDocument, application);

            convertedPatch.ApplyTo(application);

            Assert.Equal(remainingChannelId, application.Channels.Single().Id);
        }