Skip to content

Commit 2c1171f

Browse files
committed
Merge pull request #77 from MehdiK/report-tests
Report tests
2 parents ba1adcc + 1b8fb0c commit 2c1171f

25 files changed

Lines changed: 572 additions & 51 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ obj/
88
*.swp
99
*.orig
1010
*.nupkg
11+
*.received.txt
1112
*.crunchproject.local.xml
1213
*.crunchsolution.local.xml
1314
*.cache
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using NUnit.Framework;
2+
using TestStack.BDDfy.Configuration;
3+
4+
namespace TestStack.BDDfy.Tests.Configuration
5+
{
6+
[TestFixture]
7+
public class SequentialKeyGeneratorTests
8+
{
9+
[Test]
10+
public void ShouldReturnOneForFirstScenario()
11+
{
12+
Assert.That(new SequentialKeyGenerator().GetScenarioId(null), Is.EqualTo("scenario-1"));
13+
}
14+
15+
[Test]
16+
public void ShouldIncrementScenarioIdForEachRequestForScenariId()
17+
{
18+
var sut = new SequentialKeyGenerator();
19+
20+
for (int i = 1; i <= 12; i++)
21+
{
22+
Assert.That(sut.GetScenarioId(null), Is.EqualTo("scenario-" + i));
23+
}
24+
}
25+
26+
[Test]
27+
public void ShouldReturnOneOneForFirstStepOfFirstScenario()
28+
{
29+
Assert.That(new SequentialKeyGenerator().GetStepId(null), Is.EqualTo("step-1-1"));
30+
}
31+
32+
[Test]
33+
public void ShouldIncrementStepIdForEachRequestForStepId()
34+
{
35+
var sut = new SequentialKeyGenerator();
36+
37+
for (int i = 1; i <= 12; i++)
38+
{
39+
Assert.That(sut.GetStepId(null), Is.EqualTo("step-1-" + i));
40+
}
41+
}
42+
43+
[Test]
44+
public void ShouldResetStepCountForNewScenario()
45+
{
46+
var sut = new SequentialKeyGenerator();
47+
sut.GetStepId(null);
48+
sut.GetScenarioId(null);
49+
50+
Assert.That(sut.GetStepId(null), Is.EqualTo("step-2-1"));
51+
}
52+
}
53+
}

TestStack.BDDfy.Tests/Reporters/Diagnostics/DiagnosticsReportBuilderSpecs.cs renamed to TestStack.BDDfy.Tests/Reporters/Diagnostics/DiagnosticsReportBuilderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace TestStack.BDDfy.Tests.Reporters.Diagnostics
88
{
99
[TestFixture]
10-
public class DiagnosticsReportBuilderSpecs
10+
public class DiagnosticsReportBuilderTests
1111
{
1212
[Test]
1313
public void ShouldSerializeDiagnosticDataToSpecifiedFormat()

TestStack.BDDfy.Tests/Reporters/Diagnostics/DiagnosticsReporterSpecs.cs renamed to TestStack.BDDfy.Tests/Reporters/Diagnostics/DiagnosticsReporterTests.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
namespace TestStack.BDDfy.Tests.Reporters.Diagnostics
1010
{
1111
[TestFixture]
12-
public class DiagnosticsReporterSpecs
12+
public class DiagnosticsReporterTests
1313
{
1414
private IReportBuilder _builder;
1515
private IReportWriter _writer;
@@ -33,8 +33,10 @@ public void ShouldPrintErrorInReportIfProcessingFails()
3333

3434
sut.Process(new List<Story>());
3535

36-
_writer.Received().OutputReport("There was an error compiling the json report: Error occurred.",
37-
Arg.Any<string>(), Arg.Any<string>());
36+
_writer.Received().OutputReport(
37+
Arg.Is<string>(s => s.StartsWith("Error occurred.")),
38+
Arg.Any<string>(),
39+
Arg.Any<string>());
3840
}
3941

4042
private DiagnosticsReporter CreateSut()

TestStack.BDDfy.Tests/Reporters/Html/HtmlReportBuilderTests.ShouldProduceExpectedHtml.approved.txt

Lines changed: 171 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using System;
2+
using System.Globalization;
3+
using System.IO;
4+
using System.Reflection;
5+
using System.Runtime.CompilerServices;
6+
using System.Text.RegularExpressions;
7+
using System.Threading;
8+
using ApprovalTests;
9+
using ApprovalTests.Reporters;
10+
using NUnit.Framework;
11+
using TestStack.BDDfy.Configuration;
12+
using TestStack.BDDfy.Reporters.Html;
13+
14+
namespace TestStack.BDDfy.Tests.Reporters.Html
15+
{
16+
[TestFixture]
17+
[UseReporter(typeof (DiffReporter))]
18+
public class HtmlReportBuilderTests
19+
{
20+
[Test]
21+
[MethodImpl(MethodImplOptions.NoInlining)]
22+
public void ShouldProduceExpectedHtml()
23+
{
24+
// somehow the scenario id keeps increasing on TC
25+
// resetting here explicitly
26+
Configurator.IdGenerator.Reset();
27+
28+
// setting the culture to make sure the date is formatted the same on all machines
29+
using (new TemporaryCulture("en-GB"))
30+
{
31+
var model = new HtmlReportViewModel(
32+
new DefaultHtmlReportConfiguration(),
33+
new ReportTestData().CreateTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds());
34+
35+
var sut = new HtmlReportBuilder {DateProvider = () => new DateTime(2014, 3, 25, 11, 30, 5)};
36+
var result = sut.CreateReport(model);
37+
Approvals.Verify(result);
38+
}
39+
}
40+
}
41+
42+
public class TemporaryCulture : IDisposable
43+
{
44+
private readonly string _originalCulture;
45+
public TemporaryCulture(string newCulture)
46+
{
47+
_originalCulture = Thread.CurrentThread.CurrentCulture.Name;
48+
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(newCulture);
49+
}
50+
51+
public void Dispose()
52+
{
53+
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(_originalCulture);
54+
}
55+
}
56+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using NSubstitute;
4+
using NUnit.Framework;
5+
using TestStack.BDDfy.Reporters;
6+
7+
namespace TestStack.BDDfy.Tests.Reporters.Html
8+
{
9+
[TestFixture]
10+
public class HtmlReporterTests
11+
{
12+
private TestableHtmlReporter _sut;
13+
private const string OutputPath = @"C:\Reports";
14+
private const string ReportData = "Report Data";
15+
private const string CustomStylesheet = "some custom css in here!";
16+
private const string CustomJavascript = "some custom javascript in here!";
17+
private const string ErrorMessage = "There was some exception.";
18+
19+
[SetUp]
20+
public void SetUp()
21+
{
22+
_sut = TestableHtmlReporter.Create();
23+
}
24+
25+
[Test]
26+
public void ShouldCreateReportIfProcessingSucceeds()
27+
{
28+
_sut.Builder.CreateReport(Arg.Any<FileReportModel>()).Returns(ReportData);
29+
30+
_sut.Process(new List<Story>());
31+
32+
_sut.Writer.Received().OutputReport(ReportData, Arg.Any<string>(), Arg.Any<string>());
33+
}
34+
35+
[Test]
36+
public void ShouldPrintErrorInReportIfProcessingFails()
37+
{
38+
_sut.Builder.CreateReport(Arg.Any<FileReportModel>()).Returns(x => { throw new Exception(ErrorMessage); });
39+
40+
_sut.Process(new ReportTestData().CreateTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds());
41+
42+
_sut.Writer.Received().OutputReport(
43+
Arg.Is<string>(s => s.StartsWith(ErrorMessage)),
44+
Arg.Any<string>(),
45+
Arg.Any<string>());
46+
}
47+
48+
[Test]
49+
public void ShouldLoadCustomStyleSheetIfOneExists()
50+
{
51+
const string customStylesheetFilePath = OutputPath + @"\BDDfyCustom.css";
52+
_sut.Configuration.OutputPath.Returns(OutputPath);
53+
_sut.FileReader.Exists(customStylesheetFilePath).Returns(true);
54+
_sut.FileReader.Read(customStylesheetFilePath).Returns(CustomStylesheet);
55+
56+
_sut.Process(new ReportTestData().CreateTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds());
57+
58+
Assert.That(_sut.Model.CustomStylesheet, Is.EqualTo(CustomStylesheet));
59+
_sut.FileReader.Received().Read(customStylesheetFilePath);
60+
}
61+
62+
[Test]
63+
public void ShouldNotLoadCustomStyleSheetIfNoneExist()
64+
{
65+
const string customStylesheet = OutputPath + @"\BDDfyCustom.css";
66+
_sut.Configuration.OutputPath.Returns(OutputPath);
67+
_sut.FileReader.Exists(customStylesheet).Returns(false);
68+
69+
_sut.Process(new ReportTestData().CreateTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds());
70+
71+
Assert.That(_sut.Model.CustomStylesheet, Is.Null);
72+
_sut.FileReader.DidNotReceive().Read(customStylesheet);
73+
}
74+
75+
[Test]
76+
public void ShouldLoadCustomJavascriptIfOneExists()
77+
{
78+
const string javaScriptFilePath = OutputPath + @"\BDDfyCustom.js";
79+
_sut.Configuration.OutputPath.Returns(OutputPath);
80+
_sut.FileReader.Exists(javaScriptFilePath).Returns(true);
81+
_sut.FileReader.Read(javaScriptFilePath).Returns(CustomJavascript);
82+
83+
_sut.Process(new ReportTestData().CreateTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds());
84+
85+
Assert.That(_sut.Model.CustomJavascript, Is.EqualTo(CustomJavascript));
86+
_sut.FileReader.Received().Read(javaScriptFilePath);
87+
}
88+
89+
[Test]
90+
public void ShouldNotLoadCustomJavascriptIfNoneExist()
91+
{
92+
const string customJavascript = OutputPath + @"\BDDfyCustom.js";
93+
_sut.Configuration.OutputPath.Returns(OutputPath);
94+
_sut.FileReader.Exists(customJavascript).Returns(false);
95+
96+
_sut.Process(new ReportTestData().CreateTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds());
97+
98+
Assert.That(_sut.Model.CustomJavascript, Is.Null);
99+
_sut.FileReader.DidNotReceive().Read(customJavascript);
100+
}
101+
}
102+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using NSubstitute;
2+
using TestStack.BDDfy.Reporters;
3+
using TestStack.BDDfy.Reporters.Html;
4+
using TestStack.BDDfy.Reporters.Readers;
5+
using TestStack.BDDfy.Reporters.Writers;
6+
7+
namespace TestStack.BDDfy.Tests.Reporters.Html
8+
{
9+
public class TestableHtmlReporter : HtmlReporter
10+
{
11+
public IHtmlReportConfiguration Configuration { get; set; }
12+
public IReportBuilder Builder { get; set; }
13+
public IReportWriter Writer { get; set; }
14+
public IFileReader FileReader { get; set; }
15+
16+
public TestableHtmlReporter(IHtmlReportConfiguration configuration, IReportBuilder builder, IReportWriter writer, IFileReader fileReader)
17+
: base(configuration, builder, writer, fileReader)
18+
{
19+
Configuration = configuration;
20+
Builder = builder;
21+
Writer = writer;
22+
FileReader = fileReader;
23+
Configuration.RunsOn(Arg.Any<Story>()).Returns(true);
24+
}
25+
26+
public static TestableHtmlReporter Create()
27+
{
28+
return new TestableHtmlReporter(
29+
Substitute.For<IHtmlReportConfiguration>(), Substitute.For<IReportBuilder>(),
30+
Substitute.For<IReportWriter>(), Substitute.For<IFileReader>());
31+
}
32+
}
33+
}

TestStack.BDDfy.Tests/Reporters/MarkDown/MarkDownReportBuilderSpecs.cs renamed to TestStack.BDDfy.Tests/Reporters/MarkDown/MarkDownReportBuilderTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace TestStack.BDDfy.Tests.Reporters.MarkDown
88
{
99
[TestFixture]
10-
public class MarkDownReportBuilderSpecs
10+
public class MarkDownReportBuilderTests
1111
{
1212
private MarkDownReportBuilder _sut;
1313
private IEnumerable<Story> _stories;
@@ -19,7 +19,7 @@ public void GivenAMarkDownReportBuilder()
1919
_sut = new MarkDownReportBuilder();
2020
}
2121

22-
public void AndGivenTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds()
22+
public void AndGivenTwoStoriesEachWithTwoScenariosWithThreeSteps()
2323
{
2424
_stories = new ReportTestData().CreateTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds();
2525
}

TestStack.BDDfy.Tests/Reporters/MarkDown/MarkDownReporterSpecs.cs renamed to TestStack.BDDfy.Tests/Reporters/MarkDown/MarkDownReporterTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
namespace TestStack.BDDfy.Tests.Reporters.MarkDown
1010
{
1111
[TestFixture]
12-
public class MarkDownReporterSpecs
12+
public class MarkDownReporterTests
1313
{
1414
private IReportBuilder _builder;
1515
private IReportWriter _writer;

0 commit comments

Comments
 (0)