Skip to content

Commit

Permalink
feat: multitenancy-gorm
Browse files Browse the repository at this point in the history
Close #260
  • Loading branch information
sdelamo committed May 31, 2020
1 parent 4fa0c72 commit 546cce9
Show file tree
Hide file tree
Showing 4 changed files with 180 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,9 @@ dependencies {
@if (features.contains("multi-tenancy")) {
@dependency.template("io.micronaut", "micronaut-multitenancy", "implementation", null)
}
@if (features.contains("multi-tenancy-gorm")) {
@dependency.template("io.micronaut.configuration", "micronaut-multitenancy-gorm", "implementation", null)
}
@if (features.contains("discovery-consul") || features.contains("discovery-eureka")) {
@dependency.template("io.micronaut", "micronaut-discovery-client", "implementation", null)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,9 @@ List<Property> properties
@if (features.contains("multi-tenancy")) {
@dependency.template("io.micronaut", "micronaut-multitenancy", "compile", null)
}
@if (features.contains("multi-tenancy-gorm")) {
@dependency.template("io.micronaut.configuration", "micronaut-multitenancy-gorm", "compile", null)
}
@if (features.contains("discovery-consul") || features.contains("discovery-eureka")) {
@dependency.template("io.micronaut", "micronaut-discovery-client", "compile", null)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package io.micronaut.starter.feature.multitenancy;

import edu.umd.cs.findbugs.annotations.NonNull;
import io.micronaut.starter.application.ApplicationType;
import io.micronaut.starter.feature.Category;
import io.micronaut.starter.feature.Feature;
import io.micronaut.starter.feature.FeatureContext;
import io.micronaut.starter.feature.FeaturePredicate;
import io.micronaut.starter.feature.LanguageSpecificFeature;
import io.micronaut.starter.feature.kotlin.Ktor;
import io.micronaut.starter.options.Language;

import javax.inject.Singleton;
import java.util.Optional;

@Singleton
public class MultitenancyGorm implements Feature, LanguageSpecificFeature {

private final Multitenancy multitenancy;

public MultitenancyGorm(Multitenancy multitenancy) {
this.multitenancy = multitenancy;
}

@Override
public void processSelectedFeatures(FeatureContext featureContext) {
if (featureContext.getLanguage() == Language.GROOVY) {
if (!featureContext.isPresent(Multitenancy.class)) {
featureContext.addFeature(multitenancy);
}
} else {
featureContext.exclude(new FeaturePredicate() {
@Override
public boolean test(Feature feature) {
return feature instanceof MultitenancyGorm;
}

@Override
public Optional<String> getWarning() {
return Optional.of("multi-tenancy-gorm feature only supports Groovy");
}
});
}
}

@NonNull
@Override
public String getName() {
return "multi-tenancy-gorm";
}

@Override
public String getTitle() {
return "Multi-tenancy GORM";
}

@Override
public String getDescription() {
return "Integrates Micronaut's multi-tenancy capabilities with GORM multi-tenancy features";
}

@Override
public String getMicronautDocumentation() {
return "https://docs.micronaut.io/latest/guide/index.html#multitenancyGorm";
}

@Override
public String getThirdPartyDocumentation() {
return "http://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy";
}

@Override
public boolean supports(ApplicationType applicationType) {
return true;
}

@Override
public Language getRequiredLanguage() {
return Language.GROOVY;
}

@Override
public String getCategory() {
return Category.DATABASE;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package io.micronaut.starter.feature.multitenancy

import io.micronaut.starter.BeanContextSpec
import io.micronaut.starter.application.ApplicationType
import io.micronaut.starter.feature.Category
import io.micronaut.starter.feature.build.gradle.templates.buildGradle
import io.micronaut.starter.feature.build.maven.templates.pom
import io.micronaut.starter.fixture.CommandOutputFixture
import io.micronaut.starter.options.BuildTool
import io.micronaut.starter.options.JdkVersion
import io.micronaut.starter.options.Language
import io.micronaut.starter.options.Options
import io.micronaut.starter.options.TestFramework
import spock.lang.Shared
import spock.lang.Subject
import spock.lang.Unroll

class MultitenancyGormSpec extends BeanContextSpec implements CommandOutputFixture {

@Subject
@Shared
MultitenancyGorm multitenancy = beanContext.getBean(MultitenancyGorm)

void 'test readme.md with feature multi-tenancy-gorm contains links to micronaut docs'() {
when:
Options options = new Options(Language.GROOVY, TestFramework.SPOCK)
def output = generate(ApplicationType.DEFAULT, options, ['multi-tenancy-gorm'])
def readme = output["README.md"]

then:
readme
readme.contains("https://docs.micronaut.io/latest/guide/index.html#multitenancyGorm")
readme.contains("http://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy")
}

void "multi-tenancy-gorm belongs to Database category"() {
expect:
Category.DATABASE == multitenancy.category
}

void "multi-tenancy-gorm title and description are different"() {
expect:
multitenancy.getTitle()
multitenancy.getDescription()
multitenancy.getTitle() != multitenancy.getDescription()
}

@Unroll("feature multi-tenancy-gorm works for application type: #applicationType")
void "feature multi-tenancy-gorm works for every type of application type"(ApplicationType applicationType) {
expect:
multitenancy.supports(applicationType)

where:
applicationType << ApplicationType.values()
}

void 'dependency is included with maven and feature multi-tenancy-gorm for groovy'() {
when:
String template = pom.template(ApplicationType.DEFAULT, buildProject(), getFeatures(['multi-tenancy-gorm'], Language.GROOVY), []).render().toString()

then:
template.contains("""
<dependency>
<groupId>io.micronaut.configuration</groupId>
<artifactId>micronaut-multitenancy-gorm</artifactId>
<scope>compile</scope>
</dependency>
""")
and:
template.contains("""
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-multitenancy</artifactId>
<scope>compile</scope>
</dependency>
""")
}

void 'dependency is included with gradle and feature multi-tenancy-gorm for groovy'() {
when:
String template = buildGradle.template(ApplicationType.DEFAULT, buildProject(), getFeatures(['multi-tenancy-gorm'], Language.GROOVY)).render().toString()

then:
template.contains('implementation("io.micronaut.configuration:micronaut-multitenancy-gorm")')
and:
template.contains('implementation("io.micronaut:micronaut-multitenancy")')
}
}

0 comments on commit 546cce9

Please sign in to comment.