Skip to content

Commit 7afb073

Browse files
committed
Changing how web responses are handled to improve testability
1 parent 0a05089 commit 7afb073

File tree

6 files changed

+50
-74
lines changed

6 files changed

+50
-74
lines changed
Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,59 @@
11
using System.Net;
22
using Newtonsoft.Json;
3+
using SSLLWrapper.Models;
34
using SSLLWrapper.Models.Response;
5+
using SSLLWrapper.Models.Response.BaseSubModels;
46

57
namespace SSLLWrapper.Domain
68
{
79
class ResponsePopulation
810
{
911
public JsonSerializerSettings JsonSerializerSettings;
10-
private readonly WebResponseReader _webResponseReader;
1112

1213
public ResponsePopulation()
1314
{
1415
// Ignoring null values when serializing json objects
1516
JsonSerializerSettings = new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore};
16-
17-
_webResponseReader = new WebResponseReader();
1817
}
1918

20-
public Info InfoModel(HttpWebResponse webResponse, Info infoModel)
19+
public Info InfoModel(WebResponseModel webResponse, Info infoModel)
2120
{
22-
var webResult = _webResponseReader.GetResponsePayload(webResponse);
23-
24-
infoModel = JsonConvert.DeserializeObject<Info>(webResult, JsonSerializerSettings);
25-
infoModel.Header.statusCode = _webResponseReader.GetStatusCode(webResponse);
26-
infoModel.Header.statusDescription = _webResponseReader.GetStatusDescription(webResponse);
21+
infoModel = JsonConvert.DeserializeObject<Info>(webResponse.Payloay, JsonSerializerSettings);
22+
infoModel.Header = PopulateHeader(infoModel.Header, webResponse);
2723

2824
return infoModel;
2925
}
3026

31-
public Analyze AnalyzeModel(HttpWebResponse webResponse, Analyze analyzeModel)
27+
public Analyze AnalyzeModel(WebResponseModel webResponse, Analyze analyzeModel)
3228
{
33-
var webResult = _webResponseReader.GetResponsePayload(webResponse);
34-
35-
analyzeModel = JsonConvert.DeserializeObject<Analyze>(webResult, JsonSerializerSettings);
36-
analyzeModel.Header.statusCode = _webResponseReader.GetStatusCode(webResponse);
37-
analyzeModel.Header.statusDescription = _webResponseReader.GetStatusDescription(webResponse);
29+
analyzeModel = JsonConvert.DeserializeObject<Analyze>(webResponse.Payloay, JsonSerializerSettings);
30+
analyzeModel.Header = PopulateHeader(analyzeModel.Header, webResponse);
3831

3932
return analyzeModel;
4033
}
4134

42-
public Endpoint EndpointModel(HttpWebResponse webResponse, Endpoint endpointModel)
35+
public Endpoint EndpointModel(WebResponseModel webResponse, Endpoint endpointModel)
4336
{
44-
var webResult = _webResponseReader.GetResponsePayload(webResponse);
45-
46-
endpointModel = JsonConvert.DeserializeObject<Endpoint>(webResult, JsonSerializerSettings);
47-
endpointModel.Header.statusCode = _webResponseReader.GetStatusCode(webResponse);
48-
endpointModel.Header.statusDescription = _webResponseReader.GetStatusDescription(webResponse);
37+
endpointModel = JsonConvert.DeserializeObject<Endpoint>(webResponse.Payloay, JsonSerializerSettings);
38+
endpointModel.Header = PopulateHeader(endpointModel.Header, webResponse);
4939

5040
return endpointModel;
5141
}
5242

53-
public StatusCodes StatusCodesModel(HttpWebResponse webResponse, StatusCodes statusCodes)
43+
public StatusCodes StatusCodesModel(WebResponseModel webResponse, StatusCodes statusCodes)
5444
{
55-
var webResult = _webResponseReader.GetResponsePayload(webResponse);
56-
57-
statusCodes = JsonConvert.DeserializeObject<StatusCodes>(webResult, JsonSerializerSettings);
58-
statusCodes.Header.statusCode = _webResponseReader.GetStatusCode(webResponse);
59-
statusCodes.Header.statusDescription = _webResponseReader.GetStatusDescription(webResponse);
45+
statusCodes = JsonConvert.DeserializeObject<StatusCodes>(webResponse.Payloay, JsonSerializerSettings);
46+
statusCodes.Header = PopulateHeader(statusCodes.Header, webResponse);
6047

6148
return statusCodes;
6249
}
50+
51+
public Header PopulateHeader(Header header, WebResponseModel webResponse)
52+
{
53+
header.statusCode = webResponse.StatusCode;
54+
header.statusDescription = webResponse.StatusDescription;
55+
56+
return header;
57+
}
6358
}
6459
}

SSLLWrapper/Domain/WebResponseReader.cs

Lines changed: 0 additions & 29 deletions
This file was deleted.

SSLLWrapper/External/SSLLabsApi.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,36 @@
1-
using System.Net;
1+
using System.IO;
2+
using System.Linq;
3+
using System.Net;
24
using SSLLWrapper.Interfaces;
35
using SSLLWrapper.Models;
46

57
namespace SSLLWrapper.External
68
{
79
class SSLLabsApi : IApiProvider
810
{
9-
public HttpWebResponse MakeGetRequest(RequestModel requestModel)
11+
public WebResponseModel MakeGetRequest(RequestModel requestModel)
1012
{
1113
var url = requestModel.ApiBaseUrl + "/" + requestModel.Action;
1214

13-
// ** TO DO - Refactor this
1415
if (requestModel.Parameters.Count >= 1)
1516
{
16-
url = url + "?";
17-
var iteration = 0;
18-
19-
foreach(var parameter in requestModel.Parameters)
20-
{
21-
iteration++;
22-
url = url + parameter.Key + "=" + parameter.Value;
23-
24-
if (iteration != requestModel.Parameters.Count)
25-
url = url + "&";
26-
}
17+
url = string.Format("{0}{1}{2}", url, "?", string.Join("&", (from parameter in requestModel.Parameters
18+
where parameter.Value != null select string.Format("{0}={1}", parameter.Key, parameter.Value))));
2719
}
2820

21+
var webResponseModel = new WebResponseModel() {Url = url};
22+
2923
var request = (HttpWebRequest)WebRequest.Create(url);
3024
request.Method = "GET";
3125

32-
// Make request and return response
33-
return (HttpWebResponse)request.GetResponse(); ;
26+
var response = (HttpWebResponse)request.GetResponse();
27+
var streamReader = new StreamReader(response.GetResponseStream());
28+
29+
webResponseModel.Payloay = streamReader.ReadToEnd();
30+
webResponseModel.StatusCode = (int)response.StatusCode;
31+
webResponseModel.StatusDescription = response.StatusDescription;
32+
33+
return webResponseModel;
3434
}
3535
}
3636
}

SSLLWrapper/Interfaces/IApiProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ namespace SSLLWrapper.Interfaces
55
{
66
interface IApiProvider
77
{
8-
HttpWebResponse MakeGetRequest(RequestModel requestModel);
8+
WebResponseModel MakeGetRequest(RequestModel requestModel);
99
}
1010
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace SSLLWrapper.Models
2+
{
3+
class WebResponseModel
4+
{
5+
public int StatusCode;
6+
public string Url;
7+
public string Payloay;
8+
public string StatusDescription;
9+
}
10+
}

SSLLWrapper/SSLLWrapper.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
<ItemGroup>
4747
<Compile Include="External\SSLLabsApi.cs" />
4848
<Compile Include="Models\Response\StatusCodes.cs" />
49+
<Compile Include="Models\WebResponseModel.cs" />
4950
<Compile Include="SSLLService.cs" />
50-
<Compile Include="Domain\WebResponseReader.cs" />
5151
<Compile Include="Interfaces\IApiProvider.cs" />
5252
<Compile Include="Domain\RequestModelFactory.cs" />
5353
<Compile Include="Domain\UrlValidation.cs" />

0 commit comments

Comments
 (0)