Skip to content

Commit f728618

Browse files
authored
Timestamp cannot be configured in ExtentSparkReporter Issue#206 (#215)
* Initial: allows setting timestamp format via config #206 * Fix timestamp format * bump version -beta2 * Update SparkTestSPA.cshtml
1 parent 9adcb1f commit f728618

12 files changed

+110
-27
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Linq;
2+
using System.Threading.Tasks;
3+
using AventStack.ExtentReports.Model;
4+
using AventStack.ExtentReports.Reporter;
5+
using NUnit.Framework;
6+
using NUnit.Framework.Internal;
7+
8+
namespace AventStack.ExtentReports.Tests.Reporter
9+
{
10+
public class SparkReporterConcurrentTest
11+
{
12+
private ExtentReports _extent;
13+
14+
[SetUp]
15+
public void Setup()
16+
{
17+
_extent = new ExtentReports();
18+
_extent.AttachReporter(new ExtentSparkReporter("SparkReporterConcurrentTest.html"));
19+
}
20+
21+
[Test]
22+
public void ParallelCreateTestsAndFlush()
23+
{
24+
var rng = Enumerable.Range(0, 100);
25+
Parallel.ForEach(rng, new ParallelOptions { MaxDegreeOfParallelism = 4 }, x => {
26+
_extent.CreateTest("Test").Info("");
27+
if (x % 5 == 0)
28+
{
29+
_extent.Flush();
30+
}
31+
});
32+
}
33+
}
34+
}

ExtentReports.Tests/Reporter/SparkReporterTest.cs

+16-2
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,26 @@ public void SparkXMLConfig()
151151
[Test]
152152
public void SparkJSONConfig()
153153
{
154-
var xmlConfigPath = Path.Combine(@"../../../../", @"config/spark-config.json");
154+
var jsonConfigPath = Path.Combine(@"../../../../", @"config/spark-config.json");
155155
var spark = new ExtentSparkReporter("Spark.html");
156-
spark.LoadJSONConfig(xmlConfigPath);
156+
spark.LoadJSONConfig(jsonConfigPath);
157157
Assert.AreEqual(spark.Config.Theme, Theme.Standard);
158158
Assert.AreEqual(spark.Config.DocumentTitle, "Extent Framework");
159159
Assert.AreEqual(spark.Config.Protocol, Protocol.HTTPS);
160160
}
161+
162+
[Test]
163+
public void SparkReporterTimestamp()
164+
{
165+
var extent = new ExtentReports();
166+
var spark = new ExtentSparkReporter("Index.html");
167+
extent.AttachReporter(spark);
168+
var jsonConfigPath = Path.Combine(@"../../../../", @"config/spark-config.json");
169+
spark.LoadJSONConfig(jsonConfigPath);
170+
171+
extent.CreateTest("SparkReporterTimestamp")
172+
.Pass("Passed");
173+
extent.Flush();
174+
}
161175
}
162176
}

ExtentReports/ExtentReports.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>netstandard2.0</TargetFramework>
55
<PackOnBuild>true</PackOnBuild>
66
<RootNamespace>AventStack.ExtentReports</RootNamespace>
7-
<PackageVersion>5.0.3-beta</PackageVersion>
7+
<PackageVersion>5.0.3-beta2</PackageVersion>
88
<Authors>anshooarora</Authors>
99
<Copyright>AventStack</Copyright>
1010
<PackageLicenseUrl>https://github.com/extent-framework/extentreports-csharp/blob/master/LICENSE</PackageLicenseUrl>

ExtentReports/Reporter/Config/ExtentSparkReporterConfig.cs

+15
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ public class ExtentSparkReporterConfig : InteractiveReporterConfig
1010
{
1111
private const string OfflinePackage = "extent";
1212
private const string Package = "AventStack.ExtentReports.Views.Spark.Offline";
13+
private const string DefaultTimeStampFormat = "MMM dd, yyyy HH:mm:ss";
1314
private bool _offline = false;
15+
private string _timestampFormat = DefaultTimeStampFormat;
1416

1517
internal ExtentSparkReporter Reporter { get; set; }
1618

@@ -32,6 +34,19 @@ public bool OfflineMode
3234
}
3335
}
3436

37+
[XmlElement("timeStampFormat")]
38+
public string TimeStampFormat
39+
{
40+
get
41+
{
42+
return string.IsNullOrEmpty(_timestampFormat) ? DefaultTimeStampFormat : _timestampFormat;
43+
}
44+
set
45+
{
46+
_timestampFormat = value;
47+
}
48+
}
49+
3550
public ExtentSparkReporterConfig() { }
3651

3752
[JsonConstructor]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using AventStack.ExtentReports.Model;
2+
3+
namespace AventStack.ExtentReports.Reporter.Model
4+
{
5+
public class SparkReporterTest
6+
{
7+
public SparkReporterTest(ExtentSparkReporter reporter, Test test)
8+
{
9+
Reporter = reporter;
10+
Test = test;
11+
}
12+
13+
public ExtentSparkReporter Reporter;
14+
public Test Test;
15+
}
16+
}

ExtentReports/Views/Spark/Partials/Log.cshtml

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
@using RazorEngine.Templating
66

77
@{
8-
var logs = new List<Log>(Model.Logs);
8+
var logs = Model.Test.Logs;
99
}
1010

1111
<table class="table table-sm">
@@ -16,7 +16,7 @@
1616
var status = log.Status.ToString().ToLower();
1717
<tr class="event-row">
1818
<td><span class="badge log @status-bg">@log.Status</span></td>
19-
<td>@log.Timestamp.ToShortTimeString()</td>
19+
<td>@log.Timestamp.ToString(Model.Reporter.Config.TimeStampFormat)</td>
2020
<td>
2121
@if (log.HasException)
2222
{

ExtentReports/Views/Spark/Partials/RecurseNodes.cshtml

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
@using AventStack.ExtentReports
22
@using AventStack.ExtentReports.Model
3+
@using AventStack.ExtentReports.Reporter.Model
34
@using System
45
@using RazorEngine
56
@using RazorEngine.Templating
67

7-
@if (Model.HasChildren)
8+
@if (Model.Test.HasChildren)
89
{
9-
var children = new List<Test>(Model.Children);
10+
var children = Model.Test.Children;
1011

1112
<div class="accordion">
1213
@foreach (var child in children)
@@ -48,7 +49,7 @@
4849
<div class="detail-body mt-4">
4950
@if (child.HasGeneratedLog)
5051
{
51-
var genLog = new List<Log>(child.GeneratedLog);
52+
var genLog = child.GeneratedLog;
5253
@foreach (var l in genLog)
5354
{
5455
<div>
@@ -57,7 +58,7 @@
5758
</div>
5859
}
5960
}
60-
@if (child.HasLog) { @Include("Log", child) }
61+
@if (child.HasLog) { @Include("Log", new SparkReporterTest(Model.Reporter, child)) }
6162
</div>
6263
}
6364
@foreach (var m in child.Media)
@@ -69,7 +70,8 @@
6970
}
7071
@if (child.HasChildren)
7172
{
72-
@Include("RecurseNodes", child)
73+
var reporterTest = new SparkReporterTest(Model.Reporter, child);
74+
@Include("RecurseNodes", reporterTest)
7375
}
7476
</div>
7577
}

ExtentReports/Views/Spark/Partials/SparkBDD.cshtml

+6-6
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
@using RazorEngine
55
@using RazorEngine.Templating
66

7-
@if (Model.HasChildren)
7+
@if (Model.Test.HasChildren)
88
{
9-
var children = new List<Test>(Model.Children);
10-
@Include("SparkMediaTest", Model)
9+
var children = Model.Test.Children;
10+
@Include("SparkMediaTest", Model.Test)
1111
<div class="accordion mt-4">
1212
@foreach (var node in children)
1313
{
@@ -26,7 +26,7 @@
2626
if (node.BddType.Name == "ScenarioOutline")
2727
{
2828
var css = node.Status == Status.Pass ? "collapse" : "";
29-
var scenarios = new List<Test>(node.Children);
29+
var scenarios = node.Children;
3030
<div class="scenario_outline @css">
3131
@foreach (var child in scenarios)
3232
{
@@ -43,7 +43,7 @@
4343
</div>
4444
@{
4545
css = child.Status == Status.Pass ? "collapse" : "";
46-
var steps = new List<Test>(child.Children);
46+
var steps = child.Children;
4747
}
4848
@foreach (var step in steps)
4949
{
@@ -60,7 +60,7 @@
6060
else
6161
{
6262
var css = node.Status == Status.Pass ? "collapse" : "";
63-
var steps = new List<Test>(node.Children);
63+
var steps = node.Children;
6464
<div class="@css">
6565
<div class="card-body">
6666
@Include("SparkMediaTest", node)

ExtentReports/Views/Spark/Partials/SparkStandard.cshtml

+6-6
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
@using RazorEngine
55
@using RazorEngine.Templating
66

7-
@foreach (var m in Model.Media)
7+
@foreach (var m in Model.Test.Media)
88
{
99
@Include("SparkMedia", m)
1010
}
1111

12-
@if (Model.HasAnyLog)
12+
@if (Model.Test.HasAnyLog)
1313
{
1414
<div class="detail-body mt-4">
15-
@if (Model.HasGeneratedLog)
15+
@if (Model.Test.HasGeneratedLog)
1616
{
17-
var genLog = new List<Log>(Model.GeneratedLog);
17+
var genLog = new List<Log>(Model.Test.GeneratedLog);
1818
@foreach (var l in genLog)
1919
{
2020
<div>
@@ -23,10 +23,10 @@
2323
</div>
2424
}
2525
}
26-
@if (Model.HasLog) { @Include("Log", Model) }
26+
@if (Model.Test.HasLog) { @Include("Log", Model) }
2727
</div>
2828
}
29-
@if (Model.HasChildren)
29+
@if (Model.Test.HasChildren)
3030
{
3131
<div class="mt-4">@Include("RecurseNodes", Model)</div>
3232
}

ExtentReports/Views/Spark/Partials/SparkTestSPA.cshtml

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
@using AventStack.ExtentReports
22
@using AventStack.ExtentReports.Model
3+
@using AventStack.ExtentReports.Reporter.Model
34
@using System
45
@using RazorEngine
56
@using RazorEngine.Templating
@@ -60,6 +61,7 @@
6061
<ul class="test-list-item">
6162
@foreach (var test in testList)
6263
{
64+
var reporterTest = new SparkReporterTest(Model, test);
6365
var timeTaken = Math.Round(test.TimeTaken, 2);
6466
var status = test.Status.ToString().ToLower();
6567
var authors = ""; var tags = ""; var devices = "";
@@ -82,8 +84,8 @@
8284
<div class="p-v-10">
8385
<div class="info">
8486
<h5 class="test-status text-@status">@test.Name</h5>
85-
<span class='badge badge-success'>@test.StartTime</span>
86-
<span class='badge badge-danger'>@test.EndTime</span>
87+
<span class='badge badge-success'>@test.StartTime.ToString(Model.Config.TimeStampFormat)</span>
88+
<span class='badge badge-danger'>@test.EndTime.ToString(Model.Config.TimeStampFormat)</span>
8789
<span class='badge badge-default'>@timeTaken ms</span>
8890
&middot; <span class='uri-anchor badge badge-default'>#test-id=@test.Id</span>
8991
<span title='Skip to the next failed step' class='badge badge-danger pointer float-right ne ml-1'><i class="fa fa-fast-forward"></i></span>
@@ -94,7 +96,7 @@
9496
@if (!string.IsNullOrEmpty(test.Description)) { <div class="m-t-10 m-l-5">@test.Description</div> }
9597
</div>
9698
</div>
97-
@if (isbdd) { @Include("SparkBDD", test) } else { @Include("SparkStandard", test) }
99+
@if (isbdd) { @Include("SparkBDD", reporterTest) } else { @Include("SparkStandard", reporterTest) }
98100
</div>
99101
</li>
100102
}

ExtentReports/Views/Spark/Partials/StepDetails.cshtml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
@if (Model.HasLog)
88
{
9-
var logs = new List<Log>(Model.Logs);
9+
var logs = Model.Logs;
1010
foreach (var log in logs)
1111
{
1212
<div>

config/spark-config.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"thumbnailForBase64": false,
88
"documentTitle": "Extent Framework",
99
"reportName": "ExtentReports",
10-
"timeStampFormat": "MMM dd, yyyy HH:mm:ss a",
10+
"timeStampFormat": "MMM dd, yyyy HH:mm:ss",
1111
"js": "",
1212
"css": ""
1313
}

0 commit comments

Comments
 (0)