protected void ThenTheRawResultShouldContain(params Action <MultipartHttpEntity>[] builders)
        {
            var result   = then_decoding_result <IEnumerable <IMultipartHttpEntity> >();
            var entities = new List <IMultipartHttpEntity>();

            foreach (var builder in builders)
            {
                var expected = new MultipartHttpEntity {
                    Stream = new MemoryStream()
                };

                builder(expected);
                entities.Add(expected);
            }
            foreach (var entity in result)
            {
                var entityData = entity.Stream.ReadToEnd();
                entities.ForEach(e => e.Stream.Position = 0);
                var foundEntity = entities.Find(fake => {
                    bool headersMatch = (fake.ContentType != null ? fake.ContentType.Equals(entity.ContentType) : entity.ContentType == null) &&
                                        fake.Headers.ContentDisposition.Equals(entity.Headers.ContentDisposition);
                    bool contentMatches = fake.Stream.ReadToEnd().SequenceEqual(entityData);
                    return(headersMatch && contentMatches);
                });
                foundEntity.ShouldNotBeNull();
            }
        }
 public static MultipartHttpEntity WithEntity(this MultipartHttpEntity entity, string content)
 {
     entity.Stream.Position = 0;
     entity.Stream.Write(Encoding.Default.GetBytes(content));
     entity.Stream.Position = 0;
     return(entity);
 }
        void GivenAFormEntity(string key, string value)
        {
            var entity = new MultipartHttpEntity();

            entity.Headers["Content-Disposition"] = "form-data; name=\"" + key + "\"";
            entity.Stream = new MemoryStream();
            var swriter = new StreamWriter(entity.Stream, Encoding.ASCII);

            swriter.Write(value);
            swriter.Flush();
            entity.Stream.Position = 0;
            Entities.Add(entity);
        }