/src/test/java/com/atlassian/bamboo/plugins/nodejs/tasks/bower/BowerTaskExporterTest.java

https://bitbucket.org/atlassian/bamboo-nodejs-plugin · Java · 141 lines · 106 code · 23 blank · 12 comment · 0 complexity · 62de3259ec84be38b418ebc17d8fc553 MD5 · raw file

  1. package com.atlassian.bamboo.plugins.nodejs.tasks.bower;
  2. import com.atlassian.bamboo.plugins.nodejs.tasks.AbstractNodeRequiringTaskConfigurator;
  3. import com.atlassian.bamboo.plugins.nodejs.tasks.node.NodeCapabilityDefaultsHelper;
  4. import com.atlassian.bamboo.specs.api.util.EntityPropertiesBuilders;
  5. import com.atlassian.bamboo.specs.api.validators.common.ValidationProblem;
  6. import com.atlassian.bamboo.specs.builders.task.BowerTask;
  7. import com.atlassian.bamboo.specs.model.task.BowerTaskProperties;
  8. import com.atlassian.bamboo.task.TaskConfigConstants;
  9. import com.atlassian.bamboo.task.TaskContainer;
  10. import com.atlassian.bamboo.task.TaskDefinition;
  11. import com.atlassian.bamboo.task.TaskDefinitionImpl;
  12. import com.atlassian.bamboo.task.export.TaskValidationContext;
  13. import com.atlassian.bamboo.ww2.actions.build.admin.create.UIConfigSupport;
  14. import com.google.common.collect.ImmutableMap;
  15. import org.jetbrains.annotations.NotNull;
  16. import org.junit.Rule;
  17. import org.junit.Test;
  18. import org.mockito.InjectMocks;
  19. import org.mockito.Mock;
  20. import org.mockito.junit.MockitoJUnit;
  21. import org.mockito.junit.MockitoRule;
  22. import java.util.Arrays;
  23. import java.util.List;
  24. import java.util.Map;
  25. import static org.hamcrest.CoreMatchers.is;
  26. import static org.hamcrest.MatcherAssert.assertThat;
  27. import static org.hamcrest.Matchers.empty;
  28. import static org.hamcrest.Matchers.hasSize;
  29. import static org.mockito.Mockito.mock;
  30. import static org.mockito.Mockito.when;
  31. public class BowerTaskExporterTest {
  32. @Rule
  33. public final MockitoRule mockitoRule = MockitoJUnit.rule();
  34. @Mock
  35. private UIConfigSupport uiConfigSupport;
  36. @InjectMocks
  37. private BowerTaskExporter bowerTaskExporter;
  38. @Test
  39. public void testToTaskConfiguration() {
  40. // provided
  41. final String nodeExecutable = "Node.js 6.0";
  42. final String command = "install";
  43. final String bowerExecutable = "custom/node_modules/bower";
  44. final String environmentVariables = "NODE_HOME=/env/home";
  45. final String workingSubdirectory = "plugin";
  46. final TaskContainer taskContainer = mock(TaskContainer.class);
  47. final BowerTask bowerTask = new BowerTask()
  48. .nodeExecutable(nodeExecutable)
  49. .command(command)
  50. .bowerExecutable(bowerExecutable)
  51. .environmentVariables(environmentVariables)
  52. .workingSubdirectory(workingSubdirectory);
  53. final BowerTaskProperties bowerTaskProperties = EntityPropertiesBuilders.build(bowerTask);
  54. // when
  55. final Map<String, String> configuration = bowerTaskExporter.toTaskConfiguration(taskContainer, bowerTaskProperties);
  56. // then
  57. assertThat(configuration.get(AbstractNodeRequiringTaskConfigurator.NODE_RUNTIME), is(nodeExecutable));
  58. assertThat(configuration.get(BowerConfigurator.BOWER_RUNTIME), is(bowerExecutable));
  59. assertThat(configuration.get(BowerConfigurator.COMMAND), is(command));
  60. assertThat(configuration.get(TaskConfigConstants.CFG_ENVIRONMENT_VARIABLES), is(environmentVariables));
  61. assertThat(configuration.get(TaskConfigConstants.CFG_WORKING_SUBDIRECTORY), is(workingSubdirectory));
  62. }
  63. @Test
  64. public void testToSpecsEntity() {
  65. // provided
  66. final String nodeExecutable = "Node.js 6.0";
  67. final String command = "install";
  68. final String bowerExecutable = "custom/node_modules/bower";
  69. final String environmentVariables = "NODE_HOME=/env/home";
  70. final String workingSubdirectory = "plugin";
  71. final Map<String, String> configuration = ImmutableMap.<String, String>builder()
  72. .put(AbstractNodeRequiringTaskConfigurator.NODE_RUNTIME, nodeExecutable)
  73. .put(BowerConfigurator.BOWER_RUNTIME, bowerExecutable)
  74. .put(BowerConfigurator.COMMAND, command)
  75. .put(TaskConfigConstants.CFG_ENVIRONMENT_VARIABLES, environmentVariables)
  76. .put(TaskConfigConstants.CFG_WORKING_SUBDIRECTORY, workingSubdirectory)
  77. .build();
  78. final TaskDefinition taskDefinition = new TaskDefinitionImpl(100L, "pluginKey", null, true, configuration, false);
  79. // when
  80. final BowerTaskProperties taskProperties = EntityPropertiesBuilders.build(bowerTaskExporter.toSpecsEntity(taskDefinition));
  81. // then
  82. assertThat(taskProperties.getNodeExecutable(), is(nodeExecutable));
  83. assertThat(taskProperties.getBowerExecutable(), is(bowerExecutable));
  84. assertThat(taskProperties.getCommand(), is(command));
  85. assertThat(taskProperties.getEnvironmentVariables(), is(environmentVariables));
  86. assertThat(taskProperties.getWorkingSubdirectory(), is(workingSubdirectory));
  87. }
  88. @Test
  89. public void testValidatePassesForValidProperties() {
  90. // provided
  91. final TaskValidationContext taskValidationContext = mock(TaskValidationContext.class);
  92. final String[] knownNodeExecutables = {"Node.js 0.11", "Node.js 0.12"};
  93. final BowerTask bowerTask = new BowerTask().nodeExecutable(knownNodeExecutables[0]);
  94. final BowerTaskProperties bowerTaskProperties = EntityPropertiesBuilders.build(bowerTask);
  95. registerKnownServerExecutables(knownNodeExecutables);
  96. // when
  97. final List<ValidationProblem> validationProblems = bowerTaskExporter.validate(taskValidationContext, bowerTaskProperties);
  98. // then
  99. assertThat(validationProblems, is(empty()));
  100. }
  101. @Test
  102. public void testValidateFailsForUnknownExecutable() {
  103. // provided
  104. final TaskValidationContext taskValidationContext = mock(TaskValidationContext.class);
  105. final String[] knownNodeExecutables = {"Node.js 0.11", "Node.js 0.12"};
  106. final String missingNodeExecutable = knownNodeExecutables[0] + " (missing)";
  107. final BowerTask bowerTask = new BowerTask().nodeExecutable(missingNodeExecutable);
  108. final BowerTaskProperties bowerTaskProperties = EntityPropertiesBuilders.build(bowerTask);
  109. registerKnownServerExecutables(knownNodeExecutables);
  110. // when
  111. final List<ValidationProblem> validationProblems = bowerTaskExporter.validate(taskValidationContext, bowerTaskProperties);
  112. // then
  113. assertThat(validationProblems, hasSize(1));
  114. }
  115. private void registerKnownServerExecutables(@NotNull String... labels) {
  116. when(uiConfigSupport.getExecutableLabels(NodeCapabilityDefaultsHelper.NODE_CAPABILITY_KEY)).thenReturn(Arrays.asList(labels));
  117. }
  118. }