diff --git a/builder/parser/code/multisvc/multi_services.go b/builder/parser/code/multisvc/multi_services.go index 7d9ca7d3d5..d6c3d04271 100644 --- a/builder/parser/code/multisvc/multi_services.go +++ b/builder/parser/code/multisvc/multi_services.go @@ -19,6 +19,8 @@ package multi import ( + "strings" + "github.com/goodrain/rainbond/builder/parser/types" ) @@ -30,9 +32,11 @@ type ServiceInterface interface { // NewMultiServiceI creates a new MultiModuler. func NewMultiServiceI(lang string) ServiceInterface { - switch lang { - case "Java-maven": - return NewMaven() + for _, part := range strings.Split(lang, ",") { + switch strings.TrimSpace(part) { + case "Java-maven": + return NewMaven() + } } return nil } diff --git a/builder/parser/code/multisvc/multi_services_test.go b/builder/parser/code/multisvc/multi_services_test.go new file mode 100644 index 0000000000..179814ff5a --- /dev/null +++ b/builder/parser/code/multisvc/multi_services_test.go @@ -0,0 +1,33 @@ +package multi + +import "testing" + +func TestNewMultiServiceI_SupportsCompositeJavaMaven(t *testing.T) { + tests := []struct { + name string + lang string + }{ + {name: "plain java maven", lang: "Java-maven"}, + {name: "dockerfile first", lang: "dockerfile,Java-maven"}, + {name: "java maven first", lang: "Java-maven,dockerfile"}, + {name: "with spaces", lang: " dockerfile , Java-maven "}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := NewMultiServiceI(tt.lang); got == nil { + t.Fatalf("NewMultiServiceI(%q) = nil, want maven parser", tt.lang) + } + }) + } +} + +func TestNewMultiServiceI_IgnoresLanguagesWithoutJavaMaven(t *testing.T) { + for _, lang := range []string{"dockerfile", "Node.js", "dockerfile,Node.js"} { + t.Run(lang, func(t *testing.T) { + if got := NewMultiServiceI(lang); got != nil { + t.Fatalf("NewMultiServiceI(%q) = %T, want nil", lang, got) + } + }) + } +}