This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-161
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-161 by this push:
new 5a8c370 FREEMARKER-161 [freemarker-generator] Update JavaFaker
documentation
5a8c370 is described below
commit 5a8c370770f2d274bac81796b9cd70c60ecb2097
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Thu Jan 7 21:31:52 2021 +0100
FREEMARKER-161 [freemarker-generator] Update JavaFaker documentation
---
.../examples/templates/javafaker/csv/testdata.ftl | 16 +++++---
.../src/app/scripts/run-examples.bat | 2 +-
.../src/app/scripts/run-examples.sh | 2 +-
.../site/markdown/cli/usage/generating-testdata.md | 44 ++++++++++++----------
4 files changed, 37 insertions(+), 27 deletions(-)
diff --git
a/freemarker-generator-cli/src/app/examples/templates/javafaker/csv/testdata.ftl
b/freemarker-generator-cli/src/app/examples/templates/javafaker/csv/testdata.ftl
index 357a3ae..1976644 100644
---
a/freemarker-generator-cli/src/app/examples/templates/javafaker/csv/testdata.ftl
+++
b/freemarker-generator-cli/src/app/examples/templates/javafaker/csv/testdata.ftl
@@ -14,8 +14,9 @@
specific language governing permissions and limitations
under the License.
-->
-<#assign faker = tools.javafaker.faker>
-<#assign nrOfRecords = tools.system.getString("NR_OF_RECORDS","10")>
+<#-- Get a localized JavaFaker instance -->
+<#assign faker = tools.javafaker.getFaker("de_DE")>
+<#assign nrOfRecords = tools.system.getString("NR_OF_RECORDS","100")>
<#assign days = tools.javafaker.timeUnits["DAYS"]>
<#assign csvTargetFormat =
tools.csv.formats["DEFAULT"].withFirstRecordAsHeader()>
<#assign csvPrinter = tools.csv.printer(csvTargetFormat)>
@@ -24,15 +25,18 @@
<#if csvTargetFormat.getSkipHeaderRecord()>
${csvPrinter.printRecord(csvHeaders)}<#t>
</#if>
- <#list 1..nrOfRecords?number as i>
- <#assign id = tools.uuid.randomUUID()>
+ <#list 0..nrOfRecords?number as i>
+ <#-- Generate a reproducable id to allow re-importing of test data -->
+ <#assign id = tools.uuid.namedUUID("trxid-" + i?string)>
<#assign customerId = faker.bothify("?#######")>
<#assign firstName = faker.name().firstName()>
<#assign lastName = faker.name().lastName()>
- <#assign email = firstName + "." + lastName + "@gmail.com">
+ <#assign email = firstName + "." + lastName + "@server.invalid">
+ <#-- JavaFakers IBAN generation is really slow -->
<#assign iban = faker.finance().iban("DE")>
-
+ <#-- Distribute the creation date up to 10 years in the past -->
<#assign createAt = faker.date().past(3650, days)>
+ <#-- Use a CSV Printer to properly escape the output -->
${csvPrinter.printRecord(
id,
customerId,
diff --git a/freemarker-generator-cli/src/app/scripts/run-examples.bat
b/freemarker-generator-cli/src/app/scripts/run-examples.bat
index 4bb5e5e..6ef6f9a 100644
--- a/freemarker-generator-cli/src/app/scripts/run-examples.bat
+++ b/freemarker-generator-cli/src/app/scripts/run-examples.bat
@@ -130,7 +130,7 @@ REM
=========================================================================
REM Java Faker
REM =========================================================================
echo "examples/templates/javafaker/csv/testdata.ftl"
-%FREEMARKER_CMD% -t examples/templates/javafaker/csv/testdata.ftl >
target/out/testdata.csv
+%FREEMARKER_CMD% -DNR_OF_RECORDS=10 -t
examples/templates/javafaker/csv/testdata.ftl > target/out/testdata.csv
REM =========================================================================
REM JSON
diff --git a/freemarker-generator-cli/src/app/scripts/run-examples.sh
b/freemarker-generator-cli/src/app/scripts/run-examples.sh
index 316a098..034774f 100755
--- a/freemarker-generator-cli/src/app/scripts/run-examples.sh
+++ b/freemarker-generator-cli/src/app/scripts/run-examples.sh
@@ -151,7 +151,7 @@ $FREEMARKER_CMD -t examples/templates/html/txt/licence.ftl
examples/data/html/de
#############################################################################
echo "examples/templates/javafaker/csv/testdata.ftl"
-$FREEMARKER_CMD -t examples/templates/javafaker/csv/testdata.ftl >
target/out/testdata.csv || { echo >&2 "Test failed. Aborting."; exit 1; }
+$FREEMARKER_CMD -DNR_OF_RECORDS=10 -t
examples/templates/javafaker/csv/testdata.ftl > target/out/testdata.csv || {
echo >&2 "Test failed. Aborting."; exit 1; }
#############################################################################
# JSON
diff --git
a/freemarker-generator-cli/src/site/markdown/cli/usage/generating-testdata.md
b/freemarker-generator-cli/src/site/markdown/cli/usage/generating-testdata.md
index 33e2fc7..4019eba 100644
---
a/freemarker-generator-cli/src/site/markdown/cli/usage/generating-testdata.md
+++
b/freemarker-generator-cli/src/site/markdown/cli/usage/generating-testdata.md
@@ -5,30 +5,32 @@ The generation of test data is supported by [Java
Faker](https://github.com/DiUS
Let's assume that you need to populate a user table based on a CSV file with
random data
```
-freemarker-generator -DNR_OF_RECORDS=10 -t
src/app/examples/templates/javafaker/csv/testdata.ftl
+freemarker-generator -DNR_OF_RECORDS=10 -t
examples/templates/javafaker/csv/testdata.ftl; echo
```
will generate
```
ID,CUSTOMER_ID,FIRST_NAME,LAST_NAME,EMAIL,IBAN,CREATED_AT
-5c3dbf2b-2957-41fe-8566-e16c91d6bba7,e6044780,Audrey,Ryan,[email protected],DE69137185182464804325,2016-07-25T03:06:54+02:00
-34671167-92f8-46e3-874b-d488960eb320,z8394366,Herb,Lehner,[email protected],DE32993443443552974345,2019-10-11T23:27:32+02:00
-479855f6-cc98-4c46-99e4-b1d38d35a7b2,x8937857,Kirby,Wilkinson,[email protected],DE12566901129220359287,2020-04-12T04:49:00+02:00
-1a3c51b9-d168-4c0a-84ae-05e79cd181b1,t3486957,Charmaine,Bergstrom,[email protected],DE98964063811726229158,2015-07-24T23:19:19+02:00
-43b9f7ad-1aec-44ff-b3c1-de7688b5a729,z9190225,Sterling,Glover,[email protected],DE47207633748672977993,2019-11-04T04:45:06+01:00
-34ce2c9f-e5bb-44f4-a71f-40b0dfa8d0bf,a4406167,George,Marquardt,[email protected],DE79342449317255392445,2016-05-15T16:33:05+02:00
-1f9bbc16-8b17-4947-ab50-4abf6aa4cc46,s6438445,Arnoldo,Herzog,[email protected],DE20421444995381411375,2013-10-12T07:01:01+02:00
-30e3f7a2-7fe8-4ebf-b46b-4f59ab62ba45,o9507275,Nickie,Predovic,[email protected],DE06666930299990216198,2019-08-01T10:51:51+02:00
-f703e93e-7bc3-42c9-a7f5-f1db84d32fd1,z8385157,Clinton,Murphy,[email protected],DE27305002168865903990,2018-04-01T19:03:55+02:00
-7f6a8d29-2dfc-4467-b366-25b46aa5bc32,x5244747,Johnson,Blanda,[email protected],DE83757301199253406795,2012-06-23T18:04:38+02:00
+ec48407f-b74b-3255-aa23-c478b97fe6a0,k1627756,Finnja,Huebel,[email protected],DE34649925979537623502,2019-02-02T06:19:32+01:00
+4386bbd1-f410-310f-9961-3e8b2bdfb158,k2697194,Catharina,Ruckdeschel,[email protected],DE20946378663346781874,2016-01-08T21:31:30+01:00
+5225a437-a981-33f8-be17-4520d1656357,i2477693,Efe,Grün,efe.grü[email protected],DE72530958450307406958,2014-01-27T19:33:54+01:00
+f3d7cbd6-b7ba-3709-97e3-a0f8c66f3a61,h1789606,Adriano,Walz,[email protected],DE91943313948716057559,2019-01-06T18:57:24+01:00
+3b43d134-8342-322d-8814-2efb8d2525af,x9067951,Denny,Kleininger,[email protected],DE60996500459835447795,2014-10-30T19:07:59+01:00
+0f145471-293f-32c4-8dd2-9be95540e5f6,k9415677,Silas,Bönisch,silas.bö[email protected],DE53857572315572131803,2014-07-15T15:33:06+02:00
+ec0a21b7-106b-3983-8b19-03bf91f5fa33,a0190000,Ceyda,Schäffel,ceyda.schä[email protected],DE83184389823488369676,2020-07-28T21:16:33+02:00
+9c0d0feb-dd08-3cbd-875e-ea9f072d1a96,w7084669,Wilhelm,Burmeister,[email protected],DE89066581983817613534,2017-09-26T04:01:56+02:00
+76f770a9-4008-317e-800f-6c203dd363d8,f7683995,Madlen,Knobel,[email protected],DE82012476109671707669,2018-07-08T05:52:25+02:00
+6ecf87f6-6a46-3f06-9482-ab2ffe696c41,y8814536,Jessica,Koubaa,[email protected],DE79396597066674926625,2019-10-12T23:55:02+02:00
+4a72d322-55db-35ee-b47e-c484d29b5760,v1849194,Jesper,Hildenbrand,[email protected],DE60616233632021309556,2015-03-09T01:37:18+01:00
```
using the following FreeMarker template
```
-<#assign faker = tools.javafaker.faker>
-<#assign nrOfRecords = tools.system.getString("NR_OF_RECORDS","10")>
+<#-- Get a localized JavaFaker instance -->
+<#assign faker = tools.javafaker.getFaker("de_DE")>
+<#assign nrOfRecords = tools.system.getString("NR_OF_RECORDS","100")>
<#assign days = tools.javafaker.timeUnits["DAYS"]>
<#assign csvTargetFormat =
tools.csv.formats["DEFAULT"].withFirstRecordAsHeader()>
<#assign csvPrinter = tools.csv.printer(csvTargetFormat)>
@@ -37,15 +39,18 @@ using the following FreeMarker template
<#if csvTargetFormat.getSkipHeaderRecord()>
${csvPrinter.printRecord(csvHeaders)}<#t>
</#if>
- <#list 1..nrOfRecords?number as i>
- <#assign id = tools.uuid.randomUUID()>
+ <#list 0..nrOfRecords?number as i>
+ <#-- Generate a reproducable id to allow re-importing of test data -->
+ <#assign id = tools.uuid.namedUUID("trxid-" + i?string)>
<#assign customerId = faker.bothify("?#######")>
<#assign firstName = faker.name().firstName()>
<#assign lastName = faker.name().lastName()>
- <#assign email = firstName + "." + lastName + "@gmail.com">
+ <#assign email = firstName + "." + lastName + "@server.invalid">
+ <#-- JavaFakers IBAN generation is really slow -->
<#assign iban = faker.finance().iban("DE")>
-
+ <#-- Distribute the creation date up to 10 years in the past -->
<#assign createAt = faker.date().past(3650, days)>
+ <#-- Use a CSV Printer to properly escape the output -->
${csvPrinter.printRecord(
id,
customerId,
@@ -61,6 +66,7 @@ using the following FreeMarker template
Some thoughts along the line
* [Java Faker](https://github.com/DiUS/java-faker) does not create coherent
test data, e.g. each invocation of "name" creates a new random name - hence we
create the email address ourselves
-* The created IBAN does not use a valid bank code but structure and checksum
is correct
+* The created IBAN does not use a valid bank code but structure and checksum
is correct (albeit slow)
* The "createdAt" generates a creation date from the last 10 years to have
some proper distribution
-* See [A Guide to JavaFaker](https://www.baeldung.com/java-faker) for a quick
overview
\ No newline at end of file
+* See [A Guide to JavaFaker](https://www.baeldung.com/java-faker) for a quick
overview
+* A CSV Printer is used to properly escape the generated fields (in case they
contain a CSV separator)
\ No newline at end of file