Example #1
0
        public void Configuration(IAppBuilder app)
        {
            // Get the settings from the web.config
            ConfigReaderWriter configReader = new FullTrustConfigReaderWriter("");
            ApplicationSettings applicationSettings = configReader.GetApplicationSettings();

            // Configure StructureMap dependencies
            var iocSetup = new DependencyManager(applicationSettings);
            iocSetup.Configure();
            iocSetup.ConfigureMvc();

            // Logging
            Log.ConfigureLogging(applicationSettings);

            // Filters
            GlobalFilters.Filters.Add(new HandleErrorAttribute());

            // Areas are used for:
            // - Site settings (for a cleaner view structure)
            // This should be called before the other routes, for some reason.
            AreaRegistration.RegisterAllAreas();

            // Register routes and JS/CSS bundles
            Routing.RegisterApi(GlobalConfiguration.Configuration);
            Routing.Register(RouteTable.Routes);

            // Custom view engine registration (to add directory search paths for Theme views)
            ExtendedRazorViewEngine.Register();

            app.UseWebApi(new HttpConfiguration());

            Log.Information("Application started");
        }
Example #2
0
		public void Three_Constructor_Argument_Should_Throw_If_Installed_With_No_Connection_String()
		{
			// Arrange, act, assert
			ApplicationSettings settings = new ApplicationSettings();
			settings.Installed = true;

			DependencyManager container = new DependencyManager(settings, new RepositoryMock(), new UserContext(null));
		}
        public void RegisterMvcFactoriesAndRouteHandlers_Requires_Run_First()
        {
            // Arrange
            DependencyManager container = new DependencyManager(new ApplicationSettings());

            // Act
            container.ConfigureMvc();

            // Assert
        }
        public void MongoDB_databaseType_Should_Load_Repository()
        {
            // Arrange
            Mock<IRepository> mockRepository = new Mock<IRepository>();
            Mock<IUserContext> mockContext = new Mock<IUserContext>();
            ApplicationSettings settings = new ApplicationSettings();
            settings.DataStoreType = DataStoreType.MongoDB;

            // Act
            DependencyManager iocContainer = new DependencyManager(settings, mockRepository.Object, mockContext.Object);
            iocContainer.Configure();

            // Assert
            Assert.That(ServiceLocator.GetInstance<UserServiceBase>(), Is.TypeOf(typeof(FormsAuthUserService)));
        }
        public void Custom_Configuration_Repository_And_Context_Types_Should_Be_Registered()
        {
            // Arrange
            ApplicationSettings settings = new ApplicationSettings();
            DependencyManager container = new DependencyManager(settings, new RepositoryMock(), new UserContextStub());

            // Act
            container.Configure();
            IRepository repository = ObjectFactory.GetInstance<IRepository>();
            IUserContext context = ObjectFactory.GetInstance<IUserContext>();

            // Assert
            Assert.That(repository, Is.TypeOf<RepositoryMock>());
            Assert.That(context, Is.TypeOf<UserContextStub>());
        }
Example #6
0
		public void Single_Constructor_Argument_Should_Register_Default_Instances()
		{
			// Arrange
			DependencyManager container = new DependencyManager(new ApplicationSettings());

			// Act
			container.Configure();
			ApplicationSettings settings = ObjectFactory.TryGetInstance<ApplicationSettings>();
			IRepository repository = ObjectFactory.GetInstance<IRepository>();
			IUserContext context = ObjectFactory.GetInstance<IUserContext>();
			IPageService pageService = ObjectFactory.GetInstance<IPageService>();			
			MarkupConverter markupConverter = ObjectFactory.GetInstance<MarkupConverter>();
			CustomTokenParser tokenParser = ObjectFactory.GetInstance<CustomTokenParser>();
			UserViewModel userModel = ObjectFactory.GetInstance<UserViewModel>();
			SettingsViewModel settingsModel = ObjectFactory.GetInstance<SettingsViewModel>();
			AttachmentRouteHandler routerHandler = ObjectFactory.GetInstance<AttachmentRouteHandler>();
			UserServiceBase userManager = ObjectFactory.GetInstance<UserServiceBase>();
			IPluginFactory pluginFactory = ObjectFactory.GetInstance<IPluginFactory>();
			IWikiImporter wikiImporter = ObjectFactory.GetInstance<IWikiImporter>();
			IAuthorizationProvider authProvider = ObjectFactory.GetInstance<IAuthorizationProvider>();
			IActiveDirectoryProvider adProvider = ObjectFactory.GetInstance<IActiveDirectoryProvider>();


			// Assert
			Assert.That(settings, Is.Not.Null);
			Assert.That(repository, Is.TypeOf<LightSpeedRepository>());
			Assert.That(context, Is.TypeOf<UserContext>());
			Assert.That(pageService, Is.TypeOf<PageService>());			
			Assert.That(markupConverter, Is.TypeOf<MarkupConverter>());
			Assert.That(tokenParser, Is.TypeOf<CustomTokenParser>());
			Assert.That(userModel, Is.TypeOf<UserViewModel>());
			Assert.That(settingsModel, Is.TypeOf<SettingsViewModel>());
			Assert.That(userManager, Is.TypeOf<FormsAuthUserService>());
			Assert.That(pluginFactory, Is.TypeOf<PluginFactory>());
			Assert.That(wikiImporter, Is.TypeOf<ScrewTurnImporter>());
			Assert.That(authProvider, Is.TypeOf<AuthorizationProvider>());
			Assert.That(adProvider, Is.TypeOf<ActiveDirectoryProvider>());

		}
		public void TestDatabaseConnection_Should_Allow_Get_And_Return_Json_Result_And_TestResult_With_No_Errors()
		{
			// Arrange
			string sqlCeDbPath = Path.Combine(Settings.LIB_FOLDER, "Empty-databases", "roadkill.sdf");
			string sqlCeDbDestPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "testdatabase.sdf");
			File.Copy(sqlCeDbPath, sqlCeDbDestPath, true);

			string connectionString = @"Data Source=|DataDirectory|\testdatabase.sdf";
			DependencyManager manager = new DependencyManager(new ApplicationSettings());
			manager.Configure();

			// Act
			JsonResult result = _configTesterController.TestDatabaseConnection(connectionString, "SqlServerCE") as JsonResult;

			// Assert
			Assert.That(result, Is.Not.Null, "JsonResult");
			Assert.That(result.JsonRequestBehavior, Is.EqualTo(JsonRequestBehavior.AllowGet));

			TestResult data = result.Data as TestResult;
			Assert.That(data, Is.Not.Null);
			Assert.That(data.Success, Is.True, data.ErrorMessage);
			Assert.That(data.ErrorMessage, Is.Null.Or.Empty);
		}
        public void RegisterMvcFactoriesAndRouteHandlers_Should_Register_Instances()
        {
            // Arrange
            RouteTable.Routes.Clear();
            DependencyManager iocSetup = new DependencyManager(new ApplicationSettings());

            // Act
            iocSetup.Configure();
            iocSetup.ConfigureMvc();

            // Assert
            Assert.That(RouteTable.Routes.Count, Is.EqualTo(1));
            Assert.That(((Route)RouteTable.Routes[0]).RouteHandler, Is.TypeOf<AttachmentRouteHandler>());
            Assert.True(ModelBinders.Binders.ContainsKey(typeof(SettingsViewModel)));
            Assert.True(ModelBinders.Binders.ContainsKey(typeof(UserViewModel)));
        }
        public void WindowsAuth_Should_Register_ActiveDirectoryUserManager()
        {
            // Arrange
            ApplicationSettings settings = new ApplicationSettings();
            settings.UseWindowsAuthentication = true;
            settings.LdapConnectionString = "LDAP://123.com";
            settings.EditorRoleName = "editor;";
            settings.AdminRoleName = "admins";

            DependencyManager container = new DependencyManager(settings, new RepositoryMock(), new UserContextStub());

            // Act
            container.Configure();
            UserServiceBase usermanager = ObjectFactory.GetInstance<UserServiceBase>();

            // Assert
            Assert.That(usermanager, Is.TypeOf<ActiveDirectoryUserService>());
        }
        public void Should_Register_Service_Instances_When_Windows_Auth_Enabled()
        {
            // Arrange
            ApplicationSettings settings = new ApplicationSettings();
            settings.UseWindowsAuthentication = true;
            settings.LdapConnectionString = "LDAP://123.com";
            settings.EditorRoleName = "editor;";
            settings.AdminRoleName = "admins";

            DependencyManager container = new DependencyManager(new ApplicationSettings());

            // Act
            container.Configure();

            // fake some AD settings for the AD service
            ObjectFactory.Inject<ApplicationSettings>(settings);

            IList<ServiceBase> services = ObjectFactory.GetAllInstances<ServiceBase>();

            // Assert
            Assert.That(services.Count, Is.GreaterThanOrEqualTo(7));
        }
        public void Should_Register_Controller_Instances()
        {
            // Arrange
            DependencyManager container = new DependencyManager(new ApplicationSettings());

            // Act
            container.Configure();
            ObjectFactory.Configure(x => x.For<ConfigReaderWriter>().Use<ConfigReaderWriterStub>()); // this avoids issues with the web.config trying to be loaded

            IList<Roadkill.Core.Mvc.Controllers.ControllerBase> controllers = ObjectFactory.GetAllInstances<Roadkill.Core.Mvc.Controllers.ControllerBase>();

            // Assert
            Assert.That(controllers.Count, Is.GreaterThanOrEqualTo(9));
        }
        public void Should_Load_Custom_UserService()
        {
            // Arrange
            ApplicationSettings applicationSettings = new ApplicationSettings();
            applicationSettings.UserServiceType = "Roadkill.Tests.UserServiceStub";
            DependencyManager iocSetup = new DependencyManager(applicationSettings);

            // Put the UserServiceStub in a new assembly so we can test it's loaded
            string tempFilename = Path.GetFileName(Path.GetTempFileName()) + ".dll";
            string thisAssembly = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Roadkill.Tests.dll");
            string pluginSourceDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins", "UserService");
            string destPlugin = Path.Combine(pluginSourceDir, tempFilename);

            if (!Directory.Exists(pluginSourceDir))
                Directory.CreateDirectory(pluginSourceDir);

            File.Copy(thisAssembly, destPlugin, true);

            // Act
            iocSetup.Configure();

            // Assert
            UserServiceBase userManager = ObjectFactory.GetInstance<UserServiceBase>();
            Assert.That(userManager.GetType().FullName, Is.EqualTo("Roadkill.Tests.UserServiceStub"));
        }
        public void Should_Load_Custom_Repository_From_DatabaseType()
        {
            // Arrange
            ApplicationSettings applicationSettings = new ApplicationSettings();
            applicationSettings.DataStoreType = DataStoreType.MongoDB;
            DependencyManager container = new DependencyManager(applicationSettings);

            // Act
            container.Configure();

            // Assert
            IRepository respository = ObjectFactory.GetInstance<IRepository>();
            Assert.That(respository, Is.TypeOf<MongoDBRepository>());
        }
        public void Should_Load_ActiveDirectory_UserService_When_UseWindowsAuth_Is_True()
        {
            // Arrange
            Mock<IRepository> mockRepository = new Mock<IRepository>();
            Mock<IUserContext> mockContext = new Mock<IUserContext>();

            ApplicationSettings settings = new ApplicationSettings();
            settings.UseWindowsAuthentication = true;
            settings.LdapConnectionString = "LDAP://dc=roadkill.org";
            settings.AdminRoleName = "editors";
            settings.EditorRoleName = "editors";

            // Act
            DependencyManager iocSetup = new DependencyManager(settings, mockRepository.Object, mockContext.Object);
            iocSetup.Configure();

            // Assert
            Assert.That(ServiceLocator.GetInstance<UserServiceBase>(), Is.TypeOf(typeof(ActiveDirectoryUserService)));
        }
		public void TestDatabaseConnection_Should_Return_TestResult_With_Errors_For_Invalid_ConnectionString()
		{
			// Arrange
			string connectionString = "invalid connection string";
			DependencyManager manager = new DependencyManager(new ApplicationSettings());
			manager.Configure();

			// Act
			JsonResult result = _configTesterController.TestDatabaseConnection(connectionString, "SqlServerCE") as JsonResult;

			// Assert
			Assert.That(result, Is.Not.Null, "JsonResult");

			TestResult data = result.Data as TestResult;
			Assert.That(data, Is.Not.Null);
			Assert.That(data.Success, Is.False, data.ErrorMessage);
			Assert.That(data.ErrorMessage, Is.Not.Null.Or.Empty);
		}
        public void SaveSiteSettings_Should_Persist_All_Values()
        {
            // Arrange
            ApplicationSettings appSettings = new ApplicationSettings();
            SiteSettings siteSettings = new SiteSettings()
            {
                AllowedFileTypes = "jpg, png, gif",
                AllowUserSignup = true,
                IsRecaptchaEnabled = true,
                MarkupType = "markuptype",
                RecaptchaPrivateKey = "privatekey",
                RecaptchaPublicKey = "publickey",
                SiteName = "sitename",
                SiteUrl = "siteurl",
                Theme = "theme",
            };
            SettingsViewModel validConfigSettings = new SettingsViewModel()
            {
                AllowedFileTypes = "jpg, png, gif",
                AllowUserSignup = true,
                IsRecaptchaEnabled = true,
                MarkupType = "markuptype",
                RecaptchaPrivateKey = "privatekey",
                RecaptchaPublicKey = "publickey",
                SiteName = "sitename",
                SiteUrl = "siteurl",
                Theme = "theme",
            };

            RepositoryMock repository = new RepositoryMock();

            DependencyManager iocSetup = new DependencyManager(appSettings, repository, new UserContext(null)); // context isn't used
            iocSetup.Configure();
            SettingsService settingsService = new SettingsService(appSettings, repository);

            // Act
            settingsService.SaveSiteSettings(validConfigSettings);

            // Assert
            SiteSettings actualSettings = settingsService.GetSiteSettings();

            Assert.That(actualSettings.AllowedFileTypes.Contains("jpg"), "AllowedFileTypes jpg");
            Assert.That(actualSettings.AllowedFileTypes.Contains("gif"), "AllowedFileTypes gif");
            Assert.That(actualSettings.AllowedFileTypes.Contains("png"), "AllowedFileTypes png");
            Assert.That(actualSettings.AllowUserSignup, Is.True, "AllowUserSignup");
            Assert.That(actualSettings.IsRecaptchaEnabled, Is.True, "IsRecaptchaEnabled");
            Assert.That(actualSettings.MarkupType, Is.EqualTo("markuptype"), "MarkupType");
            Assert.That(actualSettings.RecaptchaPrivateKey, Is.EqualTo("privatekey"), "RecaptchaPrivateKey");
            Assert.That(actualSettings.RecaptchaPublicKey, Is.EqualTo("publickey"), "RecaptchaPublicKey");
            Assert.That(actualSettings.SiteName, Is.EqualTo("sitename"), "SiteName");
            Assert.That(actualSettings.SiteUrl, Is.EqualTo("siteurl"), "SiteUrl");
            Assert.That(actualSettings.Theme, Is.EqualTo("theme"), "Theme");
        }
        public void Should_Use_FormsAuthUserService_By_Default()
        {
            // Arrange
            Mock<IRepository> mockRepository = new Mock<IRepository>();
            Mock<IUserContext> mockContext = new Mock<IUserContext>();
            ApplicationSettings settings = new ApplicationSettings();

            // Act
            DependencyManager iocSetup = new DependencyManager(settings, mockRepository.Object, mockContext.Object);
            iocSetup.Configure();

            // Assert
            Assert.That(ServiceLocator.GetInstance<UserServiceBase>(), Is.TypeOf(typeof(FormsAuthUserService)));
        }