This is an automated email from the ASF dual-hosted git repository.
aleks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 235dfa873 FINERACT-1607: Improve documentation on Cucumber usage
235dfa873 is described below
commit 235dfa8738962755ae892cf131b54e62ed5dc169
Author: Aleks <[email protected]>
AuthorDate: Wed May 11 01:53:23 2022 +0200
FINERACT-1607: Improve documentation on Cucumber usage
---
build.gradle | 29 +++++-
.../src/docs/en/chapters/release/index.adoc | 2 +
.../src/docs/en/chapters/release/publish.adoc | 32 ++++++
.../en/chapters/testing/cucumber-cheatsheet.adoc | 110 ++++++++++++++++++++-
.../en/chapters/testing/cucumber-introduction.adoc | 3 -
.../en/chapters/testing/cucumber-tutorial.adoc | 3 -
.../src/docs/en/chapters/testing/cucumber.adoc | 4 -
fineract-doc/src/docs/en/index.adoc | 8 +-
fineract-provider/build.gradle | 5 +-
.../features/accounting/accounting.common.feature | 19 ++++
.../resources/features/batch/batch.builder.feature | 19 ++++
.../features/commands/commands.provider.feature | 19 ++++
.../infrastructure.classpath.feature | 19 ++++
.../infrastructure/infrastructure.core.feature | 19 ++++
.../infrastructure.security.utils.feature | 19 ++++
.../infrastructure.sqlbuilder.feature | 19 ++++
.../test/resources/features/mix/mix.report.feature | 19 ++++
.../features/module/modules.example.feature | 19 ++++
.../features/module/modules.service.feature | 19 ++++
.../portfolio/loanproduct.validation.feature | 19 ++++
.../features/template/template.service.feature | 19 ++++
gradle.properties | 1 +
22 files changed, 403 insertions(+), 22 deletions(-)
diff --git a/build.gradle b/build.gradle
index 5a1042533..03a22692b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -96,8 +96,7 @@ allprojects {
jgitver {
strategy 'PATTERN'
- versionPattern '${M}.${m}.${p}-${meta.GIT_SHA1_8}'
- // versionPattern '${v}'
+ versionPattern ( project.hasProperty('fineract.release.version') ?
'${v}' : '${M}.${m}.${p}-${meta.GIT_SHA1_8}' )
}
repositories {
@@ -265,6 +264,7 @@ configure(project.fineractJavaProjects) {
apply plugin: 'se.thinkcode.cucumber-runner'
apply from:
"${rootDir}/buildSrc/src/main/groovy/org.apache.fineract.dependencies.gradle"
+ group = 'org.apache.fineract'
/* define the valid syntax level for source files */
sourceCompatibility = JavaVersion.VERSION_17
@@ -590,10 +590,15 @@ configure(project.fineractJavaProjects) {
configure(project.fineractPublishProjects) {
apply plugin: 'maven-publish'
+ apply plugin: 'signing'
publishing {
publications {
mavenJava(MavenPublication) {
+ groupId 'org.apache.fineract'
+ artifactId project.name
+ version "${project.version}-SNAPSHOT"
+
from components.java
versionMapping {
@@ -606,7 +611,7 @@ configure(project.fineractPublishProjects) {
}
pom {
- name = 'Fineract'
+ name = "Fineract: ${project.name}"
description = 'A secure, multi-tenanted microfinance
platform'
url = 'https://fineract.apache.org'
licenses {
@@ -624,7 +629,23 @@ configure(project.fineractPublishProjects) {
}
}
- // TODO FINERACT-1102: Actually use this to deploy to ASF (Apache
Software Foundation) Nexus Maven Repository
+ repositories {
+ def releaseUrl =
'https://repository.apache.org/content/repositories/releases'
+ def stagingUrl =
'https://repository.apache.org/content/repositories/snapshots'
+
+ maven {
+ name 'apache'
+ url hasProperty('fineract.release.version') ? releaseUrl :
stagingUrl
+ credentials {
+ username "${findProperty('fineract.config.username')}"
+ password "${findProperty('fineract.config.password')}"
+ }
+ }
+ }
+ }
+
+ signing {
+ sign publishing.publications.mavenJava
}
}
diff --git a/fineract-doc/src/docs/en/chapters/release/index.adoc
b/fineract-doc/src/docs/en/chapters/release/index.adoc
index 8bbfe89e5..d8efa23f3 100644
--- a/fineract-doc/src/docs/en/chapters/release/index.adoc
+++ b/fineract-doc/src/docs/en/chapters/release/index.adoc
@@ -11,3 +11,5 @@ include::{diagramsdir}/release-schedule.puml[]
include::configuration.adoc[leveloffset=+1]
include::process.adoc[leveloffset=+1]
+
+include::publish.adoc[leveloffset=+1]
diff --git a/fineract-doc/src/docs/en/chapters/release/publish.adoc
b/fineract-doc/src/docs/en/chapters/release/publish.adoc
new file mode 100644
index 000000000..609bdcbc1
--- /dev/null
+++ b/fineract-doc/src/docs/en/chapters/release/publish.adoc
@@ -0,0 +1,32 @@
+= Publish Release Artifacts
+
+NOTE: More on releases at the ASF see
https://www.apache.org/legal/release-policy.html#distribute-raw-artifact
+
+== Requirements
+
+You need to have your GPG keypairs properly set up. The JAR release artifacts
(currently only `fineract-client`) are signed with a Gradle plugin just before
being uploaded to the Maven repository. Please make sure that the following
properties are set in your private `gradle.properties` file in your home folder:
+
+[source,properties]
+----
+signing.keyId=7890ABCD
+signing.password=*****
+signing.secretKeyRingFile=~/.gnupg/secring.gpg
+----
+
+This is quite similiar to the Fineract release plugin properties for GPG. In
one of the next release we'll merge these two setups to avoid this duplicated
configuration.
+
+== Maven Repository
+
+We are using the ASF's official https://repository.apache.org[Nexus Maven
repository] to publish our snapshot and release artifacts.
+
+NOTE: Find more information at
https://infra.apache.org/publishing-maven-artifacts.html
+
+== NPM Registry
+
+For convenience we will be using Github Packages to publish Fineract's
Typescript API client.
+
+TBD
+
+== Docker Hub
+
+TBD
diff --git a/fineract-doc/src/docs/en/chapters/testing/cucumber-cheatsheet.adoc
b/fineract-doc/src/docs/en/chapters/testing/cucumber-cheatsheet.adoc
index 4a2888a05..ec246d7f9 100644
--- a/fineract-doc/src/docs/en/chapters/testing/cucumber-cheatsheet.adoc
+++ b/fineract-doc/src/docs/en/chapters/testing/cucumber-cheatsheet.adoc
@@ -1,3 +1,109 @@
-= Cheatsheet
+= Cucumber Cheatsheet
-TBD
\ No newline at end of file
+Cucumber is a test framework based on Behavior-Driven Development (BDD). Tests
are written in plain text with very basic syntax rules. These rules form a mini
language that is called Gherkin.
+
+A specification resembles spoken language. This makes it ideal for use with
non-technical people that have domain specific knowledge. The emphasis of
Cucumber lies on finding examples to describe your test cases. The few keywords
and language rules are easy to explain to anyone (compared JUnit for example).
+
+== Keywords
+
+The Gherkin language has the following keywords:
+
+* `Feature`
+* `Rule`
+* `Scenario Outline` or `Scenario Template`
+* `Example` or `Scenario`
+* `Examples` or `Scenarios`
+* `Background`
+* `Given`
+* `And`
+* `But`
+* `When`
+* `Then`
+
+There are a couple of additional signs used in Gherkin:
+
+* `|` is as column delimiters in `Examples` tables
+* with `@` you can assign any kind of tags to categorize the specs (or e.g.
relate them to certain Jira tickets)
+* `#` is used to indicate line comments
+
+IMPORTANT: The tag `@ignore` is used to skip tests. This is a somewhat
arbitrary choice (we could use any other tag to indicate temporarily disabled
tests).
+
+Each non-empty line of a test specification needs to start with one of these
keywords. The text blocks that follows the keywords are mapped to so called
step definitions that contain the actual test code.
+
+A typical Cucumber test specification written in Gherkin looks like this:
+
+[source,gherkin,subs="attributes+,+macros"]
+----
+include::{rootdir}/fineract-provider/src/test/resources/features/template/template.service.feature[lines=19..]
+----
+
+The corresponding step definitions would look like this:
+
+[source,java,subs="attributes+,+macros"]
+----
+include::{rootdir}/fineract-provider/src/test/java/org/apache/fineract/template/service/TemplateServiceStepDefinitions.java[lines=19..]
+----
+
+NOTE: This example is an actual test specification that you can find in the
`fineract-provider` module.
+
+=== Feature
+
+This keyword is used to group scenarios and to group related scenarios. All
Gherkin specifications must start with the word `Feature`.
+
+=== Descriptions
+
+A description is any non-empty line that doesn't start with a keyword.
Descriptions can be placed under the keywords:
+
+* `Feature`
+* `Rule`
+* `Background`
+* `Example`/`Scenario`
+* `Scenario Outline`
+
+=== Rule
+
+Rule is used to group multiple related scenarios together.
+
+=== Example/Scenario
+
+This is the important part of the specification as it should describe the
business logic in more detail with the usage of steps (usually `Given`, `When`,
`Then`)
+
+=== Steps
+
+TBD
+
+=== Given
+
+TBD
+
+=== When
+
+TBD
+
+=== Then
+
+TBD
+
+=== And, But
+
+TBD
+
+=== Background
+
+TBD
+
+=== Scenario Outline
+
+TBD
+
+=== Examples/Tables
+
+TBD
+
+== Outlook
+
+As a proof of concept we've converted all unit tests in `fineract-provider`
into Cucumber tests. The more interesting part starts when we'll attack the
integration tests with over 400 mostly business logic related tests. These
tests fit very well in Cucumber's test specification structure (a lot of
_if-then-else_ or in Gherkin: _Given-When-Then_). Migrating all tests will take
a while, but we would already recommend trying to implement tests as Cucumber
specifications. It should be relat [...]
+
+Hopefully this will motivate even more people from the broader Fineract
community to participate in the project by sharing their domain specific
knowledge as Cucumber specifications. Specifications are written in Englisch
(although not a technical requirement).
+
+NOTE: Have a look at the specifications in `fineract-provider` for an initial
inspiration. For more information please see https://cucumber.io/docs
\ No newline at end of file
diff --git
a/fineract-doc/src/docs/en/chapters/testing/cucumber-introduction.adoc
b/fineract-doc/src/docs/en/chapters/testing/cucumber-introduction.adoc
deleted file mode 100644
index 42839e88a..000000000
--- a/fineract-doc/src/docs/en/chapters/testing/cucumber-introduction.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-= Introduction
-
-TBD
\ No newline at end of file
diff --git a/fineract-doc/src/docs/en/chapters/testing/cucumber-tutorial.adoc
b/fineract-doc/src/docs/en/chapters/testing/cucumber-tutorial.adoc
deleted file mode 100644
index 912dad8a5..000000000
--- a/fineract-doc/src/docs/en/chapters/testing/cucumber-tutorial.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-= Tutorial
-
-TBD
\ No newline at end of file
diff --git a/fineract-doc/src/docs/en/chapters/testing/cucumber.adoc
b/fineract-doc/src/docs/en/chapters/testing/cucumber.adoc
index 90c356bb4..272fc8953 100644
--- a/fineract-doc/src/docs/en/chapters/testing/cucumber.adoc
+++ b/fineract-doc/src/docs/en/chapters/testing/cucumber.adoc
@@ -3,8 +3,4 @@
TBD
-include::cucumber-introduction.adoc[leveloffset=+1]
-
-include::cucumber-tutorial.adoc[leveloffset=+1]
-
include::cucumber-cheatsheet.adoc[leveloffset=+1]
diff --git a/fineract-doc/src/docs/en/index.adoc
b/fineract-doc/src/docs/en/index.adoc
index d030fbd32..c68bd3dd3 100644
--- a/fineract-doc/src/docs/en/index.adoc
+++ b/fineract-doc/src/docs/en/index.adoc
@@ -39,16 +39,16 @@ include::chapters/development/index.adoc[leveloffset=+1]
include::chapters/security/index.adoc[leveloffset=+1]
-include::{rootdir}/fineract-client/build/generated/asciidoc/index.adoc[leveloffset=+1]
-
-include::chapters/sdk/index.adoc[leveloffset=+1]
-
include::chapters/testing/index.adoc[leveloffset=+1]
include::chapters/documentation/index.adoc[leveloffset=+1]
include::chapters/release/index.adoc[leveloffset=+1]
+include::chapters/sdk/index.adoc[leveloffset=+1]
+
+include::{rootdir}/fineract-client/build/generated/asciidoc/index.adoc[leveloffset=+1]
+
include::faq.adoc[leveloffset=+1]
include::glossary.adoc[leveloffset=+1]
diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle
index 84ac3e8fa..1d8f96ab7 100644
--- a/fineract-provider/build.gradle
+++ b/fineract-provider/build.gradle
@@ -51,11 +51,11 @@ compileJava.doLast {
import org.apache.tools.ant.filters.ReplaceTokens
task prepareInputYaml {
- outputs.file('config/swagger/fineract-input.yaml')
+ outputs.file("${buildDir}/tmp/swagger/fineract-input.yaml")
doLast {
copy {
- from file('config/swagger/fineract-input.yaml.template')
+ from
file("${projectDir}/config/swagger/fineract-input.yaml.template")
into file("${buildDir}/tmp/swagger")
rename { String filename -> return 'fineract-input.yaml' }
filter(ReplaceTokens, tokens: [VERSION:
"${project.version}".toString()])
@@ -323,6 +323,7 @@ jar.dependsOn resolve
test.dependsOn resolve
checkstyleMain.dependsOn resolve
checkstyleTest.dependsOn resolve
+rat.dependsOn prepareInputYaml
spotbugsTest.dependsOn resolve
compileTestJava.dependsOn ':fineract-client:processResources'
bootJarMainClassName.dependsOn resolve
diff --git
a/fineract-provider/src/test/resources/features/accounting/accounting.common.feature
b/fineract-provider/src/test/resources/features/accounting/accounting.common.feature
index ec58e7a1e..9589b179f 100644
---
a/fineract-provider/src/test/resources/features/accounting/accounting.common.feature
+++
b/fineract-provider/src/test/resources/features/accounting/accounting.common.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Accounting Service
@accounting
diff --git
a/fineract-provider/src/test/resources/features/batch/batch.builder.feature
b/fineract-provider/src/test/resources/features/batch/batch.builder.feature
index 6c84197e8..62dfec23c 100644
--- a/fineract-provider/src/test/resources/features/batch/batch.builder.feature
+++ b/fineract-provider/src/test/resources/features/batch/batch.builder.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Batch Service
@batch
diff --git
a/fineract-provider/src/test/resources/features/commands/commands.provider.feature
b/fineract-provider/src/test/resources/features/commands/commands.provider.feature
index 450134514..34fb1518e 100644
---
a/fineract-provider/src/test/resources/features/commands/commands.provider.feature
+++
b/fineract-provider/src/test/resources/features/commands/commands.provider.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Commands Service
@template
diff --git
a/fineract-provider/src/test/resources/features/infrastructure/infrastructure.classpath.feature
b/fineract-provider/src/test/resources/features/infrastructure/infrastructure.classpath.feature
index 8ee4b9b97..6a03cccfa 100644
---
a/fineract-provider/src/test/resources/features/infrastructure/infrastructure.classpath.feature
+++
b/fineract-provider/src/test/resources/features/infrastructure/infrastructure.classpath.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Classpath duplicates
@infrastructure
diff --git
a/fineract-provider/src/test/resources/features/infrastructure/infrastructure.core.feature
b/fineract-provider/src/test/resources/features/infrastructure/infrastructure.core.feature
index e78bd0e76..a7ebd8279 100644
---
a/fineract-provider/src/test/resources/features/infrastructure/infrastructure.core.feature
+++
b/fineract-provider/src/test/resources/features/infrastructure/infrastructure.core.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Core Infrastructure
@infrastructure
diff --git
a/fineract-provider/src/test/resources/features/infrastructure/infrastructure.security.utils.feature
b/fineract-provider/src/test/resources/features/infrastructure/infrastructure.security.utils.feature
index c144e4ae9..ad11f3f0e 100644
---
a/fineract-provider/src/test/resources/features/infrastructure/infrastructure.security.utils.feature
+++
b/fineract-provider/src/test/resources/features/infrastructure/infrastructure.security.utils.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Security Utils Infrastructure
@security
diff --git
a/fineract-provider/src/test/resources/features/infrastructure/infrastructure.sqlbuilder.feature
b/fineract-provider/src/test/resources/features/infrastructure/infrastructure.sqlbuilder.feature
index c5fdf8530..23044a0c9 100644
---
a/fineract-provider/src/test/resources/features/infrastructure/infrastructure.sqlbuilder.feature
+++
b/fineract-provider/src/test/resources/features/infrastructure/infrastructure.sqlbuilder.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: SQL Builder
@sqlbuilder
diff --git
a/fineract-provider/src/test/resources/features/mix/mix.report.feature
b/fineract-provider/src/test/resources/features/mix/mix.report.feature
index 54c7d651d..bac3f143b 100644
--- a/fineract-provider/src/test/resources/features/mix/mix.report.feature
+++ b/fineract-provider/src/test/resources/features/mix/mix.report.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: MIX XBRL
@mix
diff --git
a/fineract-provider/src/test/resources/features/module/modules.example.feature
b/fineract-provider/src/test/resources/features/module/modules.example.feature
index ad2be04b8..c4454a4f1 100644
---
a/fineract-provider/src/test/resources/features/module/modules.example.feature
+++
b/fineract-provider/src/test/resources/features/module/modules.example.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Example Modules
@modules
diff --git
a/fineract-provider/src/test/resources/features/module/modules.service.feature
b/fineract-provider/src/test/resources/features/module/modules.service.feature
index 6aee6ba4f..e2cc191a4 100644
---
a/fineract-provider/src/test/resources/features/module/modules.service.feature
+++
b/fineract-provider/src/test/resources/features/module/modules.service.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Service Modules
@modules
diff --git
a/fineract-provider/src/test/resources/features/portfolio/loanproduct.validation.feature
b/fineract-provider/src/test/resources/features/portfolio/loanproduct.validation.feature
index 0167830fa..36a7a0f2b 100644
---
a/fineract-provider/src/test/resources/features/portfolio/loanproduct.validation.feature
+++
b/fineract-provider/src/test/resources/features/portfolio/loanproduct.validation.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Loan Product Validation
@loanproduct
diff --git
a/fineract-provider/src/test/resources/features/template/template.service.feature
b/fineract-provider/src/test/resources/features/template/template.service.feature
index 53152ce00..e0e168d94 100644
---
a/fineract-provider/src/test/resources/features/template/template.service.feature
+++
b/fineract-provider/src/test/resources/features/template/template.service.feature
@@ -1,3 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
Feature: Template Service
@template
diff --git a/gradle.properties b/gradle.properties
index 0da3f472a..7d886728a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -20,3 +20,4 @@ org.gradle.jvmargs=-Xmx2g --add-exports
jdk.compiler/com.sun.tools.javac.api=ALL
buildType=BUILD
org.gradle.caching=true
org.gradle.parallel=true
+org.gradle.logging.level=warn