Пример #1
0
        public void Configuration(IAppBuilder app)
        {
            IUrlShortnerService service = new UrlShortnerService(AppSettingsReader.StorageAccountName, AppSettingsReader.StorageAccountSecret, AppSettingsReader.Baseurl, AppSettingsReader.MasterToken, AppSettingsReader.UseCache);

            var token = new OwinContext(app.Properties).Get <CancellationToken>("host.OnAppDisposing");

            if (token != CancellationToken.None)
            {
                token.Register(service.Dispose);
            }


            app.UseCors(CorsOptions.AllowAll);


            var options = new FileServerOptions
            {
                EnableDirectoryBrowsing = true,
                EnableDefaultFiles      = true,
                DefaultFilesOptions     = { DefaultFileNames = { "index.html" } },
                FileSystem        = new PhysicalFileSystem(@"./html"),
                RequestPath       = new PathString("/html"),
                StaticFileOptions = { OnPrepareResponse = (ContextCallback) =>
                                      {
                                          ContextCallback.OwinContext.Response.Headers.Add("X-Frame-Options", new[] { "DENY" });
                                          ContextCallback.OwinContext.Response.Headers.Add("Content-Security-Policy", new string[]
                        {
                            "script-src 'self' https://ajax.googleapis.com https://code.jquery.com https://maxcdn.bootstrapcdn.com; style-src https://maxcdn.bootstrapcdn.com; img-src https://az280641.vo.msecnd.net; font-src https://maxcdn.bootstrapcdn.com;"
                        });

                                          if (!string.IsNullOrWhiteSpace(AppSettingsReader.PublicKeyPinning))
                                          {
                                              ContextCallback.OwinContext.Response.Headers.Add("Public-Key-Pins", new[] { AppSettingsReader.PublicKeyPinning });
                                          }

                                          if (!string.IsNullOrWhiteSpace(AppSettingsReader.HstsHeader))
                                          {
                                              ContextCallback.OwinContext.Response.Headers.Add("Strict-Transport-Security", new[] { AppSettingsReader.HstsHeader });
                                          }
                                      } }
            };

            app.UseFileServer(options);

            app.UseUrlShortner(service);
        }
        public async Task Test_AddShortenedUrl_NewUrl()
        {
            // Setup
            var urlHash  = "dF";
            var inputUrl = "http://www.example.com";

            var randomId = (long)new Random(111).Next();

            var repoMock = new Mock <IUrlShortnerRepository>();

            repoMock.Setup(r => r.LookupByUrlAsync(It.IsAny <string>()))
            .Returns(Task.FromResult <ShortenedUrl>(null));

            repoMock.Setup(r => r.AddShortenedUrlAsync(It.IsAny <ShortenedUrl>())).Returns(
                Task.FromResult <ShortenedUrl>(new ShortenedUrl
            {
                Id      = randomId,
                Url     = inputUrl,
                UrlHash = urlHash
            }));

            var uniqueIdGeneratorMock = new Mock <IUniqueIdGeneratorProvider>();

            uniqueIdGeneratorMock.Setup(u => u.GenerateNextIdAsync())
            .Returns(Task.FromResult(randomId));

            var urlHashProviderMock = new Mock <IUrlHashProvider>();

            urlHashProviderMock.Setup(h => h.GenerateHash(It.IsAny <long>()))
            .Returns(urlHash);

            // Action

            var urlShortnerService = new UrlShortnerService(repoMock.Object, uniqueIdGeneratorMock.Object, urlHashProviderMock.Object);

            var result = await urlShortnerService.AddShortenedUrl(inputUrl);

            // Assert
            Assert.AreEqual(result.UrlHash, urlHash);
            Assert.AreEqual(result.Id, randomId);
            Assert.AreEqual(result.Url, inputUrl);
        }
        public async Task Test_AddShortenedUrl_AlreadyExistingUrl()
        {
            var alreadyAddedUrlHash = "dF";
            var inputUrl            = "http://www.example.com";

            var repoMock = new Mock <IUrlShortnerRepository>();

            repoMock.Setup(r => r.LookupByUrlAsync(It.IsAny <string>())).Returns(Task.FromResult(
                                                                                     new ShortenedUrl
            {
                Id      = 1,
                Url     = inputUrl,
                UrlHash = alreadyAddedUrlHash
            })
                                                                                 );

            var urlShortnerService = new UrlShortnerService(repoMock.Object, null, null);

            var result = await urlShortnerService.AddShortenedUrl(inputUrl);

            Assert.AreEqual(result.UrlHash, alreadyAddedUrlHash);
            Assert.AreEqual(result.Url, inputUrl);
        }