public void LoadDefaultConfigurationOnStartupTest()
        {
            var config = new ServiceHostConfiguration();
            var coreServices = new[] { "Tests" };
            var customServices = new[] { "QualityCenter" };
            var viewMock = MockRepository.StrictMock<IConfigurationView>();

            Expect.Call(FacadeMock.CreateConfiguration()).Return(config);
            Expect.Call(viewMock.Controller).PropertyBehavior();
            Expect.Call(viewMock.GenerateSnapshotMenuItemEnabled).PropertyBehavior();
            Expect.Call(viewMock.NewFileMenuItemEnabled).PropertyBehavior();
            Expect.Call(viewMock.OpenFileMenuItemEnabled).PropertyBehavior();
            Expect.Call(viewMock.OptionsMenuItemEnabled).PropertyBehavior();
            Expect.Call(viewMock.SaveFileAsMenuItemEnabled).PropertyBehavior();
            Expect.Call(viewMock.SaveFileMenuItemEnabled).PropertyBehavior();
            Expect.Call(FacadeMock.AnyFileExists(ConfigurationFileNames)).Return(true);
            Expect.Call(FacadeMock.FileExists(Filename)).Return(true);
            Expect.Call(FacadeMock.LoadConfigurationFromFile(Filename)).Return(config);
            Expect.Call(() => FacadeMock.ResetConnection());
            Expect.Call(uiFactoryMock.GetNextPage(GeneralPageKey, config, null)).IgnoreArguments().Return(null);
            Expect.Call(viewMock.HeaderText).PropertyBehavior();
            Expect.Call(viewMock.CurrentControl).PropertyBehavior();
            Expect.Call(uiFactoryMock.GetCoreServiceNames(config)).Return(coreServices);
            Expect.Call(uiFactoryMock.GetCustomServiceNames(config)).Return(customServices);
            Expect.Call(() => viewMock.SetServiceNodesAndRedraw(coreServices, customServices));
            Expect.Call(() => viewMock.SetCoreServiceNodesEnabled(false));

            MockRepository.ReplayAll();

            var controller = new ConfigurationFormController(FacadeMock, uiFactoryMock);
            controller.RegisterView(viewMock);
            controller.PrepareView();

            MockRepository.VerifyAll();
        }
        public void ServiceDependencyValidationFailureTest()
        {
            P4ServiceEntity entity = new P4ServiceEntity();
            IEnumerable<BaseServiceEntity> entities = new BaseServiceEntity[] {
                entity,
            };

            settings = new ServiceHostConfiguration(entities);
            validator.CheckOtherServiceDependency(entity, settings);
        }
        public void ServiceDependencyValidationSuccessTest()
        {
            P4ServiceEntity entity = new P4ServiceEntity();
            ChangesetWriterEntity writerEntity = new ChangesetWriterEntity();
            IList<BaseServiceEntity> entities = new BaseServiceEntity[] {
                entity, writerEntity,
            };

            settings = new ServiceHostConfiguration(entities);
            validator.CheckOtherServiceDependency(entity, settings);
        }
        /// <summary>
        /// Throw exception if entity depends on other entity that is missing.
        /// </summary>
        /// <param name="entity">entity to validate</param>
        /// <param name="config">Service Host configuration container</param>
        /// <exception cref="DependencyFailureException" />
        public void CheckOtherServiceDependency(BaseServiceEntity entity, ServiceHostConfiguration config) {
            var attributes = entity.GetType().GetCustomAttributes(typeof (DependsOnServiceAttribute), false);
            
            if(attributes.Length < 1) {
                return;
            }

            foreach(var attribute in attributes.Cast<DependsOnServiceAttribute>().Where(attribute => config[attribute.ServiceType] == null)) {
                throw new DependencyFailureException(attribute.ServiceType, "Service dependency does not exist");
            }
        }
        public void ServiceDependenciesValidationFailureTest()
        {
            P4ServiceEntity p4Entity = new P4ServiceEntity();
            ChangesetWriterEntity writerEntity = new ChangesetWriterEntity();
            FitnesseServiceEntity fitEntity = new FitnesseServiceEntity();
            IList<BaseServiceEntity> entities = new BaseServiceEntity[] {
                p4Entity, writerEntity, fitEntity,
            };

            settings = new ServiceHostConfiguration(entities);
            validator.CheckServiceDependencies(settings);
        }
 public ConfigurationFormController(IFacade facade, IUIFactory uiFactory)
 {
     facadeImpl = facade;
     this.uiFactory = uiFactory;
     settings = facade.CreateConfiguration();
 }
        public void LoadFromFile(string fileName)
        {
            try
            {
                settings = facadeImpl.LoadConfigurationFromFile(fileName);

                new DependencyValidator(facadeImpl).CheckServiceDependencies(settings);

                facadeImpl.ResetConnection();
                ShowPage("General");
                view.SetServiceNodesAndRedraw(uiFactory.GetCoreServiceNames(settings), uiFactory.GetCustomServiceNames(settings));
                view.SetCoreServiceNodesEnabled(false);
                currentFileNameValue = fileName;
            }
            catch (InvalidFilenameException ex)
            {
                view.ShowErrorMessage(ex.Message);
            }
            catch (DependencyFailureException)
            {
                settings = facadeImpl.CreateConfiguration();
                view.SetServiceNodesAndRedraw(null, null);
                view.ShowErrorMessage(Resources.ServiceDependenciesInFileInvalid);
            }
        }
 public override void SetUp()
 {
     base.SetUp();
     validator = new DependencyValidator(FacadeMock);
     settings = new ServiceHostConfiguration();
 }
 /// <summary>
 /// Throw exception if Service entities depend on other entities that are missing. Usable when business-validating data
 /// coming from configuration file.
 /// </summary>
 /// <param name="config">Service Host configuration container to validate</param>
 /// <exception cref="DependencyFailureException" />
 public void CheckServiceDependencies(ServiceHostConfiguration config) {
     foreach(var entity in config.Services) {
         CheckOtherServiceDependency(entity, config);
     }
 }
        public void SaveConfigurationToFileWithoutNameSelectionTest()
        {
            var config = new ServiceHostConfiguration();

            Expect.Call(FacadeMock.CreateConfiguration()).Return(config);
            Expect.Call(FacadeMock.SaveConfigurationToFile(config, Filename)).Return(new ConfigurationValidationResult());

            MockRepository.ReplayAll();

            var controller = new ConfigurationFormController(FacadeMock, uiFactoryMock);
            controller.SaveToFile(string.Empty);

            MockRepository.VerifyAll();
        }
        public void LoadValidConfigurationFileTest()
        {
            var config = new ServiceHostConfiguration();
            var coreServices = new[] { "Tests" };
            var customServices = new[] { "QualityCenter" };

            var viewMock = MockRepository.StrictMock<IConfigurationView>();

            Expect.Call(FacadeMock.CreateConfiguration()).Return(config);
            Expect.Call(viewMock.Controller).Repeat.Once().PropertyBehavior();
            Expect.Call(FacadeMock.LoadConfigurationFromFile(Filename)).Return(config);
            Expect.Call(() => FacadeMock.ResetConnection());
            Expect.Call(uiFactoryMock.GetNextPage(GeneralPageKey, config, null)).IgnoreArguments().Return(null);
            Expect.Call(viewMock.HeaderText).Repeat.Once().PropertyBehavior();
            Expect.Call(viewMock.CurrentControl).Repeat.Once().PropertyBehavior();
            Expect.Call(uiFactoryMock.GetCoreServiceNames(config)).Return(coreServices);
            Expect.Call(uiFactoryMock.GetCustomServiceNames(config)).Return(customServices);
            Expect.Call(() => viewMock.SetServiceNodesAndRedraw(coreServices, customServices));
            Expect.Call(() => viewMock.SetCoreServiceNodesEnabled(false));

            MockRepository.ReplayAll();

            var controller = new ConfigurationFormController(FacadeMock, uiFactoryMock);
            controller.RegisterView(viewMock);
            controller.LoadFromFile(Filename);

            Assert.AreEqual(Filename, controller.CurrentFileName);

            MockRepository.VerifyAll();
        }
        public void LoadFileInvalidFilenameTest()
        {
            const string wrongFilename = "VersionOne.ServiceHost.exe.config.wrong";
            var config = new ServiceHostConfiguration();
            var viewMock = MockRepository.StrictMock<IConfigurationView>();

            Expect.Call(FacadeMock.CreateConfiguration()).Return(config);
            Expect.Call(viewMock.Controller).PropertyBehavior();
            Expect.Call(FacadeMock.LoadConfigurationFromFile(wrongFilename)).Throw(new InvalidFilenameException(string.Empty));
            Expect.Call(() => viewMock.ShowErrorMessage(string.Empty)).IgnoreArguments();

            MockRepository.ReplayAll();

            var controller = new ConfigurationFormController(FacadeMock, uiFactoryMock);
            controller.RegisterView(viewMock);
            controller.LoadFromFile(wrongFilename);

            MockRepository.VerifyAll();
        }
        public void LoadFileInvalidConfigurationDataTest()
        {
            var entity = new P4ServiceEntity();
            var config = new ServiceHostConfiguration(new BaseServiceEntity[] { entity });
            var viewMock = MockRepository.StrictMock<IConfigurationView>();

            Expect.Call(FacadeMock.CreateConfiguration()).Return(config);
            Expect.Call(viewMock.Controller).PropertyBehavior();
            Expect.Call(FacadeMock.LoadConfigurationFromFile(Filename)).Return(config);
            Expect.Call(FacadeMock.CreateConfiguration()).Return(new ServiceHostConfiguration());
            Expect.Call(() => viewMock.SetServiceNodesAndRedraw(null, null));
            Expect.Call(() => viewMock.ShowErrorMessage(string.Empty)).IgnoreArguments();

            MockRepository.ReplayAll();

            var controller = new ConfigurationFormController(FacadeMock, uiFactoryMock);
            controller.RegisterView(viewMock);
            controller.LoadFromFile(Filename);

            MockRepository.VerifyAll();
        }
 public void SetUp()
 {
     configuration = Facade.Instance.CreateConfiguration();
 }
 private GeneralController CreateController()
 {
     ServiceHostConfiguration model = new ServiceHostConfiguration();
     return new GeneralController(model, FacadeMock);
 }