public void ReadContentReturnsFileDataTest()
        {
            var name     = Guid.NewGuid().ToString();
            var value    = Guid.NewGuid().ToString();
            var expected = Guid.NewGuid().ToString();

            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
                {
                    writer.Write(expected);
                }

                stream.Position = 0;

                using (var target = new PostFileStreamEntry(name, value, stream))
                {
                    using (var contentStream = target.ReadContent())
                    {
                        using (var reader = new StreamReader(contentStream))
                        {
                            var actual = reader.ReadToEnd();

                            actual.Should().Be(expected);
                        }
                    }

                    target.IsValid.Should().BeTrue();
                }
            }
        }
        public void IsValidReturnsFalseWhenValueIsWhiteSpaceTest()
        {
            var name = Guid.NewGuid().ToString();

            var stream = Substitute.For <Stream>();

            using (var target = new PostFileStreamEntry(name, "  ", stream))
            {
                target.IsValid.Should().BeFalse();
            }
        }
        public void IsValidReturnsTrueWhenValueProvidedTest()
        {
            var name  = Guid.NewGuid().ToString();
            var value = Guid.NewGuid().ToString();

            var stream = Substitute.For <Stream>();

            using (var target = new PostFileStreamEntry(name, value, stream))
            {
                target.IsValid.Should().BeTrue();
            }
        }
        public void DisposeThrowExceptionWhenStreamDisposeThrowsUnexpectedExceptionTest()
        {
            var name  = Guid.NewGuid().ToString();
            var value = Guid.NewGuid().ToString();

            var stream = Substitute.For <Stream>();

            stream.When(x => x.Dispose()).Do(x => { throw new TimeoutException(); });

            var target = new PostFileStreamEntry(name, value, stream);

            Action action = target.Dispose;

            action.ShouldThrow <TimeoutException>();
        }
        public void CanCreateWithNullValueTest()
        {
            var name = Guid.NewGuid().ToString();

            var stream = Substitute.For<Stream>();

            using (var target = new PostFileStreamEntry(name, null, stream))
            {
                target.Name.Should().Be(name);
                target.Value.Should().BeNull();

                var actual = target.ReadContent();

                actual.Should().BeSameAs(stream);
            }
        }
        public void CanCreateWithNullValueTest()
        {
            var name = Guid.NewGuid().ToString();

            var stream = Substitute.For <Stream>();

            using (var target = new PostFileStreamEntry(name, null, stream))
            {
                target.Name.Should().Be(name);
                target.Value.Should().BeNull();

                var actual = target.ReadContent();

                actual.Should().BeSameAs(stream);
            }
        }
        public void ReadContentReturnsFileDataTest()
        {
            var name = Guid.NewGuid().ToString();
            var value = Guid.NewGuid().ToString();
            var expected = Guid.NewGuid().ToString();

            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
                {
                    writer.Write(expected);
                }

                stream.Position = 0;

                using (var target = new PostFileStreamEntry(name, value, stream))
                {
                    using (var contentStream = target.ReadContent())
                    {
                        using (var reader = new StreamReader(contentStream))
                        {
                            var actual = reader.ReadToEnd();

                            actual.Should().Be(expected);
                        }
                    }

                    target.IsValid.Should().BeTrue();
                }
            }
        }
        public void IsValidReturnsTrueWhenValueProvidedTest()
        {
            var name = Guid.NewGuid().ToString();
            var value = Guid.NewGuid().ToString();

            var stream = Substitute.For<Stream>();

            using (var target = new PostFileStreamEntry(name, value, stream))
            {
                target.IsValid.Should().BeTrue();
            }
        }
        public void IsValidReturnsFalseWhenValueIsWhiteSpaceTest()
        {
            var name = Guid.NewGuid().ToString();

            var stream = Substitute.For<Stream>();

            using (var target = new PostFileStreamEntry(name, "  ", stream))
            {
                target.IsValid.Should().BeFalse();
            }
        }
        public void DisposeThrowExceptionWhenStreamDisposeThrowsUnexpectedExceptionTest()
        {
            var name = Guid.NewGuid().ToString();
            var value = Guid.NewGuid().ToString();

            var stream = Substitute.For<Stream>();

            stream.When(x => x.Dispose()).Do(x => { throw new TimeoutException(); });

            var target = new PostFileStreamEntry(name, value, stream);

            Action action = target.Dispose;

            action.ShouldThrow<TimeoutException>();
        }