PageRenderTime 52ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/src/test/java/com/atlassian/bamboo/plugins/nodejs/tasks/npm/NpmTaskExporterTest.java

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