public void ValidGuid()
        {
            var guid = Guid.NewGuid();
            var redirectMappingResolver = new RedirectMappingResolver();

            int count = 0;
            redirectMappingResolver.MappingResolved += r =>
            {
                Assert.That(r.Guid, Is.EqualTo(guid));
                Assert.That(r.Uri, Is.EqualTo(new Uri("http://www.silkveil.net")));
                count++;
            };

            redirectMappingResolver.RequestMapping +=
                g =>
                    {
                        var redirectMapping = new RedirectMapping
                                          {
                                              Guid = guid,
                                              Uri = new Uri("http://www.silkveil.net")
                                          };
                        redirectMappingResolver.RequestedMappingAvailable(redirectMapping);
                    };

            redirectMappingResolver.ResolveGuid(guid);

            Assert.That(count, Is.EqualTo(1));
        }
        public void RedirectPermanently()
        {
            var httpStreamFactory = new HttpStreamFactory();

            int count = 0;
            httpStreamFactory.StreamAvailable +=
                s =>
                {
                    using (var streamReader = new StreamReader(s))
                    {
                        Assert.That(streamReader.ReadLine(), Is.EqualTo("HTTP/1.1 301 Moved Permanently"));
                        Assert.That(streamReader.ReadLine(), Is.EqualTo("Location: http://www.silkveil.net/"));
                    }
                    count++;
                };

            var redirectMapping =
                new RedirectMapping
                    {
                        Guid = Guid.NewGuid(),
                        Uri = new Uri("http://www.silkveil.net"),
                        RedirectType = RedirectType.Permanent
                    };
            httpStreamFactory.CreateRedirect(redirectMapping);
            Assert.That(count, Is.EqualTo(1));
        }
        public void CreateAlreadyExistingItemResultsInException()
        {
            var redirectMappingProvider = new RedirectMappingProvider(this._container);
            var redirectMapping =
                new RedirectMapping
                {
                    Guid = Guid.NewGuid(),
                    Uri = new Uri("http://www.silkveil.net"),
                    RedirectType = RedirectType.Permanent
                };

            redirectMappingProvider.Create(redirectMapping);

            Assert.That(() => redirectMappingProvider.Create(redirectMapping), Throws.Exception.TypeOf(typeof(DuplicateMappingException)));
        }
        public void RedirectPermanentlyReturnsARewindedStream()
        {
            var httpStreamFactory = new HttpStreamFactory();

            int count = 0;
            httpStreamFactory.StreamAvailable +=
                s =>
                {
                    Assert.That(s.Position, Is.EqualTo(0));
                    count++;
                };

            var redirectMapping =
                new RedirectMapping
                {
                    Guid = Guid.NewGuid(),
                    Uri = new Uri("http://www.silkveil.net"),
                    RedirectType = RedirectType.Permanent
                };
            httpStreamFactory.CreateRedirect(redirectMapping);
            Assert.That(count, Is.EqualTo(1));
        }
        public void DeleteByMapping()
        {
            var redirectMappingProvider = new RedirectMappingProvider(this._container);
            var redirectMapping =
                new RedirectMapping
                {
                    Guid = Guid.NewGuid(),
                    Uri = new Uri("http://www.silkveil.net"),
                    RedirectType = RedirectType.Permanent
                };

            int count = 0;
            redirectMappingProvider.MappingsAvailable += r =>
            {
                Assert.That(r.Count(), Is.EqualTo(0));
                count++;
            };

            redirectMappingProvider.Create(redirectMapping);
            redirectMappingProvider.Delete(redirectMapping);
            redirectMappingProvider.ReadAll();

            Assert.That(count, Is.EqualTo(1));
        }
        public void RequestStatusCode()
        {
            var httpStreamFactory = new HttpStreamFactory();

            httpStreamFactory.StreamAvailable +=
                httpStreamFactory.RequestStatusCode;

            int count = 0;
            httpStreamFactory.StatusCodeAvailable +=
                sc =>
                {
                    Assert.That(sc, Is.EqualTo(301));
                    count++;
                };

            var redirectMapping =
                new RedirectMapping
                {
                    Guid = Guid.NewGuid(),
                    Uri = new Uri("http://www.silkveil.net"),
                    RedirectType = RedirectType.Permanent
                };
            httpStreamFactory.CreateRedirect(redirectMapping);

            Assert.That(count, Is.EqualTo(1));
        }
        public void RequestHeaders()
        {
            var httpStreamFactory = new HttpStreamFactory();

            httpStreamFactory.StreamAvailable +=
                httpStreamFactory.RequestHeaders;

            int count = 0;
            httpStreamFactory.HeadersAvailable +=
                h =>
                {
                    Assert.That(h.Count, Is.EqualTo(1));
                    Assert.That(h["Location"], Is.EqualTo("http://www.silkveil.net/"));
                    count++;
                };

            var redirectMapping =
                new RedirectMapping
                {
                    Guid = Guid.NewGuid(),
                    Uri = new Uri("http://www.silkveil.net"),
                    RedirectType = RedirectType.Permanent
                };
            httpStreamFactory.CreateRedirect(redirectMapping);

            Assert.That(count, Is.EqualTo(1));
        }
        public void UpdateNonExistentMapping()
        {
            var redirectMappingProvider = new RedirectMappingProvider(this._container);
            var redirectMapping =
                new RedirectMapping
                {
                    Guid = Guid.NewGuid(),
                    Uri = new Uri("http://www.silkveil.net"),
                    RedirectType = RedirectType.Permanent
                };

            Assert.That(() => redirectMappingProvider.Update(redirectMapping),
                        Throws.Exception.TypeOf(typeof(MappingNotFoundException)));
        }
        public void Update()
        {
            var redirectMappingProvider = new RedirectMappingProvider(this._container);
            var redirectMapping =
                new RedirectMapping
                {
                    Guid = Guid.NewGuid(),
                    Uri = new Uri("http://www.google.de"),
                    RedirectType = RedirectType.Temporary
                };

            int count = 0;
            redirectMappingProvider.MappingAvailable += r =>
            {
                Assert.That(r.Uri, Is.EqualTo(redirectMapping.Uri));
                Assert.That(r.RedirectType, Is.EqualTo(redirectMapping.RedirectType));
                count++;
            };

            redirectMappingProvider.Create(redirectMapping);

            redirectMapping.Uri = new Uri("http://www.silkveil.net");
            redirectMapping.RedirectType = RedirectType.Permanent;
            redirectMappingProvider.Update(redirectMapping);
            redirectMappingProvider.ReadById(redirectMapping.Guid);

            Assert.That(count, Is.EqualTo(1));
        }
        public void ReadAllReturnsNonEmptyCollectionAfterCreate()
        {
            var redirectMappingProvider = new RedirectMappingProvider(this._container);
            var redirectMapping =
                new RedirectMapping
                    {
                        Guid = Guid.NewGuid(),
                        Uri = new Uri("http://www.silkveil.net"),
                        RedirectType = RedirectType.Permanent
                    };

            int count = 0;
            redirectMappingProvider.MappingsAvailable += r =>
            {
                Assert.That(r, Is.InstanceOf(typeof(IEnumerable<IRedirectMapping>)));
                Assert.That(r.Count(), Is.EqualTo(1));

                Assert.That(r.First().Guid, Is.EqualTo(redirectMapping.Guid));
                Assert.That(r.First().Uri, Is.EqualTo(redirectMapping.Uri));
                Assert.That(r.First().RedirectType, Is.EqualTo(redirectMapping.RedirectType));

                count++;
            };

            redirectMappingProvider.Create(redirectMapping);
            redirectMappingProvider.ReadAll();

            Assert.That(count, Is.EqualTo(1));
        }