diff --git a/applications/spring-shell/src/test/java/org/springframework/sbm/shell/ScanShellCommandTest.java b/applications/spring-shell/src/test/java/org/springframework/sbm/shell/ScanShellCommandTest.java index 9deece602..2d99c4776 100644 --- a/applications/spring-shell/src/test/java/org/springframework/sbm/shell/ScanShellCommandTest.java +++ b/applications/spring-shell/src/test/java/org/springframework/sbm/shell/ScanShellCommandTest.java @@ -90,9 +90,6 @@ void testScanWithFailingPreconditionChecksShouldPrintResult() { String result = sut.scan(projectRoot); - verify(applicableRecipesListHolder).clear(); - verify(applicableRecipesListHolder, never()).setRecipes(any()); - ArgumentCaptor capturedOutput = ArgumentCaptor.forClass(String.class); verify(consolePrinter).println(capturedOutput.capture()); @@ -134,8 +131,6 @@ void testScanWithSucceedingPreconditionChecksShouldPrintResultAndRenderApplicabl String result = sut.scan(projectRoot); - verify(applicableRecipesListHolder).clear(); - verify(applicableRecipesListHolder).setRecipes(recipes); // list of recipes returned assertThat(result).isEqualTo("\u001B[91mThe applicable recipe\u001B[0m"); // header and validation result rendered diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/engine/commands/ApplicableRecipeListCommand.java b/components/sbm-core/src/main/java/org/springframework/sbm/engine/commands/ApplicableRecipeListCommand.java index d6e8795b5..77232faa2 100644 --- a/components/sbm-core/src/main/java/org/springframework/sbm/engine/commands/ApplicableRecipeListCommand.java +++ b/components/sbm-core/src/main/java/org/springframework/sbm/engine/commands/ApplicableRecipeListCommand.java @@ -15,15 +15,12 @@ */ package org.springframework.sbm.engine.commands; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.sbm.engine.context.ProjectContext; -import org.springframework.sbm.engine.context.ProjectRootPathResolver; +import org.springframework.sbm.engine.recipe.ApplicableRecipesListHolder; import org.springframework.sbm.engine.recipe.Recipe; import org.springframework.sbm.engine.recipe.Recipes; import org.springframework.sbm.engine.recipe.RecipesBuilder; -import org.springframework.sbm.project.parser.ProjectContextInitializer; import org.springframework.sbm.scopes.ExecutionScope; -import org.springframework.sbm.engine.recipe.ApplicableRecipesListHolder; import org.springframework.stereotype.Component; import java.util.List; @@ -32,22 +29,12 @@ public class ApplicableRecipeListCommand extends AbstractCommand> { private static final String COMMAND_NAME = "applicableRecipes"; - private final ProjectRootPathResolver projectRootPathResolver; private final RecipesBuilder recipesBuilder; - private final ProjectContextInitializer projectContextBuilder; - - private final ConfigurableListableBeanFactory beanFactory; - - private final ExecutionScope executionScope; private final ApplicableRecipesListHolder applicableRecipesListHolder; - protected ApplicableRecipeListCommand(ProjectRootPathResolver projectRootPathResolver, RecipesBuilder recipesBuilder, ProjectContextInitializer projectContextBuilder, ConfigurableListableBeanFactory beanFactory, ExecutionScope executionScope, ApplicableRecipesListHolder applicableRecipesListHolder) { + protected ApplicableRecipeListCommand(RecipesBuilder recipesBuilder, ExecutionScope executionScope, ApplicableRecipesListHolder applicableRecipesListHolder) { super(COMMAND_NAME); - this.projectRootPathResolver = projectRootPathResolver; this.recipesBuilder = recipesBuilder; - this.projectContextBuilder = projectContextBuilder; - this.beanFactory = beanFactory; - this.executionScope = executionScope; this.applicableRecipesListHolder = applicableRecipesListHolder; } @@ -67,10 +54,7 @@ private List getApplicableRecipes(ProjectContext context) { @Deprecated // FIXME: Refactor: inheriting AbstractCommand forces this method! public List execute(String... arguments) { -// Path projectRoot = projectRootPathResolver.getProjectRootOrDefault(arguments[0]); // // FIXME: This call creates a new ProjectResourceSet which is not correct. -// ProjectContext context = projectContextBuilder.initProjectContext(projectRoot, new RewriteExecutionContext()); -// return getApplicableRecipes(context); return null; } } diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/archfitfun/ExecutionScopeArchFitTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/archfitfun/ExecutionScopeArchFitTest.java index bcd1ebdd6..3b4680310 100644 --- a/components/sbm-core/src/test/java/org/springframework/sbm/archfitfun/ExecutionScopeArchFitTest.java +++ b/components/sbm-core/src/test/java/org/springframework/sbm/archfitfun/ExecutionScopeArchFitTest.java @@ -23,11 +23,7 @@ import org.openrewrite.maven.MavenSettings; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; import org.springframework.sbm.build.impl.MavenSettingsInitializer; import org.springframework.sbm.build.impl.RewriteMavenArtifactDownloader; import org.springframework.sbm.build.impl.RewriteMavenParser; @@ -45,7 +41,6 @@ import org.springframework.sbm.java.impl.RewriteJavaParser; import org.springframework.sbm.java.refactoring.JavaRefactoringFactoryImpl; import org.springframework.sbm.java.util.BasePackageCalculator; -import org.springframework.sbm.openrewrite.RewriteExecutionContext; import org.springframework.sbm.project.RewriteSourceFileWrapper; import org.springframework.sbm.project.parser.*; import org.springframework.sbm.project.resource.ProjectResourceSetHolder; @@ -59,10 +54,13 @@ import org.springframework.validation.beanvalidation.CustomValidatorBean; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.when; import static org.springframework.sbm.archfitfun.ExecutionScopeArchFitTest.ScopeCacheHelper.getCacheSnapshot; /** @@ -133,6 +131,7 @@ CustomValidatorBean.class, ScopeConfiguration.class, ApplicableRecipeListCommand.class, + ApplicableRecipesListHolder.class, SbmRecipeLoader.class, // SbmRecipeLoader.class, ExecutionScopeArchFitTestContext.class diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/engine/commands/ApplicableRecipeListCommandTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/engine/commands/ApplicableRecipeListCommandTest.java new file mode 100644 index 000000000..df05ecd12 --- /dev/null +++ b/components/sbm-core/src/test/java/org/springframework/sbm/engine/commands/ApplicableRecipeListCommandTest.java @@ -0,0 +1,70 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed 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 + * + * https://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. + */ +package org.springframework.sbm.engine.commands; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.sbm.engine.context.ProjectContext; +import org.springframework.sbm.engine.context.ProjectRootPathResolver; +import org.springframework.sbm.engine.recipe.ApplicableRecipesListHolder; +import org.springframework.sbm.engine.recipe.Recipe; +import org.springframework.sbm.engine.recipe.Recipes; +import org.springframework.sbm.engine.recipe.RecipesBuilder; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +/** + * @author Fabian Krüger + */ +@ExtendWith(MockitoExtension.class) +class ApplicableRecipeListCommandTest { + @Mock + ProjectRootPathResolver projectRootPathResolver; + + @Mock + RecipesBuilder recipesBuilder; + + @Mock + ApplicableRecipesListHolder applicableRecipesListHolder; + + @InjectMocks + ApplicableRecipeListCommand sut; + + @Test + @DisplayName("Sequence of Calls") + void sequenceOfCallsInExecute() { + Recipes recipes = mock(Recipes.class); + ProjectContext context = mock(ProjectContext.class); + when(recipesBuilder.buildRecipes()).thenReturn(recipes); + List applicableRecipes = new ArrayList<>(); + when(recipes.getApplicable(context)).thenReturn(applicableRecipes); + + List returnedListOfRecipes = sut.execute(context); + + verify(applicableRecipesListHolder).setRecipes(applicableRecipes); + verify(applicableRecipesListHolder).clear(); + + assertThat(returnedListOfRecipes).isSameAs(applicableRecipes); + } +} \ No newline at end of file