public void Update(string account, string id, [FromBody] ProgramUpdateSettings settings)
        {
            if (settings == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }
            var program = MapProgram(account, id);

            if (program == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }

            if (program.State != ProgramState.Stopped)
            {
                throw new HttpResponseException(HttpStatusCode.PreconditionFailed);
            }
            program.Description         = settings.Description ?? program.Description;
            program.ArchiveWindowLength = settings.ArchiveWindowLength == default(TimeSpan) ? program.ArchiveWindowLength : settings.ArchiveWindowLength;
            program.Update();
        }
        public void ProgramCRUDTest()
        {
            var account    = App.Config.Content.ContentProviders[0].MediaServicesSets[0].MediaServicesAccounts[0];
            var controller = new ProgramsController();
            var context    = account.GetContext();

            var channel      = context.Channels.FirstOrDefault();
            int programCount = context.Programs.Count();
            var name         = string.Format("New-Program-{0}", DateTime.UtcNow.ToOADate().ToString().Replace(".", "-"));

            var settings = new ProgramSettings
            {
                Name                = name,
                Description         = name,
                ArchiveWindowLength = TimeSpan.FromHours(1)
            };

            controller.Create(account.AccountName, channel.Id.NimbusIdToRawGuid(), settings);
            Assert.AreEqual(programCount + 1, context.Programs.Count());

            var program = context.Programs.ToList().First(o => o.Name == name);

            //update the channel.
            var updateSettings = new ProgramUpdateSettings
            {
                Description = "SomeDescription"
            };

            controller.Update(account.AccountName, program.Id.NimbusIdToRawGuid(), updateSettings);

            // create new context to avoid cache issue.
            context = account.GetContext();
            program = context.Programs.Where(p => p.Id == program.Id).FirstOrDefault();
            Assert.IsNotNull(program);

            Assert.AreEqual(updateSettings.Description, program.Description);

            controller.Delete(account.AccountName, program.Id.NimbusIdToRawGuid());
            Assert.AreEqual(programCount, context.Programs.Count());
        }
        public IActionResult Update(string account, string id, [FromBody] ProgramUpdateSettings settings)
        {
            if (settings == null)
            {
                return(BadRequest());
            }

            var program = MapProgram(account, id);

            if (program == null)
            {
                return(NotFound());
            }

            if (program.State != ProgramState.Stopped)
            {
                return(StatusCode(412));
            }
            program.Description         = settings.Description ?? program.Description;
            program.ArchiveWindowLength = settings.ArchiveWindowLength == default(TimeSpan) ? program.ArchiveWindowLength : settings.ArchiveWindowLength;
            program.Update();
            return(Ok());
        }