예제 #1
0
        public void pagecontent_constructor_should_fill_properties_and_parse_markup()
        {
            // Arrange
            PageContent content = new PageContent();

            content.Page            = new Page();
            content.Page.Id         = 3;
            content.Page.Title      = "my title";
            content.Page.CreatedBy  = "me";
            content.Page.CreatedOn  = DateTime.Now;
            content.Page.IsLocked   = true;
            content.Page.ModifiedBy = "me2";
            content.Page.ModifiedOn = DateTime.Now.AddDays(1);
            content.Page.Tags       = "tag1,tag2,tag3";
            content.Text            = "some text **in bold**";
            content.VersionNumber   = 5;

            TextPluginStub plugin = new TextPluginStub();

            plugin.IsCacheable        = false;
            plugin.HeadContent        = "head content";
            plugin.FooterContent      = "footer content";
            plugin.PreContainerHtml   = "pre container";
            plugin.PostContainerHtml  = "post container";
            plugin.PluginCache        = new SiteCache(CacheMock.RoadkillCache);
            plugin.Repository         = _settingsRepository;
            plugin.Settings.IsEnabled = true;
            _pluginFactory.RegisterTextPlugin(plugin);

            // Act
            PageViewModel model = new PageViewModel(content, _markupConverter);

            // Assert
            Assert.That(model.Id, Is.EqualTo(content.Page.Id));
            Assert.That(model.Title, Is.EqualTo(content.Page.Title));
            Assert.That(model.CreatedBy, Is.EqualTo(content.Page.CreatedBy));
            Assert.That(model.ModifiedBy, Is.EqualTo(content.Page.ModifiedBy));
            Assert.That(model.VersionNumber, Is.EqualTo(content.VersionNumber));
            Assert.That(model.Content, Is.EqualTo(content.Text));

            Assert.That(model.CreatedOn, Is.EqualTo(content.Page.CreatedOn));
            Assert.That(model.CreatedOn.Kind, Is.EqualTo(DateTimeKind.Utc));
            Assert.That(model.ModifiedOn, Is.EqualTo(content.Page.ModifiedOn));
            Assert.That(model.ModifiedOn.Kind, Is.EqualTo(DateTimeKind.Utc));

            Assert.That(model.Tags.Count(), Is.EqualTo(3));
            Assert.That(model.Tags, Contains.Item("tag1"));
            Assert.That(model.Tags, Contains.Item("tag2"));
            Assert.That(model.Tags, Contains.Item("tag3"));

            // (this extra html is from the plugin)
            Assert.That(model.ContentAsHtml, Is.EqualTo("<p>some text <strong style='color:green'><iframe src='javascript:alert(test)'>in bold</strong>\n</p>"), model.ContentAsHtml);

            Assert.That(model.IsCacheable, Is.EqualTo(plugin.IsCacheable));
            Assert.That(model.PluginHeadHtml, Is.EqualTo(plugin.HeadContent));
            Assert.That(model.PluginFooterHtml, Is.EqualTo(plugin.FooterContent));
            Assert.That(model.PluginPreContainer, Is.EqualTo(plugin.PreContainerHtml));
            Assert.That(model.PluginPostContainer, Is.EqualTo(plugin.PostContainerHtml));
        }
예제 #2
0
        public void Settings_Should_Throw_Exception_If_SiteCache_Is_Not_Set()
        {
            // Arrange
            TextPluginStub plugin = new TextPluginStub();

            // Act + Assert
            PluginSettings settings = plugin.Settings;
        }
예제 #3
0
        public void constructor_should_set_cacheable_to_true()
        {
            // Arrange
            TextPluginStub plugin = new TextPluginStub();

            // Act + Assert
            Assert.That(plugin.IsCacheable, Is.True);
        }
예제 #4
0
        public void DatabaseId_Should_Default_Version_To_1_If_Version_Is_Empty()
        {
            // Arrange
            TextPluginStub plugin = new TextPluginStub("", "", "", "");

            // Act + Assert
            PluginSettings settings = plugin.Settings;
        }
예제 #5
0
        public void DatabaseId_Should_Throw_Exception_When_Id_Is_Empty()
        {
            // Arrange
            string         id     = "";
            TextPluginStub plugin = new TextPluginStub(id, "name", "description");

            // Act + Assert
            Guid databaseId = plugin.DatabaseId;
        }
예제 #6
0
        public void PluginVirtualPath_Should_Throw_Exception_When_Id_Is_Empty()
        {
            // Arrange
            string         id     = "";
            TextPluginStub plugin = new TextPluginStub(id, "name", "description");

            // Act + Assert
            string path = plugin.PluginVirtualPath;
        }
예제 #7
0
        public void Settings_Should_Throw_Exception_If_Repository_Is_Not_Set()
        {
            // Arrange
            TextPluginStub plugin = new TextPluginStub();

            plugin.PluginCache = new SiteCache(new CacheMock());

            // Act + Assert
            PluginSettings settings = plugin.Settings;
        }
예제 #8
0
        public void Constructor_Should_Set_Cacheable_To_True()
        {
            // Arrange
            RepositoryMock      repository  = new RepositoryMock();
            ApplicationSettings appSettings = new ApplicationSettings();

            TextPluginStub plugin = new TextPluginStub();

            // Act + Assert
            Assert.That(plugin.IsCacheable, Is.True);
        }
예제 #9
0
        public void Settings_Should_Not_Be_Null()
        {
            // Arrange + act
            TextPlugin plugin = new TextPluginStub();

            plugin.Repository  = new RepositoryMock();
            plugin.PluginCache = new SiteCache(new ApplicationSettings(), CacheMock.RoadkillCache);

            // Assert
            Assert.That(plugin.Settings, Is.Not.Null);
        }
예제 #10
0
        public void settings_should_not_be_null()
        {
            // Arrange + act
            TextPlugin plugin = new TextPluginStub();

            plugin.Repository  = new SettingsRepositoryMock();
            plugin.PluginCache = new SiteCache(CacheMock.RoadkillCache);

            // Assert
            Assert.That(plugin.Settings, Is.Not.Null);
        }
예제 #11
0
        public void RegisterTextPlugin_Should_Register_Plugin_And_GetTextPlugin_Should_Return_Plugin()
        {
            // Arrange
            PluginFactory  factory    = new PluginFactory();
            TextPluginStub pluginStub = new TextPluginStub("randomid", "name", "desc");

            // Act
            factory.RegisterTextPlugin(pluginStub);
            TextPlugin actualPlugin = factory.GetTextPlugin("randomid");

            // Assert
            Assert.That(actualPlugin, Is.Not.Null);
        }
예제 #12
0
        public void registertextplugin_should_register_plugin_and_gettextplugin_should_return_plugin()
        {
            // Arrange
            PluginFactory  factory    = CreateFactory();
            TextPluginStub pluginStub = new TextPluginStub("randomid", "name", "desc");

            // Act
            factory.RegisterTextPlugin(pluginStub);
            TextPlugin actualPlugin = factory.GetTextPlugin("randomid");

            // Assert
            Assert.That(actualPlugin, Is.Not.Null);
        }
예제 #13
0
        public void pluginvirtualpath_should_contain_plugin_id_and_no_trailing_slash()
        {
            // Arrange
            TextPluginStub plugin = new TextPluginStub("Plugin1", "name", "desc");

            // Act
            string virtualPath = plugin.PluginVirtualPath;

            // Assert
            Assert.That(virtualPath, Is.StringContaining("Plugin1"));
            Assert.That(virtualPath, Is.StringStarting("~/Plugins/"));
            Assert.That(virtualPath, Is.Not.StringEnding("/"));
        }
예제 #14
0
        public void DatabaseId_Should_Be_Different_Based_On_Id()
        {
            // Arrange
            TextPluginStub plugin1 = new TextPluginStub("PluginId1", "name", "desc");
            TextPluginStub plugin2 = new TextPluginStub("PluginId2", "name", "desc");

            // Act
            Guid id1 = plugin1.DatabaseId;
            Guid id2 = plugin2.DatabaseId;

            // Assert
            Assert.That(id1, Is.Not.EqualTo(id2));
        }
예제 #15
0
        public void databaseid_should_be_different_based_on_id()
        {
            // Arrange
            TextPluginStub plugin1 = new TextPluginStub("PluginId1", "name", "desc");
            TextPluginStub plugin2 = new TextPluginStub("PluginId2", "name", "desc");

            // Act
            Guid id1 = plugin1.DatabaseId;
            Guid id2 = plugin2.DatabaseId;

            // Assert
            Assert.That(id1, Is.Not.EqualTo(id2));
        }
예제 #16
0
        public void PluginVirtualPath_Should_Contain_Plugin_Id_And_No_Trailing_Slash()
        {
            // Arrange
            TextPluginStub plugin = new TextPluginStub("Plugin1", "name", "desc");

            // Act
            string virtualPath = plugin.PluginVirtualPath;

            // Assert
            Assert.That(virtualPath, Is.StringContaining("Plugin1"));
            Assert.That(virtualPath, Is.StringStarting("~/Plugins/"));
            Assert.That(virtualPath, Is.Not.StringEnding("/"));
        }
예제 #17
0
        public void Settings_Should_Throw_Exception_If_Id_Is_Not_Set()
        {
            // Arrange
            Mock <IPluginCache> pluginCacheMock = new Mock <IPluginCache>();
            var settingsRepositoryMock          = new SettingsRepositoryMock();

            TextPluginStub plugin = new TextPluginStub("", "", "", "");

            plugin.PluginCache = pluginCacheMock.Object;
            plugin.Repository  = settingsRepositoryMock;

            // Act + Assert
            PluginSettings actualPluginSettings = plugin.Settings;
        }
예제 #18
0
        public void Settings_Should_Throw_Exception_If_Id_Is_Not_Set()
        {
            // Arrange
            CacheMock           cache           = new CacheMock();
            ApplicationSettings appSettings     = new ApplicationSettings();
            Mock <IPluginCache> pluginCacheMock = new Mock <IPluginCache>();
            RepositoryMock      repository      = new RepositoryMock();

            TextPluginStub plugin = new TextPluginStub("", "", "", "");

            plugin.PluginCache = pluginCacheMock.Object;
            plugin.Repository  = repository;

            // Act + Assert
            PluginSettings actualPluginSettings = plugin.Settings;
        }
예제 #19
0
        public void getcsslink_should_contain_file_and_expected_html()
        {
            // Arrange
            TextPluginStub plugin       = new TextPluginStub("PluginId", "name", "desc");
            string         expectedHtml = "\t\t" +
                                          @"<link href=""~/Plugins/PluginId/file.css?version={PluginVersion}"" rel=""stylesheet"" type=""text/css"" />" +
                                          "\n";

            expectedHtml = expectedHtml.Replace("{PluginVersion}", plugin.Version);

            // Act
            string actualHtml = plugin.GetCssLink("file.css");

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml), actualHtml);
        }
예제 #20
0
        public void getjavascripthtml_should_contain_scripts_with_headjs()
        {
            // Arrange
            TextPlugin plugin = new TextPluginStub();

            plugin.AddScript("pluginscript.js", "script1");
            string expectedHtml = @"<script type=""text/javascript"">" +
                                  @"head.js({ ""script1"", ""pluginscript.js"" },function() {  })" +
                                  "</script>\n";

            // Act
            string actualHtml = plugin.GetJavascriptHtml();

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml), actualHtml);
        }
예제 #21
0
        public void gettextplugins_should_return_all_plugins()
        {
            // Arrange
            PluginFactory  factory     = CreateFactory();
            TextPluginStub plugin1Stub = new TextPluginStub("plugin1", "name", "desc");
            TextPluginStub plugin2Stub = new TextPluginStub("plugin2", "name", "desc");

            factory.RegisterTextPlugin(plugin1Stub);
            factory.RegisterTextPlugin(plugin2Stub);

            // Act
            IEnumerable <TextPlugin> allPlugins = factory.GetTextPlugins();

            // Assert
            Assert.That(allPlugins.Count(), Is.GreaterThanOrEqualTo(2));
        }
예제 #22
0
        public void should_export_siteconfiguration_and_plugin_settings()
        {
            // Arrange
            var settingsRepository = new SettingsRepositoryMock();

            settingsRepository.SiteSettings.PluginLastSaveDate = new DateTime(2013, 11, 09, 0, 0, 0);
            settingsRepository.SiteSettings.AllowedFileTypes   = ".exe,.vbscript";
            settingsRepository.SiteSettings.MenuMarkup         = "markup ```''' \r\n";

            // Plugins setup
            SiteCache siteCache = new SiteCache(new CacheMock());

            TextPluginStub plugin1 = new TextPluginStub("fake-plugin1", "fake plugin1", "description 1", "1.1");

            plugin1.PluginCache        = siteCache;
            plugin1.Repository         = settingsRepository;
            plugin1.Settings.IsEnabled = true;
            plugin1.Settings.SetValue("key1", "value1");
            plugin1.Settings.SetValue("key2", "value2");

            TextPluginStub plugin2 = new TextPluginStub("fake-plugin2", "fake plugin2", "description 2", "2.1");

            plugin2.PluginCache = siteCache;
            plugin2.Repository  = settingsRepository;

            PluginFactoryMock pluginFactory = new PluginFactoryMock();

            pluginFactory.TextPlugins.Add(plugin1);
            pluginFactory.TextPlugins.Add(plugin2);

            // SqlExportBuilder
            SqlExportBuilder builder = new SqlExportBuilder(settingsRepository, new UserRepositoryMock(), new PageRepositoryMock(), pluginFactory);

            builder.IncludeConfiguration = true;
            builder.IncludePages         = false;

            string expectedSql = ReadEmbeddedResource("expected-siteconfiguration-export.sql");

            expectedSql = expectedSql.Replace("{AppVersion}", ApplicationSettings.ProductVersion);

            // Act
            string actualSql = builder.Export();

            // Assert
            Assert.That(actualSql, Is.EqualTo(expectedSql), actualSql);
        }
예제 #23
0
        public void settings_should_default_version_to_1_if_version_is_empty()
        {
            // Arrange
            Mock <IPluginCache> pluginCacheMock = new Mock <IPluginCache>();
            var settingsRepositoryMock          = new SettingsRepositoryMock();

            TextPluginStub plugin = new TextPluginStub("id", "name", "desc", "");

            plugin.PluginCache = pluginCacheMock.Object;
            plugin.Repository  = settingsRepositoryMock;

            // Act
            PluginSettings actualPluginSettings = plugin.Settings;

            // Assert
            Assert.That(actualPluginSettings.Version, Is.EqualTo("1.0"));
        }
예제 #24
0
        public void settings_should_create_instance_when_repository_has_no_settings()
        {
            // Arrange
            Mock <IPluginCache> pluginCacheMock = new Mock <IPluginCache>();
            var settingsRepositoryMock          = new SettingsRepositoryMock();

            TextPluginStub plugin = new TextPluginStub();

            plugin.PluginCache = pluginCacheMock.Object;
            plugin.Repository  = settingsRepositoryMock;

            // Act
            PluginSettings actualPluginSettings = plugin.Settings;

            // Assert
            Assert.That(actualPluginSettings, Is.Not.Null);
            Assert.That(actualPluginSettings.Values.Count(), Is.EqualTo(0));
        }
예제 #25
0
        public void removepluginsettings_should_remove_plugin_settings()
        {
            // Arrange
            CacheMock cache     = new CacheMock();
            SiteCache siteCache = new SiteCache(cache);

            TextPluginStub plugin = new TextPluginStub();

            plugin.PluginCache = siteCache;
            plugin.Repository  = new SettingsRepositoryMock();
            plugin.Settings.SetValue("foo", "bar");

            // Act
            siteCache.RemovePluginSettings(plugin);

            // Assert
            Assert.That(cache.Count(), Is.EqualTo(0));
        }
예제 #26
0
        public void Should_Ignore_TextPlugins_AfterParse_When_IsEnabled_Is_False()
        {
            // Arrange
            string markupFragment = "Here is some markup **some bold**";
            string expectedHtml   = "<p>Here is some markup <strong style='color:green'><iframe src='javascript:alert(test)'>some bold</strong>\n</p>";

            TextPluginStub plugin = new TextPluginStub();

            plugin.Repository  = new RepositoryMock();
            plugin.PluginCache = new SiteCache(new ApplicationSettings(), CacheMock.RoadkillCache);
            _pluginFactory.RegisterTextPlugin(plugin);

            // Act
            string actualHtml = _markupConverter.ToHtml(markupFragment);

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml));
        }
예제 #27
0
        public void Should_Ignore_TextPlugins_BeforeParse_When_IsEnabled_Is_False()
        {
            // Arrange
            string markupFragment = "This is my ~~~usertoken~~~";
            string expectedHtml   = "<p>This is my <span>usertoken</span>\n</p>";

            TextPluginStub plugin = new TextPluginStub();

            plugin.Repository  = new RepositoryMock();
            plugin.PluginCache = new SiteCache(new ApplicationSettings(), CacheMock.RoadkillCache);
            _pluginFactory.RegisterTextPlugin(plugin);

            // Act
            string actualHtml = _markupConverter.ToHtml(markupFragment);

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml));
        }
예제 #28
0
        public void setheadjsonloadedfunction_should_be_added_to_javascript()
        {
            // Arrange
            TextPluginStub plugin = new TextPluginStub();

            plugin.AddScript("pluginscript.js", "script1");
            plugin.SetHeadJsOnLoadedFunction("alert('done')");

            string expectedHtml = @"<script type=""text/javascript"">" +
                                  @"head.js({ ""script1"", ""pluginscript.js"" },function() { alert('done') })" +
                                  "</script>\n";

            // Act
            string actualHtml = plugin.GetJavascriptHtml();

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml), actualHtml);
        }
예제 #29
0
        public void should_ignore_textplugins_beforeparse_when_isenabled_is_false()
        {
            // Arrange
            string markupFragment = "This is my ~~~usertoken~~~";
            string expectedHtml   = "<p>This is my <span>usertoken</span>\n</p>";

            TextPluginStub plugin = new TextPluginStub();

            plugin.Repository  = new SettingsRepositoryMock();
            plugin.PluginCache = new SiteCache(CacheMock.RoadkillCache);
            _pluginFactory.RegisterTextPlugin(plugin);

            // Act
            string actualHtml = _markupConverter.ToHtml(markupFragment);

            // Assert
            Assert.That(actualHtml, Is.EqualTo(expectedHtml));
        }
예제 #30
0
        public void RemovePluginSettings_Should_Remove_Plugin_Settings()
        {
            // Arrange
            CacheMock           cache     = new CacheMock();
            ApplicationSettings settings  = new ApplicationSettings();
            SiteCache           siteCache = new SiteCache(settings, cache);

            TextPluginStub plugin = new TextPluginStub();

            plugin.PluginCache = siteCache;
            plugin.Repository  = new RepositoryMock();
            plugin.Settings.SetValue("foo", "bar");

            // Act
            siteCache.RemovePluginSettings(plugin);

            // Assert
            Assert.That(cache.Count(), Is.EqualTo(0));
        }