Skip to content

Commit

Permalink
Adding some more tests for mappers and refactoring to support multipl…
Browse files Browse the repository at this point in the history
…e content types
  • Loading branch information
neilcampbell committed Jul 15, 2014
1 parent 7dea75c commit 3852d14
Show file tree
Hide file tree
Showing 17 changed files with 607 additions and 123 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,30 @@ public IHttpBodyContentMapper GetSubject()
}

[Fact]
public void Convert_WithNullBody_ReturnsNull()
public void Convert1_WithNullBody_ReturnsNull()
{
var mapper = GetSubject();

var result = mapper.Convert(null, null);
var result = mapper.Convert(body: null, headers: null);

Assert.Null(result);
}

[Fact]
public void Convert_WithBodyAndNullHeaders_ReturnsBodyWithUtf8EncodingAndPlainTextContentType()
public void Convert1_WithBodyAndNullHeaders_ReturnsBodyWithUtf8EncodingAndPlainTextContentType()
{
const string body = "This is my content";
var mapper = GetSubject();

var result = mapper.Convert(body, null);
var result = mapper.Convert(body: body, headers: null);

Assert.Equal(body, result.Content);
Assert.Equal(Encoding.UTF8, result.Encoding);
Assert.Equal("text/plain", result.ContentType);
}

[Fact]
public void Convert_WithJsonContent_ReturnsJsonBodyWithUtf8EncodingAndApplicationJsonContentType()
public void Convert1_WithJsonBody_ReturnsJsonBodyWithUtf8EncodingAndApplicationJsonContentType()
{
const string contentTypeString = "application/json";
var body = new
Expand All @@ -52,15 +52,15 @@ public void Convert_WithJsonContent_ReturnsJsonBodyWithUtf8EncodingAndApplicatio
const string jsonBody = "{\"Test\":\"tester\",\"Test2\":1}";
var mapper = GetSubject();

var result = mapper.Convert(body, headers);
var result = mapper.Convert(body: body, headers: headers);

Assert.Equal(jsonBody, result.Content);
Assert.Equal(Encoding.UTF8, result.Encoding);
Assert.Equal(contentTypeString, result.ContentType);
}

[Fact]
public void Convert_WithJsonContentAndDifferentCasings_ReturnsUnNormalisedCasingJsonBodyWithUtf8EncodingAndApplicationJsonContentType()
public void Convert1_WithJsonBodyAndDifferentCasings_ReturnsUnNormalisedCasingJsonBodyWithUtf8EncodingAndApplicationJsonContentType()
{
var body = new
{
Expand All @@ -74,15 +74,15 @@ public void Convert_WithJsonContentAndDifferentCasings_ReturnsUnNormalisedCasing
const string jsonBody = "{\"Test\":\"testeR\",\"tesT2\":1}";
var mapper = GetSubject();

var result = mapper.Convert(body, headers);
var result = mapper.Convert(body: body, headers: headers);

Assert.Equal(jsonBody, result.Content);
Assert.Equal(Encoding.UTF8, result.Encoding);
Assert.Equal("application/json", result.ContentType);
}

[Fact]
public void Convert_WithAsciiHtmlContent_CallsEncodingMapperAndReturnsBodyWithAsciiEncodingAndHtmlContentType()
public void Convert1_WithAsciiHtmlBody_CallsEncodingMapperAndReturnsBodyWithAsciiEncodingAndHtmlContentType()
{
const string contentTypeString = "text/html";
const string body = "<p>This is my content</p>";
Expand All @@ -97,11 +97,83 @@ public void Convert_WithAsciiHtmlContent_CallsEncodingMapperAndReturnsBodyWithAs

var mapper = new HttpBodyContentMapper(mockEncodingMapper);

var result = mapper.Convert(body, headers);
var result = mapper.Convert(body: body, headers: headers);

Assert.Equal(body, result.Content);
Assert.Equal(encoding, result.Encoding);
Assert.Equal(contentTypeString, result.ContentType);
}

//

[Fact]
public void Convert2_WithNullContent_ReturnsNull()
{
var mapper = GetSubject();

var result = mapper.Convert(content: null, headers: null);

Assert.Null(result);
}

[Fact]
public void Convert2_WithBodyAndNullHeaders_ReturnsBodyWithUtf8EncodingAndPlainTextContentType()
{
const string content = "This is my content";
var mapper = GetSubject();

var result = mapper.Convert(content: content, headers: null);

Assert.Equal(content, result.Content);
Assert.Equal(Encoding.UTF8, result.Encoding);
Assert.Equal("text/plain", result.ContentType);
}

[Fact]
public void Convert2_WithJsonContentAndDifferentCasings_ReturnsUnNormalisedCasingJsonBodyWithUtf8EncodingAndApplicationJsonContentType()
{
var body = new
{
Test = "testeR",
tesT2 = 1
};
var headers = new Dictionary<string, string>
{
{ "content-type", "Application/Json" }
};
const string content = "{\"Test\":\"testeR\",\"tesT2\":1}";
var mapper = GetSubject();

var result = mapper.Convert(content: content, headers: headers);

Assert.Equal(body.Test, result.Body.Test);
Assert.Equal(body.tesT2, result.Body.tesT2);
Assert.Equal(Encoding.UTF8, result.Encoding);
Assert.Equal("application/json", result.ContentType);
}

[Fact]
public void Convert2_WithAsciiHtmlContent_CallsEncodingMapperAndReturnsBodyWithAsciiEncodingAndHtmlContentType()
{
const string contentTypeString = "text/html";
const string content = "<p>This is my content</p>";
const string encodingString = "us-ascii";
var encoding = Encoding.ASCII;
var headers = new Dictionary<string, string>
{
{ "Content-Type", contentTypeString + "; charset=" + encodingString }
};
var mockEncodingMapper = Substitute.For<IEncodingMapper>();
mockEncodingMapper.Convert(encodingString).Returns(encoding);

var mapper = new HttpBodyContentMapper(mockEncodingMapper);

var result = mapper.Convert(content: content, headers: headers);

Assert.Equal(content, result.Body);
Assert.Equal(encoding, result.Encoding);
Assert.Equal(contentTypeString, result.ContentType);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,31 +23,10 @@ public void Convert_WithNullHttpBodyContent_ReturnsNull()
Assert.Null(result);
}

[Fact]
public void Convert_WithNullContent_ReturnsNull()
{
var httpBodyContent = new HttpBodyContent
{
Content = null,
ContentType = "text/plain",
Encoding = Encoding.UTF8
};
var mapper = GetSubject();

var result = mapper.Convert(httpBodyContent);

Assert.Null(result);
}

[Fact]
public void Convert_WithEmptyContent_ReturnsNull()
{
var httpBodyContent = new HttpBodyContent
{
Content = String.Empty,
ContentType = "text/plain",
Encoding = Encoding.UTF8
};
var httpBodyContent = new HttpBodyContent(String.Empty, "text/plain", Encoding.UTF8);
var mapper = GetSubject();

var result = mapper.Convert(httpBodyContent);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public void Convert_WithHeader_HeaderIsAddedToHttpRequestMessage()
var mockHttpBodyContentMapper = Substitute.For<IHttpBodyContentMapper>();

mockHttpMethodMapper.Convert(HttpVerb.Post).Returns(HttpMethod.Post);
mockHttpBodyContentMapper.Convert(Arg.Any<object>(), request.Headers).Returns(new HttpBodyContent());
mockHttpBodyContentMapper.Convert(Arg.Any<object>(), request.Headers).Returns(new HttpBodyContent(String.Empty, null, null));

IHttpRequestMessageMapper mapper = new HttpRequestMessageMapper(
mockHttpMethodMapper,
Expand All @@ -97,11 +97,7 @@ public void Convert_WithPlainContentTypeHeader_HeaderIsNotAddedToHttpRequestMess
},
Body = new {}
};
var httpBodyContent = new HttpBodyContent
{
ContentType = contentTypeString,
Content = String.Empty
};
var httpBodyContent = new HttpBodyContent(String.Empty, contentTypeString, null);

var mockHttpMethodMapper = Substitute.For<IHttpMethodMapper>();
var mockHttpContentMapper = Substitute.For<IHttpContentMapper>();
Expand Down Expand Up @@ -135,11 +131,7 @@ public void Convert_WithPlainContentTypeHeaderLowercased_HeaderIsNotAddedToHttpR
},
Body = new { }
};
var httpBodyContent = new HttpBodyContent
{
ContentType = contentTypeString,
Content = String.Empty
};
var httpBodyContent = new HttpBodyContent(String.Empty, contentTypeString, null);

var mockHttpMethodMapper = Substitute.For<IHttpMethodMapper>();
var mockHttpContentMapper = Substitute.For<IHttpContentMapper>();
Expand Down Expand Up @@ -175,12 +167,7 @@ public void Convert_WithPlainContentTypeAndUtf8CharsetHeader_HeaderIsNotAddedToH
},
Body = new { }
};
var httpBodyContent = new HttpBodyContent
{
ContentType = contentTypeString,
Encoding = encoding,
Content = String.Empty
};
var httpBodyContent = new HttpBodyContent(String.Empty, contentTypeString, encoding);

var mockHttpMethodMapper = Substitute.For<IHttpMethodMapper>();
var mockHttpContentMapper = Substitute.For<IHttpContentMapper>();
Expand Down Expand Up @@ -217,12 +204,7 @@ public void Convert_WithJsonContentTypeAndUnicodeCharsetHeader_HeaderIsNotAddedT
},
Body = new { }
};
var httpBodyContent = new HttpBodyContent
{
ContentType = contentTypeString,
Encoding = encoding,
Content = String.Empty
};
var httpBodyContent = new HttpBodyContent(String.Empty, contentTypeString, encoding);

var mockHttpMethodMapper = Substitute.For<IHttpMethodMapper>();
var mockHttpContentMapper = Substitute.For<IHttpContentMapper>();
Expand Down Expand Up @@ -258,11 +240,7 @@ public void Convert_WithContentTypeAndCustomHeader_OnlyCustomHeadersIsAddedToHtt
},
Body = new { }
};
var httpBodyContent = new HttpBodyContent
{
ContentType = contentTypeString,
Content = String.Empty
};
var httpBodyContent = new HttpBodyContent(String.Empty, contentTypeString, null);

var mockHttpMethodMapper = Substitute.For<IHttpMethodMapper>();
var mockHttpContentMapper = Substitute.For<IHttpContentMapper>();
Expand Down Expand Up @@ -335,12 +313,7 @@ public void Convert_WithTheWorks_CorrectlyMappedHttpRequestMessageIsReturned()
Testing = 1
}
};
var httpBodyContent = new HttpBodyContent
{
ContentType = contentTypeString,
Encoding = encoding,
Content = bodyJson
};
var httpBodyContent = new HttpBodyContent(bodyJson, contentTypeString, encoding);

var mockHttpMethodMapper = Substitute.For<IHttpMethodMapper>();
var mockHttpContentMapper = Substitute.For<IHttpContentMapper>();
Expand Down
83 changes: 83 additions & 0 deletions PactNet.Tests/Mocks/MockHttpService/Mappers/HttpVerbMapperTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
using System;
using PactNet.Mocks.MockHttpService.Mappers;
using PactNet.Mocks.MockHttpService.Models;
using Xunit;

namespace PactNet.Tests.Mocks.MockHttpService.Mappers
{
public class HttpVerbMapperTests
{
private IHttpVerbMapper GetSubject()
{
return new HttpVerbMapper();
}

[Fact]
public void Convert_WithValueThatDoesNotHaveAMap_ThrowsArgumentException()
{
var mapper = GetSubject();

Assert.Throws<ArgumentException>(() => mapper.Convert("blah"));
}

[Fact]
public void Convert_WithGetString_ReturnsHttpVerbGet()
{
var mapper = GetSubject();

var result = mapper.Convert("GET");

Assert.Equal(HttpVerb.Get, result);
}

[Fact]
public void Convert_WithPostString_ReturnsHttpVerbPost()
{
var mapper = GetSubject();

var result = mapper.Convert("POST");

Assert.Equal(HttpVerb.Post, result);
}

[Fact]
public void Convert_WithPutString_ReturnsHttpVerbPut()
{
var mapper = GetSubject();

var result = mapper.Convert("PUT");

Assert.Equal(HttpVerb.Put, result);
}

[Fact]
public void Convert_WithDeleteString_ReturnsHttpVerbDelete()
{
var mapper = GetSubject();

var result = mapper.Convert("DELETE");

Assert.Equal(HttpVerb.Delete, result);
}

[Fact]
public void Convert_WithHeadString_ReturnsHttpVerbHead()
{
var mapper = GetSubject();

var result = mapper.Convert("HEAD");

Assert.Equal(HttpVerb.Head, result);
}

[Fact]
public void Convert_WithPatchString_ReturnsHttpVerbPatch()
{
var mapper = GetSubject();

var result = mapper.Convert("PATCH");

Assert.Equal(HttpVerb.Patch, result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,7 @@ public void Convert_WithPlainTextBody_CallsConvertOnHttpBodyContentMapperAndAssi
},
Body = "This is a plain body"
};
var httpBodyContent = new HttpBodyContent
{
Content = response.Body,
ContentType = contentTypeString
};
var httpBodyContent = new HttpBodyContent(response.Body, contentTypeString, null);

var mockHttpBodyContentMapper = Substitute.For<IHttpBodyContentMapper>();

Expand Down Expand Up @@ -150,11 +146,7 @@ public void Convert_WithJsonBody_CallsConvertOnHttpBodyContentMapperAndAssignsCo
}
};
var jsonBody = "{\"Test\":\"tester\",\"Test2\":1}";
var httpBodyContent = new HttpBodyContent
{
Content = jsonBody,
ContentType = contentTypeString
};
var httpBodyContent = new HttpBodyContent(jsonBody, contentTypeString, null);

var mockHttpBodyContentMapper = Substitute.For<IHttpBodyContentMapper>();

Expand Down
Loading

0 comments on commit 3852d14

Please sign in to comment.