public void EditTest()
        {
            // Создадим пользователя
            var account    = TestHelper.GetTestAccount();
            var user       = TestHelper.CreateTestUser(account.Id);
            var dispatcher = TestHelper.GetDispatcherClient();

            var channels = new[]
            {
                SubscriptionChannel.Email,
                SubscriptionChannel.Sms,
                SubscriptionChannel.Http
            };

            foreach (var channel in channels)
            {
                // Получим подписку по умолчанию
                var response = dispatcher.CreateSubscription(account.Id, new CreateSubscriptionRequestData()
                {
                    UserId  = user.Id,
                    Object  = SubscriptionObject.Default,
                    Channel = channel
                });
                var defaultSubscription = response.Data;

                // Изменим подписку по умолчанию
                SubscriptionEditModel model;
                using (var controller = new SubscriptionsController(account.Id, user.Id))
                {
                    var result = (ViewResultBase)controller.Edit(defaultSubscription.Id);
                    model = (SubscriptionEditModel)result.Model;
                }

                model.ReturnUrl       = "/";
                model.IsEnabled       = !model.IsEnabled;
                model.Color           = ColorStatusSelectorValue.FromEventImportance(EventImportance.Success);
                model.MinimumDuration = TimeSpan.FromSeconds(10);
                model.ResendTime      = TimeSpan.FromSeconds(20);

                using (var controller = new SubscriptionsController(account.Id, user.Id))
                {
                    controller.Edit(model);
                }

                // Проверим подписку по умолчанию
                var response2 = dispatcher.CreateSubscription(account.Id, new CreateSubscriptionRequestData()
                {
                    UserId  = user.Id,
                    Object  = SubscriptionObject.Default,
                    Channel = channel
                });
                var newDefaultSubscription = response2.Data;

                Assert.Equal(model.IsEnabled, newDefaultSubscription.IsEnabled);
                Assert.Equal(EventImportance.Success, newDefaultSubscription.Importance);
                Assert.Equal(10, newDefaultSubscription.DurationMinimumInSeconds);
                Assert.Equal(20, newDefaultSubscription.ResendTimeInSeconds);
            }
        }
        public void AdminTest()
        {
            // Создадим пользователя
            var account = TestHelper.GetTestAccount();
            var user    = TestHelper.CreateTestUser(account.Id);
            var admin   = TestHelper.GetAccountAdminUser(account.Id);

            // Проверим, что админ может видеть чужие подписки
            SubscriptionListModel model;

            using (var controller = new SubscriptionsController(account.Id, admin.Id))
            {
                // прочитаем подписки админа
                var result = (ViewResultBase)controller.Index(user.Id);
                model = (SubscriptionListModel)result.Model;
            }
            Assert.Equal(user.Id, model.UserId);
            Assert.True(model.Subscriptions.Length > 0);
            Assert.True(model.Subscriptions.All(t => t.UserId == user.Id));

            // откроем подписку админа на редактирование
            var userSubscription            = model.Subscriptions.First();
            SubscriptionEditModel editModel = null;

            using (var controller = new SubscriptionsController(account.Id, user.Id))
            {
                var result = (ViewResultBase)controller.Edit(userSubscription.Id);
                editModel = (SubscriptionEditModel)result.Model;
                Assert.Null(editModel.MinimumDuration);
            }

            // сохраним изменения в подписке пользователя
            using (var controller = new SubscriptionsController(account.Id, admin.Id))
            {
                editModel.MinimumDuration = TimeSpan.FromSeconds(10);
                controller.Edit(editModel);
            }

            // проверим, что настройки подписки изменились
            using (var accountDbContext = account.CreateAccountDbContext())
            {
                var subscription = accountDbContext.Subscriptions.Find(userSubscription.Id);
                Assert.Equal(10, subscription.DurationMinimumInSeconds);
            }
        }