public async Task ShouldProcess(string cdnBaseUrl, string text, string expected)
        {
            var sanitizerOptions = new HtmlSanitizerOptions();

            sanitizerOptions.Configure.Add(opt => opt.AllowedAttributes.Add("class"));

            var fileStore = new DefaultMediaFileStore(
                Mock.Of <IFileStore>(),
                "/media",
                cdnBaseUrl,
                Enumerable.Empty <IMediaEventHandler>(),
                Enumerable.Empty <IMediaCreatingEventHandler>(),
                Mock.Of <ILogger <DefaultMediaFileStore> >());

            var sanitizer = new HtmlSanitizerService(Options.Create(sanitizerOptions));

            var defaultHttpContext = new DefaultHttpContext();

            defaultHttpContext.Request.PathBase = new PathString("/tenant");
            var httpContextAccessor = Mock.Of <IHttpContextAccessor>(hca => hca.HttpContext == defaultHttpContext);

            var options = Options.Create(new ResourceManagementOptions {
                CdnBaseUrl = cdnBaseUrl
            });

            var imageProvider = new ImageShortcodeProvider(fileStore, sanitizer, httpContextAccessor, options);

            var processor = new ShortcodeService(new IShortcodeProvider[] { imageProvider }, Enumerable.Empty <IShortcodeContextProvider>());

            var processed = await processor.ProcessAsync(text);

            Assert.Equal(expected, processed);
        }
        public async Task ShouldProcess(string cdnBaseUrl, string text, string expected)
        {
            var fileStore = new DefaultMediaFileStore(
                Mock.Of <IFileStore>(),
                "/media",
                cdnBaseUrl,
                Enumerable.Empty <IMediaEventHandler>(),
                Enumerable.Empty <IMediaCreatingEventHandler>(),
                Mock.Of <ILogger <DefaultMediaFileStore> >());

            var sanitizer = new HtmlSanitizerService(Options.Create(new HtmlSanitizerOptions()));

            var defaultHttpContext = new DefaultHttpContext();

            defaultHttpContext.Request.PathBase = new PathString("/tenant");
            var httpContextAccessor = Mock.Of <IHttpContextAccessor>(hca => hca.HttpContext == defaultHttpContext);

            var options = Options.Create(new ResourceManagementOptions {
                CdnBaseUrl = cdnBaseUrl
            });

            var assetUrlProvider = new AssetUrlShortcodeProvider(fileStore, httpContextAccessor, options);

            var processor = new ShortcodeService(new IShortcodeProvider[] { assetUrlProvider }, Enumerable.Empty <IShortcodeContextProvider>());

            var processed = await processor.ProcessAsync(text);

            // The markdown part sanitizes after processing.
            var sanitized = sanitizer.Sanitize(processed);

            Assert.Equal(expected, sanitized);
        }