Skip to content

Commit 67ddc39

Browse files
committed
split out some responsibilities from DiagnosticsReporter and added some tests for it.
1 parent 8b7a086 commit 67ddc39

File tree

10 files changed

+129
-21
lines changed

10 files changed

+129
-21
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using NSubstitute;
4+
using NUnit.Framework;
5+
using TestStack.BDDfy.Core;
6+
using TestStack.BDDfy.Processors.Diagnostics;
7+
8+
namespace TestStack.BDDfy.Tests.Processors.Diagnostics
9+
{
10+
[TestFixture]
11+
public class DiagnosticsReporterSpecs
12+
{
13+
private ISerializer _serializer;
14+
private IReportWriter _writer;
15+
16+
[Test]
17+
public void ShouldCreateReportIfProcessingSucceeds()
18+
{
19+
var sut = CreateSut();
20+
_serializer.Serialize(Arg.Any<object>()).Returns("Report Data");
21+
22+
sut.Process(new List<Core.Story>());
23+
24+
_writer.Received().Create("Report Data", Arg.Any<string>());
25+
}
26+
27+
[Test]
28+
public void ShouldPrintErrorInReportIfProcessingFails()
29+
{
30+
var sut = CreateSut();
31+
_serializer.Serialize(Arg.Any<object>()).Returns(x => { throw new Exception("Error occurred."); });
32+
33+
sut.Process(new List<Core.Story>());
34+
35+
_writer.Received().Create("There was an error compiling the json report: Error occurred.", Arg.Any<string>());
36+
}
37+
38+
private DiagnosticsReporter CreateSut()
39+
{
40+
_serializer = Substitute.For<ISerializer>();
41+
_writer = Substitute.For<IReportWriter>();
42+
return new DiagnosticsReporter(_serializer, _writer);
43+
}
44+
}
45+
}

TestStack.BDDfy.Tests/TestStack.BDDfy.Tests.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@
4444
<ItemGroup>
4545
<Reference Include="nunit.framework">
4646
<HintPath>..\packages\NUnit.2.6.2\lib\nunit.framework.dll</HintPath>
47+
<Reference Include="NSubstitute">
48+
<HintPath>..\packages\NSubstitute.1.5.0.0\lib\NET40\NSubstitute.dll</HintPath>
49+
</Reference>
50+
<Reference Include="nunit.framework, Version=2.5.6.10205, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
51+
<HintPath>..\Resource\Tool\NUnit\framework\nunit.framework.dll</HintPath>
4752
</Reference>
4853
<Reference Include="System" />
4954
<Reference Include="System.Core" />
@@ -72,6 +77,7 @@
7277
<SubType>Code</SubType>
7378
</Compile>
7479
<Compile Include="HumanizerTests.cs" />
80+
<Compile Include="Processors\Diagnostics\DiagnosticsReporterSpecs.cs" />
7581
<Compile Include="Scanner\ExecutableAttributeOrderOrdersTheStepsCorrectly.cs" />
7682
<Compile Include="Scanner\PropertiesAreNotConsideredAsStepsEvenWhenTheirNameMatchesConventions.cs" />
7783
<Compile Include="Scanner\ExpressionExtensionsTests.cs" />
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3+
<package id="NSubstitute" version="1.5.0.0" targetFramework="net40" />
34
<package id="NUnit" version="2.6.2" targetFramework="net40" />
45
</packages>

TestStack.BDDfy.sln.DotSettings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
2+
<s:String x:Key="/Default/FilterSettingsManager/CoverageFilterXml/@EntryValue">&lt;data&gt;&lt;IncludeFilters /&gt;&lt;ExcludeFilters /&gt;&lt;/data&gt;</s:String>
3+
<s:String x:Key="/Default/FilterSettingsManager/AttributeFilterXml/@EntryValue">&lt;data /&gt;</s:String></wpf:ResourceDictionary>

TestStack.BDDfy/Processors/Diagnostics/DiagnosticsReporter.cs

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,22 @@
2525

2626
using System;
2727
using System.Collections.Generic;
28-
using System.IO;
2928
using System.Linq;
30-
using System.Web.Script.Serialization;
3129
using TestStack.BDDfy.Core;
3230

3331
namespace TestStack.BDDfy.Processors.Diagnostics
3432
{
3533
public class DiagnosticsReporter : IBatchProcessor
3634
{
37-
private static string OutputDirectory
35+
private readonly ISerializer _serializer;
36+
private readonly IReportWriter _writer;
37+
38+
public DiagnosticsReporter() : this(new JsonSerializer(), new FileWriter()) { }
39+
40+
public DiagnosticsReporter(ISerializer serializer, IReportWriter writer)
3841
{
39-
get
40-
{
41-
string codeBase = typeof(DiagnosticsReporter).Assembly.CodeBase;
42-
var uri = new UriBuilder(codeBase);
43-
string path = Uri.UnescapeDataString(uri.Path);
44-
return Path.GetDirectoryName(path);
45-
}
42+
_serializer = serializer;
43+
_writer = writer;
4644
}
4745

4846
public void Process(IEnumerable<Story> stories)
@@ -53,21 +51,18 @@ public void Process(IEnumerable<Story> stories)
5351

5452
try
5553
{
56-
report = CreateJson(viewModel);
54+
var data = GetDiagnosticData(viewModel);
55+
report = _serializer.Serialize(data);
5756
}
5857
catch (Exception ex)
5958
{
6059
report = error + ex.Message;
6160
}
6261

63-
var path = Path.Combine(OutputDirectory, "Diagnostics.json");
64-
65-
if (File.Exists(path))
66-
File.Delete(path);
67-
File.WriteAllText(path, report);
62+
_writer.Create(report, "Diagnostics.json");
6863
}
6964

70-
public string CreateJson(FileReportModel viewModel)
65+
public List<object> GetDiagnosticData(FileReportModel viewModel)
7166
{
7267
var graph = new List<object>();
7368
foreach (var story in viewModel.Stories)
@@ -89,10 +84,7 @@ public string CreateJson(FileReportModel viewModel)
8984
});
9085
}
9186

92-
var serializer = new JavaScriptSerializer();
93-
string json = serializer.Serialize(graph);
94-
95-
return new JsonFormatter(json).Format();
87+
return graph;
9688
}
9789
}
9890
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System;
2+
using System.IO;
3+
4+
namespace TestStack.BDDfy.Processors.Diagnostics
5+
{
6+
public class FileWriter : IReportWriter
7+
{
8+
public void Create(string reportData, string reportName)
9+
{
10+
var path = Path.Combine(OutputDirectory, reportName);
11+
12+
if (File.Exists(path))
13+
File.Delete(path);
14+
File.WriteAllText(path, reportData);
15+
}
16+
17+
private static string OutputDirectory
18+
{
19+
get
20+
{
21+
string codeBase = typeof(DiagnosticsReporter).Assembly.CodeBase;
22+
var uri = new UriBuilder(codeBase);
23+
string path = Uri.UnescapeDataString(uri.Path);
24+
return Path.GetDirectoryName(path);
25+
}
26+
}
27+
}
28+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace TestStack.BDDfy.Processors.Diagnostics
2+
{
3+
public interface IReportWriter
4+
{
5+
void Create(string reportData, string reportName);
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace TestStack.BDDfy.Processors.Diagnostics
2+
{
3+
public interface ISerializer
4+
{
5+
string Serialize(object obj);
6+
}
7+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Web.Script.Serialization;
2+
3+
namespace TestStack.BDDfy.Processors.Diagnostics
4+
{
5+
public class JsonSerializer : ISerializer
6+
{
7+
public string Serialize(object obj)
8+
{
9+
var serializer = new JavaScriptSerializer();
10+
string json = serializer.Serialize(obj);
11+
12+
return new JsonFormatter(json).Format();
13+
}
14+
}
15+
}

TestStack.BDDfy/TestStack.BDDfy.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@
7373
<Compile Include="Core\IBatchProcessor.cs" />
7474
<Compile Include="Processors\ConsoleReporter.cs" />
7575
<Compile Include="Processors\Diagnostics\DiagnosticsReporter.cs" />
76+
<Compile Include="Processors\Diagnostics\FileWriter.cs" />
77+
<Compile Include="Processors\Diagnostics\IReportWriter.cs" />
78+
<Compile Include="Processors\Diagnostics\ISerializer.cs" />
7679
<Compile Include="Processors\Diagnostics\JsonFormatter.cs" />
80+
<Compile Include="Processors\Diagnostics\JsonSerializer.cs" />
7781
<Compile Include="Processors\FileReportModel.cs" />
7882
<Compile Include="Processors\FileReportSummaryModel.cs" />
7983
<Compile Include="Processors\HtmlReporter\DefaultHtmlReportConfiguration.cs" />

0 commit comments

Comments
 (0)