Skip to content

Commit 9967741

Browse files
committed
makes StoryMetadata generic to allow different story narratives
1 parent dab3337 commit 9967741

10 files changed

Lines changed: 68 additions & 69 deletions

TestStack.BDDfy.Tests/Stories/StoryClassAndScenarioClassAreTheSame.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ void andTheNarrativeIsReturnedAsExpected()
4242
{
4343
var expectedNarrative = (StoryAttribute)typeof(StoryAsScenario).GetCustomAttributes(typeof(StoryAttribute), false).First();
4444
Assert.That(_story.Metadata, Is.Not.Null);
45-
Assert.That(_story.Metadata.AsA, Is.EqualTo(expectedNarrative.AsA));
46-
Assert.That(_story.Metadata.IWant, Is.EqualTo(expectedNarrative.IWant));
47-
Assert.That(_story.Metadata.SoThat, Is.EqualTo(expectedNarrative.SoThat));
45+
Assert.That(_story.Metadata.Narrative1, Is.EqualTo(expectedNarrative.AsA));
46+
Assert.That(_story.Metadata.Narrative2, Is.EqualTo(expectedNarrative.IWant));
47+
Assert.That(_story.Metadata.Narrative3, Is.EqualTo(expectedNarrative.SoThat));
4848
}
4949

5050
[Test]

TestStack.BDDfy.Tests/Stories/WhenStoryAttibuteMissesAsATextInAsAProperty.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public void Then_it_is_injected_by_BDDfy()
1414
{
1515
var story = new DummyScenario().BDDfy<WhenStoryAttibuteMissesAsATextInAsAProperty>();
1616

17-
Assert.That(story.Metadata.AsA, Is.EqualTo("As a programmer"));
18-
Assert.That(story.Metadata.IWant, Is.EqualTo("I want the missing 'As a' to be added to story metadata"));
19-
Assert.That(story.Metadata.SoThat, Is.EqualTo("So that I don't have to duplicate it on the string"));
17+
Assert.That(story.Metadata.Narrative1, Is.EqualTo("As a programmer"));
18+
Assert.That(story.Metadata.Narrative2, Is.EqualTo("I want the missing 'As a' to be added to story metadata"));
19+
Assert.That(story.Metadata.Narrative3, Is.EqualTo("So that I don't have to duplicate it on the string"));
2020
}
2121
}
2222
}

TestStack.BDDfy.Tests/Stories/WhenStoryAttibuteMissesDuplicateTextsInProperties.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public void Then_it_is_injected_by_BDDfy()
1414
{
1515
var story = new DummyScenario().BDDfy<WhenStoryAttibuteMissesDuplicateTextsInProperties>();
1616

17-
Assert.That(story.Metadata.AsA, Is.EqualTo("As a programmer"));
18-
Assert.That(story.Metadata.IWant, Is.EqualTo("I want the missing texts to be added to story metadata"));
19-
Assert.That(story.Metadata.SoThat, Is.EqualTo("So that I don't have to duplicate it on the string"));
17+
Assert.That(story.Metadata.Narrative1, Is.EqualTo("As a programmer"));
18+
Assert.That(story.Metadata.Narrative2, Is.EqualTo("I want the missing texts to be added to story metadata"));
19+
Assert.That(story.Metadata.Narrative3, Is.EqualTo("So that I don't have to duplicate it on the string"));
2020
}
2121
}
2222
}

TestStack.BDDfy.Tests/Stories/WhenStoryAttibuteMissesIWantTextInIWantProperty.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public void Then_it_is_injected_by_BDDfy()
1414
{
1515
var story = new DummyScenario().BDDfy<WhenStoryAttibuteMissesIWantTextInIWantProperty>();
1616

17-
Assert.That(story.Metadata.AsA, Is.EqualTo("As a programmer"));
18-
Assert.That(story.Metadata.IWant, Is.EqualTo("I want the missing 'I want' to be added to story metadata"));
19-
Assert.That(story.Metadata.SoThat, Is.EqualTo("So that I don't have to duplicate it on the string"));
17+
Assert.That(story.Metadata.Narrative1, Is.EqualTo("As a programmer"));
18+
Assert.That(story.Metadata.Narrative2, Is.EqualTo("I want the missing 'I want' to be added to story metadata"));
19+
Assert.That(story.Metadata.Narrative3, Is.EqualTo("So that I don't have to duplicate it on the string"));
2020
}
2121
}
2222
}

TestStack.BDDfy.Tests/Stories/WhenStoryAttibuteMissesSoThatTextInSoThatProperty.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public void Then_it_is_injected_by_BDDfy()
1414
{
1515
var story = new DummyScenario().BDDfy<WhenStoryAttibuteMissesSoThatTextInSoThatProperty>();
1616

17-
Assert.That(story.Metadata.AsA, Is.EqualTo("As a programmer"));
18-
Assert.That(story.Metadata.IWant, Is.EqualTo("I want the missing 'So that' to be added to story metadata"));
19-
Assert.That(story.Metadata.SoThat, Is.EqualTo("So that I don't have to duplicate it on the string"));
17+
Assert.That(story.Metadata.Narrative1, Is.EqualTo("As a programmer"));
18+
Assert.That(story.Metadata.Narrative2, Is.EqualTo("I want the missing 'So that' to be added to story metadata"));
19+
Assert.That(story.Metadata.Narrative3, Is.EqualTo("So that I don't have to duplicate it on the string"));
2020
}
2121
}
2222
}

TestStack.BDDfy/Reporters/ConsoleReporter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ private static void ReportStoryHeader(Story story)
3838
return;
3939

4040
Console.WriteLine("Story: " + story.Metadata.Title);
41-
Console.WriteLine("\t" + story.Metadata.AsA);
42-
Console.WriteLine("\t" + story.Metadata.IWant);
43-
Console.WriteLine("\t" + story.Metadata.SoThat);
41+
Console.WriteLine("\t" + story.Metadata.Narrative1);
42+
Console.WriteLine("\t" + story.Metadata.Narrative2);
43+
Console.WriteLine("\t" + story.Metadata.Narrative3);
4444
}
4545

4646
static string PrefixWithSpaceIfRequired(Step step)

TestStack.BDDfy/Reporters/Html/HtmlReportBuilder.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,13 @@ private void AddStoryMetadataAndNarrative(Story story)
224224
AddLine(string.Format("<div class='storyTitle'>{0}</div>", story.Metadata.Title));
225225
}
226226

227-
if (story.Metadata != null && !string.IsNullOrEmpty(story.Metadata.AsA))
227+
if (story.Metadata != null && !string.IsNullOrEmpty(story.Metadata.Narrative1))
228228
{
229229
using (OpenTag("<ul class='storyNarrative'>", HtmlTag.ul))
230230
{
231-
AddLine(string.Format("<li>{0}</li>", story.Metadata.AsA));
232-
AddLine(string.Format("<li>{0}</li>", story.Metadata.IWant));
233-
AddLine(string.Format("<li>{0}</li>", story.Metadata.SoThat));
231+
AddLine(string.Format("<li>{0}</li>", story.Metadata.Narrative1));
232+
AddLine(string.Format("<li>{0}</li>", story.Metadata.Narrative2));
233+
AddLine(string.Format("<li>{0}</li>", story.Metadata.Narrative3));
234234
}
235235
}
236236
}

TestStack.BDDfy/Reporters/MarkDown/MarkDownReportBuilder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ public string CreateReport(FileReportModel model)
1313
if (story.Metadata != null)
1414
{
1515
report.AppendLine(string.Format("## Story: {0}", story.Metadata.Title));
16-
report.AppendLine(string.Format(" **{0}** ", story.Metadata.AsA));
17-
report.AppendLine(string.Format(" **{0}** ", story.Metadata.IWant));
18-
report.AppendLine(string.Format(" **{0}** ", story.Metadata.SoThat));
16+
report.AppendLine(string.Format(" **{0}** ", story.Metadata.Narrative1));
17+
report.AppendLine(string.Format(" **{0}** ", story.Metadata.Narrative2));
18+
report.AppendLine(string.Format(" **{0}** ", story.Metadata.Narrative3));
1919
}
2020

2121
report.AppendLine(); // separator

TestStack.BDDfy/Scanners/StoryAttributeMetaDataScanner.cs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
using System;
22
using System.Diagnostics;
33
using System.Linq;
4+
using System.Text;
45

56
namespace TestStack.BDDfy
67
{
78
public class StoryAttributeMetadataScanner : IStoryMetadataScanner
89
{
10+
// ReSharper disable InconsistentNaming
11+
private const string I_want_prefix = "I want";
12+
private const string So_that_prefix = "So that";
13+
private const string As_a_prefix = "As a";
14+
// ReSharper restore InconsistentNaming
15+
916
public virtual StoryMetadata Scan(object testObject, Type explicitStoryType = null)
1017
{
1118
return GetStoryMetadata(testObject, explicitStoryType) ?? GetStoryMetadataFromScenario(testObject);
@@ -18,7 +25,7 @@ static StoryMetadata GetStoryMetadataFromScenario(object testObject)
1825
if (storyAttribute == null)
1926
return null;
2027

21-
return new StoryMetadata(scenarioType, storyAttribute);
28+
return CreateStoryMetadata(scenarioType, storyAttribute);
2229
}
2330

2431
StoryMetadata GetStoryMetadata(object testObject, Type explicityStoryType)
@@ -31,7 +38,34 @@ StoryMetadata GetStoryMetadata(object testObject, Type explicityStoryType)
3138
if (storyAttribute == null)
3239
return null;
3340

34-
return new StoryMetadata(candidateStoryType, storyAttribute);
41+
return CreateStoryMetadata(candidateStoryType, storyAttribute);
42+
}
43+
44+
static StoryMetadata CreateStoryMetadata(Type storyType, StoryAttribute storyAttribute)
45+
{
46+
var title = storyAttribute.Title;
47+
if (string.IsNullOrEmpty(title))
48+
title = NetToString.Convert(storyType.Name);
49+
50+
var narrative1 = CleanseProperty(storyAttribute.AsA, As_a_prefix);
51+
var narrative2 = CleanseProperty(storyAttribute.IWant, I_want_prefix);
52+
var narrative3 = CleanseProperty(storyAttribute.SoThat, So_that_prefix);
53+
54+
return new StoryMetadata(storyType, narrative1, narrative2, narrative3, title);
55+
}
56+
57+
static string CleanseProperty(string text, string prefix)
58+
{
59+
var property = new StringBuilder();
60+
61+
if (string.IsNullOrWhiteSpace(text))
62+
return null;
63+
64+
if (!text.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
65+
property.AppendFormat("{0} ", prefix);
66+
67+
property.Append(text);
68+
return property.ToString();
3569
}
3670

3771
protected virtual Type GetCandidateStory(object testObject, Type explicitStoryType)
Lines changed: 7 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,23 @@
11
using System;
2-
using System.Text;
32

43
namespace TestStack.BDDfy
54
{
65
public class StoryMetadata
76
{
8-
// ReSharper disable InconsistentNaming
9-
private const string I_want_prefix = "I want";
10-
private const string So_that_prefix = "So that";
11-
private const string As_a_prefix = "As a";
12-
// ReSharper restore InconsistentNaming
13-
14-
public StoryMetadata(Type storyType, StoryAttribute storyAttribute)
15-
{
16-
var title = storyAttribute.Title;
17-
if (string.IsNullOrEmpty(title))
18-
title = NetToString.Convert(storyType.Name);
19-
20-
Type = storyType;
21-
Title = title;
22-
23-
AsA = CleanseProperty(storyAttribute.AsA, As_a_prefix);
24-
IWant= CleanseProperty(storyAttribute.IWant, I_want_prefix);
25-
SoThat = CleanseProperty(storyAttribute.SoThat, So_that_prefix);
26-
}
27-
28-
public StoryMetadata(Type storyType, string asA, string iWant, string soThat, string storyTitle = null)
7+
public StoryMetadata(Type storyType, string narrative1, string narrative2, string narrative3, string storyTitle = null)
298
{
309
Title = storyTitle ?? NetToString.Convert(storyType.Name);
3110
Type = storyType;
3211

33-
AsA = CleanseProperty(asA, As_a_prefix);
34-
IWant = CleanseProperty(iWant, I_want_prefix);
35-
SoThat = CleanseProperty(soThat, So_that_prefix);
36-
}
37-
38-
string CleanseProperty(string text, string prefix)
39-
{
40-
var property = new StringBuilder();
41-
42-
if (string.IsNullOrWhiteSpace(text))
43-
return null;
44-
45-
if (!text.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
46-
property.AppendFormat("{0} ", prefix);
47-
48-
property.Append(text);
49-
return property.ToString();
12+
Narrative1 = narrative1;
13+
Narrative2 = narrative2;
14+
Narrative3 = narrative3;
5015
}
5116

5217
public Type Type { get; private set; }
5318
public string Title { get; private set; }
54-
public string AsA { get; private set; }
55-
public string IWant { get; private set; }
56-
public string SoThat { get; private set; }
19+
public string Narrative1 { get; private set; }
20+
public string Narrative2 { get; private set; }
21+
public string Narrative3 { get; private set; }
5722
}
5823
}

0 commit comments

Comments
 (0)