From 36a82fbfb1fbf3b3c341f8a06081a8180f654350 Mon Sep 17 00:00:00 2001 From: anshooarora Date: Fri, 30 Oct 2020 13:51:45 -0700 Subject: [PATCH 1/8] prepare next dev iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4ac56a8..c6d78d3 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.aventstack extentreports - 5.0.4 + 5.0.5-SNAPSHOT ExtentReports www.extentreports.com From be749c521bfd1a80abbc37600391c14fcd4bb5b5 Mon Sep 17 00:00:00 2001 From: anshooarora Date: Fri, 30 Oct 2020 13:52:08 -0700 Subject: [PATCH 2/8] fixes #247 --- .../aventstack/extentreports/model/Test.java | 17 +++++++++++++++++ .../templates/spark/partials/test.ftl | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/aventstack/extentreports/model/Test.java b/src/main/java/com/aventstack/extentreports/model/Test.java index e36be5f..95b70e9 100644 --- a/src/main/java/com/aventstack/extentreports/model/Test.java +++ b/src/main/java/com/aventstack/extentreports/model/Test.java @@ -1,6 +1,8 @@ package com.aventstack.extentreports.model; import java.io.Serializable; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -11,6 +13,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TimeZone; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -169,6 +172,20 @@ public final long timeTaken() { return endTime.getTime() - startTime.getTime(); } + /** + * Time taken formatted as HH:mm:ss:SSS + * + * Solution provided by @grasshopper7 + * https://github.com/extent-framework/extentreports-java/issues/247#issuecomment-679918613 + */ + public final String timeTakenPretty() { + Date date = new Date(timeTaken()); + DateFormat formatter = new SimpleDateFormat("HH:mm:ss:SSS"); + formatter.setTimeZone(TimeZone.getTimeZone("UTC")); + String formatted = formatter.format(date); + return formatted; + } + public List aggregateExceptions() { return logs.stream() .filter(x -> x.getException() != null) diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/test.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/test.ftl index 9cdfd8d..2e33c66 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/test.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/test.ftl @@ -56,7 +56,7 @@

${test.name}

- ${test.startTime?string("HH:mm:ss a")} / ${test.timeTaken()?number_to_time?string("mm:ss:SSS")} + ${test.startTime?string("HH:mm:ss a")} / ${test.timeTakenPretty()} ${test.status}

@@ -68,7 +68,7 @@
${test.name}
${test.startTime?string("MM.dd.yyyy HH:mm:ss")} ${test.endTime?string("MM.dd.yyyy HH:mm:ss")} - ${test.timeTaken()?number_to_time?string("mm:ss:SSS")} + ${test.timeTakenPretty()} · #test-id=${test.getId()} <#if test.hasAttributes()> From 95caba9dfeb24e06a6b2ad16c7a332978a36c298 Mon Sep 17 00:00:00 2001 From: anshooarora Date: Fri, 30 Oct 2020 13:58:14 -0700 Subject: [PATCH 3/8] #247 add tests --- .../aventstack/extentreports/model/Test.java | 2 ++ .../extentreports/entity/TestEntityTest.java | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/com/aventstack/extentreports/model/Test.java b/src/main/java/com/aventstack/extentreports/model/Test.java index 95b70e9..597cb38 100644 --- a/src/main/java/com/aventstack/extentreports/model/Test.java +++ b/src/main/java/com/aventstack/extentreports/model/Test.java @@ -177,6 +177,8 @@ public final long timeTaken() { * * Solution provided by @grasshopper7 * https://github.com/extent-framework/extentreports-java/issues/247#issuecomment-679918613 + * + * @return A formatted time taken string as HH:mm:ss:SSS */ public final String timeTakenPretty() { Date date = new Date(timeTaken()); diff --git a/src/test/java/com/aventstack/extentreports/entity/TestEntityTest.java b/src/test/java/com/aventstack/extentreports/entity/TestEntityTest.java index e7d1643..5e4140b 100644 --- a/src/test/java/com/aventstack/extentreports/entity/TestEntityTest.java +++ b/src/test/java/com/aventstack/extentreports/entity/TestEntityTest.java @@ -318,4 +318,30 @@ public void timeTaken() { long duration = test.timeTaken(); Assert.assertTrue(duration < 5); } + + @org.testng.annotations.Test + public void timeTakenPretty() { + Test test = getTest(); + String duration = test.timeTakenPretty(); + String[] durationParts = duration.split(":"); + Assert.assertEquals(durationParts[0], "00"); + Assert.assertEquals(durationParts[1], "00"); + Assert.assertEquals(durationParts[2], "00"); + long millis = Integer.parseInt(durationParts[3]); + Assert.assertTrue(millis >= 0); + } + + @org.testng.annotations.Test + public void timeTakenPrettyWithLog() throws InterruptedException { + Test test = getTest(); + Thread.sleep(10); + test.addLog(Log.builder().status(Status.PASS).build()); + String duration = test.timeTakenPretty(); + String[] durationParts = duration.split(":"); + Assert.assertEquals(durationParts[0], "00"); + Assert.assertEquals(durationParts[1], "00"); + Assert.assertEquals(durationParts[2], "00"); + long millis = Integer.parseInt(durationParts[3]); + Assert.assertTrue(millis > 0); + } } From d381c0486b3ef52137fe61e3d0b79a348df03c90 Mon Sep 17 00:00:00 2001 From: anshooarora Date: Fri, 30 Oct 2020 13:59:11 -0700 Subject: [PATCH 4/8] fixes #267 --- .../offline/spark/css/spark-style.css | 2 -- .../templates/spark/macros/recurse_nodes.ftl | 2 +- .../templates/spark/partials/bdd-content.ftl | 2 +- .../config/external/JsonConfigLoaderTest.java | 4 ++-- .../config/external/XmlConfigLoaderTest.java | 2 +- .../reporter/SparkReporterConfigTest.java | 20 +++++++++---------- src/test/resources/config/spark-config.json | 4 ++-- src/test/resources/config/spark-config.xml | 2 +- 8 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/main/resources/com/aventstack/extentreports/offline/spark/css/spark-style.css b/src/main/resources/com/aventstack/extentreports/offline/spark/css/spark-style.css index a83c339..ada64a1 100644 --- a/src/main/resources/com/aventstack/extentreports/offline/spark/css/spark-style.css +++ b/src/main/resources/com/aventstack/extentreports/offline/spark/css/spark-style.css @@ -1,5 +1,3 @@ -@import url("https://fonts.googleapis.com/css?family=Roboto:400,500"); - /*! * Bootstrap v4.0.0 (https://getbootstrap.com) * Copyright 2011-2018 The Bootstrap Authors diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/macros/recurse_nodes.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/macros/recurse_nodes.ftl index aa72823..7a3ce2b 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/macros/recurse_nodes.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/macros/recurse_nodes.ftl @@ -27,7 +27,7 @@ - <#if test.hasChildren()> + <#if node.hasChildren()> <@recurse_nodes test=node /> diff --git a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/bdd-content.ftl b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/bdd-content.ftl index e2b84c6..4fdc85a 100644 --- a/src/main/resources/com/aventstack/extentreports/templates/spark/partials/bdd-content.ftl +++ b/src/main/resources/com/aventstack/extentreports/templates/spark/partials/bdd-content.ftl @@ -23,7 +23,7 @@ - <#if test.hasChildren()> + <#if node.hasChildren()> <#if node.bddType?? && node.bddType.simpleName=="ScenarioOutline">
<#list node.children as child> diff --git a/src/test/java/com/aventstack/extentreports/config/external/JsonConfigLoaderTest.java b/src/test/java/com/aventstack/extentreports/config/external/JsonConfigLoaderTest.java index e17bcac..91e36ab 100644 --- a/src/test/java/com/aventstack/extentreports/config/external/JsonConfigLoaderTest.java +++ b/src/test/java/com/aventstack/extentreports/config/external/JsonConfigLoaderTest.java @@ -22,12 +22,12 @@ public void jsonConfigTest() throws FileNotFoundException { loader.apply(); Assert.assertEquals(conf.getCss(), "css1"); Assert.assertEquals(conf.getDocumentTitle(), "Test1"); - Assert.assertEquals(conf.getEncoding(), "utf-16"); + Assert.assertEquals(conf.getEncoding(), "utf-8"); Assert.assertEquals(conf.getReportName(), "Test2"); Assert.assertEquals(conf.getTimeStampFormat(), "MMM dd, yyyy HH:mm:ss a"); Assert.assertEquals(conf.getOfflineMode().booleanValue(), true); Assert.assertEquals(conf.getProtocol(), Protocol.HTTP); - Assert.assertEquals(conf.getTheme(), Theme.DARK); + Assert.assertEquals(conf.getTheme(), Theme.STANDARD); } @Test diff --git a/src/test/java/com/aventstack/extentreports/config/external/XmlConfigLoaderTest.java b/src/test/java/com/aventstack/extentreports/config/external/XmlConfigLoaderTest.java index 477d42a..38679ea 100644 --- a/src/test/java/com/aventstack/extentreports/config/external/XmlConfigLoaderTest.java +++ b/src/test/java/com/aventstack/extentreports/config/external/XmlConfigLoaderTest.java @@ -21,7 +21,7 @@ public void xmlConfigTest() throws FileNotFoundException { new File(XML_FILE)); loader.apply(); Assert.assertEquals(conf.getCss(), "css1"); - Assert.assertEquals(conf.getDocumentTitle(), "Test1"); + Assert.assertEquals(conf.getDocumentTitle(), "Build 1"); Assert.assertEquals(conf.getEncoding(), "utf-16"); Assert.assertEquals(conf.getReportName(), "Test2"); Assert.assertEquals(conf.getTimeStampFormat(), "MMM dd, yyyy HH:mm:ss a"); diff --git a/src/test/java/com/aventstack/extentreports/reporter/SparkReporterConfigTest.java b/src/test/java/com/aventstack/extentreports/reporter/SparkReporterConfigTest.java index 7cd86d0..57d386e 100644 --- a/src/test/java/com/aventstack/extentreports/reporter/SparkReporterConfigTest.java +++ b/src/test/java/com/aventstack/extentreports/reporter/SparkReporterConfigTest.java @@ -25,9 +25,9 @@ public void configTest() { @Test public void loadJSONConfigFileTest() throws IOException { ExtentSparkReporter spark = new ExtentSparkReporter("target/spark.html"); - spark.loadJSONConfig(new File("config/spark-config.json")); + spark.loadJSONConfig(new File("src/test/resources/config/spark-config.json")); Assert.assertEquals(spark.getConf().getTheme(), Theme.STANDARD); - Assert.assertEquals(spark.getConf().getDocumentTitle(), "ExtentReports"); + Assert.assertEquals(spark.getConf().getDocumentTitle(), "Test1"); Assert.assertEquals(spark.getConf().getEncoding(), "utf-8"); } @@ -44,18 +44,18 @@ public void loadJSONConfigStringTest() throws IOException { @Test public void loadXMLConfigFileTest() throws IOException { ExtentSparkReporter spark = new ExtentSparkReporter("target/spark.html"); - spark.loadXMLConfig(new File("config/spark-config.xml")); - Assert.assertEquals(spark.getConf().getReportName(), "Build 1"); - Assert.assertEquals(spark.getConf().getDocumentTitle(), "Extent Framework"); - Assert.assertEquals(spark.getConf().getEncoding(), "UTF-8"); + spark.loadXMLConfig(new File("src/test/resources/config/spark-config.xml")); + Assert.assertEquals(spark.getConf().getReportName(), "Test2"); + Assert.assertEquals(spark.getConf().getDocumentTitle(), "Build 1"); + Assert.assertEquals(spark.getConf().getEncoding(), "utf-16"); } @Test public void loadXMLConfigPathTest() throws IOException { ExtentSparkReporter spark = new ExtentSparkReporter("target/spark.html"); - spark.loadXMLConfig("config/spark-config.xml"); - Assert.assertEquals(spark.getConf().getReportName(), "Build 1"); - Assert.assertEquals(spark.getConf().getDocumentTitle(), "Extent Framework"); - Assert.assertEquals(spark.getConf().getEncoding(), "UTF-8"); + spark.loadXMLConfig("src/test/resources/config/spark-config.xml"); + Assert.assertEquals(spark.getConf().getReportName(), "Test2"); + Assert.assertEquals(spark.getConf().getDocumentTitle(), "Build 1"); + Assert.assertEquals(spark.getConf().getEncoding(), "utf-16"); } } diff --git a/src/test/resources/config/spark-config.json b/src/test/resources/config/spark-config.json index c66c995..6e3e12d 100644 --- a/src/test/resources/config/spark-config.json +++ b/src/test/resources/config/spark-config.json @@ -1,6 +1,6 @@ { - "theme": "DARK", - "encoding": "utf-16", + "theme": "standard", + "encoding": "utf-8", "protocol": "HTTP", "timelineEnabled": true, "offlineMode": true, diff --git a/src/test/resources/config/spark-config.xml b/src/test/resources/config/spark-config.xml index d629023..f6a259f 100644 --- a/src/test/resources/config/spark-config.xml +++ b/src/test/resources/config/spark-config.xml @@ -22,7 +22,7 @@ true - Test1 + Build 1 Test2 From db0a70e4d0606700d7f7de7c091377300b465d92 Mon Sep 17 00:00:00 2001 From: anshooarora Date: Fri, 30 Oct 2020 17:20:02 -0700 Subject: [PATCH 5/8] fixes #259 --- .../aventstack/extentreports/reporter/AbstractFileReporter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/aventstack/extentreports/reporter/AbstractFileReporter.java b/src/main/java/com/aventstack/extentreports/reporter/AbstractFileReporter.java index 13f7a58..8f6d48d 100644 --- a/src/main/java/com/aventstack/extentreports/reporter/AbstractFileReporter.java +++ b/src/main/java/com/aventstack/extentreports/reporter/AbstractFileReporter.java @@ -42,7 +42,7 @@ protected AbstractFileReporter(File f) { } else { parentFile = f.getParentFile(); } - if (!parentFile.exists()) + if (parentFile != null && !parentFile.exists()) parentFile.mkdirs(); } From d3afcb5a049390f0cdd753bc681b16f4b696840b Mon Sep 17 00:00:00 2001 From: Anshoo Arora Date: Sun, 1 Nov 2020 15:11:23 -0800 Subject: [PATCH 6/8] Update Readme.md --- Readme.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index cc2519a..1baf4d1 100644 --- a/Readme.md +++ b/Readme.md @@ -2,8 +2,7 @@ ### Documentation ### -* Documentation (still in progress) for ExtentReports 5.x is hosted on GitHub at [ExtentReports Wiki](https://github.com/extent-framework/extentreports-java/wiki). -* For versions 4 and below, visit [extentreports.com](http://extentreports.com/). +Documentation for ExtentReports 5.x and lower versions is hosted on [ExtentReports.com](http://extentreports.com) ### Samples ### From fc17baf569badd9c1d7b060ae011746d019c20e2 Mon Sep 17 00:00:00 2001 From: anshooarora Date: Mon, 16 Nov 2020 14:31:01 -0800 Subject: [PATCH 7/8] closes #269 --- reporters/klov/config/klov.properties | 8 +++++++ .../reporter/ExtentKlovReporter.java | 23 ++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 reporters/klov/config/klov.properties diff --git a/reporters/klov/config/klov.properties b/reporters/klov/config/klov.properties new file mode 100644 index 0000000..1999846 --- /dev/null +++ b/reporters/klov/config/klov.properties @@ -0,0 +1,8 @@ +mongodb.host=localhost +mongodb.port=27017 +mongodb.uri= +database.name=DatabaseName +klov.host=http://localhost +klov.port=80 +klov.project.name=KlovReporter +klov.report.name= \ No newline at end of file diff --git a/reporters/klov/src/main/java/com/aventstack/extentreports/reporter/ExtentKlovReporter.java b/reporters/klov/src/main/java/com/aventstack/extentreports/reporter/ExtentKlovReporter.java index 2ef048e..cfc573f 100644 --- a/reporters/klov/src/main/java/com/aventstack/extentreports/reporter/ExtentKlovReporter.java +++ b/reporters/klov/src/main/java/com/aventstack/extentreports/reporter/ExtentKlovReporter.java @@ -77,13 +77,15 @@ public class ExtentKlovReporter extends AbstractReporter private static final String DEFAULT_MONGODB_HOST_PROP = "mongodb.host"; private static final String DEFAULT_MONGODB_PORT_PROP = "mongodb.port"; private static final String DEFAULT_MONGODB_URI_PROP = "mongodb.uri"; + private static final String DEFAULT_DATABASE_NAME_PROP = "database.name"; private static final String DEFAULT_KLOV_HOST_PROP = "klov.host"; private static final String DEFAULT_KLOV_PORT_PROP = "klov.port"; - private static final String DB_NAME = "klov"; private static final String DEFAULT_PROJECT_NAME = "Default"; - + private static final String DB_NAME = "klov"; + private final AtomicBoolean initiated = new AtomicBoolean(); + private String databaseName = DB_NAME; private String url; private Boolean appendExisting = false; @@ -283,6 +285,17 @@ public ExtentKlovReporter initKlovServerConnection(String url) { this.url = url; return this; } + + /** + * Specify a database name instead of default: "Klov" + * + * @param name Name of the database + * @return a {@link ExtentKlovReporter} object + */ + public ExtentKlovReporter setDatabaseName(String name) { + databaseName = name; + return this; + } /** * Initializes KlovReporter with default Klov and MongoDB settings. This @@ -312,6 +325,10 @@ private Properties loadProperties(InputStream is) throws IOException { } private void loadInitializationParams(Properties props) { + String databaseName = props.getProperty(DEFAULT_DATABASE_NAME_PROP); + if (databaseName != null && !databaseName.isEmpty()) + this.databaseName = databaseName; + String mongoUri = props.getProperty(DEFAULT_MONGODB_URI_PROP); String mongoHost = props.getProperty(DEFAULT_MONGODB_HOST_PROP); String mongoPort = props.getProperty(DEFAULT_MONGODB_PORT_PROP); @@ -800,7 +817,7 @@ public void onComplete() { private final void start() { CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(MongoClient.getDefaultCodecRegistry(), CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build())); - MongoDatabase db = mongoClient.getDatabase(DB_NAME).withCodecRegistry(pojoCodecRegistry); + MongoDatabase db = mongoClient.getDatabase(databaseName).withCodecRegistry(pojoCodecRegistry); initCollections(db); setupProject(); } From a10d77789e93e60618f36212b1cd1440e91cefec Mon Sep 17 00:00:00 2001 From: anshooarora Date: Mon, 16 Nov 2020 14:52:48 -0800 Subject: [PATCH 8/8] prepare release 5.0.5 --- CHANGELOG.md | 10 ++++++++++ pom.xml | 2 +- reporters/klov/pom.xml | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d438771..f3f747f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## [5.0.5](https://github.com/extent-framework/extentreports-java/compare/v5.0.4...v5.0.5) + +#### Issues Resolved +- [#247](/issues/247) Spark Report - Wrong test durations displayed in tests tab +- [#259](/issues/259) ExtentSparkReporter constructor throws NullPointerException if path argument don`t contains parrent fodler +- [#267](/issues/267) Spark-css.css uses a googleapis.com import causing offline reports to attempt external connection + +#### New Features +- [#269](/issues/269) KlovReporter: provide ability to specify a database name + ## [5.0.4](https://github.com/extent-framework/extentreports-java/compare/v5.0.3...v5.0.4) #### Issues Resolved diff --git a/pom.xml b/pom.xml index c6d78d3..f47a095 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.aventstack extentreports - 5.0.5-SNAPSHOT + 5.0.5 ExtentReports www.extentreports.com diff --git a/reporters/klov/pom.xml b/reporters/klov/pom.xml index 1e4d842..208aea2 100644 --- a/reporters/klov/pom.xml +++ b/reporters/klov/pom.xml @@ -5,7 +5,7 @@ com.aventstack klov-reporter - 5.0.4 + 5.0.5 klov-reporter www.extentreports.com Reporter for Klov Server @@ -43,7 +43,7 @@ com.aventstack extentreports - 5.0.4 + 5.0.5 org.mongodb