re-implement hide of nuget api key in build logs, add more tests for it
[teamcity/dotNetPackagesSupport.git] / nuget-tests / src / jetbrains / buildServer / nuget / tests / agent / NuGetPushActoinFactoryTest.java
index a684e647ae074588b1fcde47a50a7899682f6ee8..3818d3b06b3f47ddd2af6b524a945cbb2a4475b4 100644 (file)
@@ -18,20 +18,25 @@ package jetbrains.buildServer.nuget.tests.agent;
 \r
 import jetbrains.buildServer.BaseTestCase;\r
 import jetbrains.buildServer.RunBuildException;\r
+import jetbrains.buildServer.agent.BuildParametersMap;\r
 import jetbrains.buildServer.agent.BuildRunnerContext;\r
 import jetbrains.buildServer.nuget.agent.commands.impl.CommandFactoryImpl;\r
 import jetbrains.buildServer.nuget.agent.commands.impl.NuGetActionFactoryImpl;\r
 import jetbrains.buildServer.nuget.agent.dependencies.PackageUsages;\r
 import jetbrains.buildServer.nuget.agent.parameters.NuGetPublishParameters;\r
 import jetbrains.buildServer.nuget.agent.util.CommandlineBuildProcessFactory;\r
+import org.hamcrest.BaseMatcher;\r
+import org.hamcrest.Description;\r
+import org.jetbrains.annotations.NotNull;\r
 import org.jmock.Expectations;\r
 import org.jmock.Mockery;\r
 import org.testng.annotations.BeforeMethod;\r
 import org.testng.annotations.Test;\r
 \r
 import java.io.File;\r
-import java.util.Arrays;\r
 import java.util.Collections;\r
+import java.util.List;\r
+import java.util.Map;\r
 \r
 /**\r
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
@@ -45,6 +50,9 @@ public class NuGetPushActoinFactoryTest extends BaseTestCase {
   private NuGetPublishParameters ps;\r
   private File myFile;\r
   private File myNuGet;\r
+  private String cmd;\r
+  private BuildParametersMap myBuildParametersMap;\r
+\r
 \r
   @BeforeMethod\r
   @Override\r
@@ -57,10 +65,65 @@ public class NuGetPushActoinFactoryTest extends BaseTestCase {
     ctx = m.mock(BuildRunnerContext.class);\r
     ps = m.mock(NuGetPublishParameters.class);\r
 \r
+    myBuildParametersMap = m.mock(BuildParametersMap.class);\r
+    cmd = System.getenv("ComSpec");\r
+\r
+    m.checking(new Expectations(){{\r
+      allowing(ctx).getBuildParameters(); will(returnValue(myBuildParametersMap));\r
+      allowing(myBuildParametersMap).getEnvironmentVariables(); will(returnValue(Collections.singletonMap("ComSpec", cmd)));\r
+    }});\r
+\r
     myFile = createTempFile();\r
     myNuGet = createTempFile();\r
   }\r
 \r
+  private org.hamcrest.Matcher<List<String>> arguments(final String... args) {\r
+    return new BaseMatcher<List<String>>() {\r
+      public boolean matches(Object o) {\r
+        List<String> text = (List<String>) o;\r
+\r
+        if (text.size() != args.length) {\r
+          return false;\r
+        }\r
+\r
+        for (int i = 0; i < args.length; i++) {\r
+          if (args[i].startsWith("%%teamcity_nuget_api_key_")) {\r
+            final String actual = text.get(i).replaceAll("%%teamcity_nuget_api_key_\\d+%%", "%%teamcity_nuget_api_key_DDD%%");\r
+            if (!actual.equals(args[i])) return false;\r
+          }\r
+        }\r
+        return true;\r
+      }\r
+\r
+      public void describeTo(Description description) {\r
+        description.appendText("Should match: [");\r
+        for (String arg : args) {\r
+          description.appendValue(arg);\r
+          description.appendText(", ");\r
+        }\r
+        description.appendText("]");\r
+      }\r
+    };\r
+  }\r
+\r
+  private org.hamcrest.Matcher<Map<String, String>> envApi(@NotNull final String key) {\r
+    return new BaseMatcher<Map<String, String>>() {\r
+      public boolean matches(Object o) {\r
+        Map<String, String> map = (Map<String, String>) o;\r
+        for (Map.Entry<String, String> e : map.entrySet()) {\r
+          if (e.getKey().startsWith("teamcity_nuget_api_key_")) {\r
+            return key.equals(e.getValue());\r
+          }\r
+        }\r
+        return false;\r
+      }\r
+\r
+      public void describeTo(Description description) {\r
+        description.appendText("Environment map should contain value: ").appendValue(key);\r
+      }\r
+    };\r
+  }\r
+\r
   @Test\r
   public void test_command_push() throws RunBuildException {\r
     m.checking(new Expectations(){{\r
@@ -69,7 +132,10 @@ public class NuGetPushActoinFactoryTest extends BaseTestCase {
       allowing(ps).getPublishSource(); will(returnValue("push-feed"));\r
       allowing(ps).getCreateOnly(); will(returnValue(false));\r
 \r
-      oneOf(myProcessFactory).executeCommandLine(ctx, myNuGet, Arrays.asList("push", myFile.getPath(), "api-key-guid", "-Source", "push-feed"), myFile.getParentFile(),Collections.<String, String>emptyMap()\r
+      oneOf(myProcessFactory).executeCommandLine(with(equal(ctx)), with(equal(cmd)),\r
+              with(arguments("/c", myNuGet.getPath(), "push", myFile.getPath(), "%%teamcity_nuget_api_key_DDD%%", "-Source", "push-feed")),\r
+              with(equal(myFile.getParentFile())),\r
+              with(envApi("api-key-guid"))\r
       );\r
     }});\r
 \r
@@ -86,7 +152,11 @@ public class NuGetPushActoinFactoryTest extends BaseTestCase {
       allowing(ps).getPublishSource(); will(returnValue(null));\r
       allowing(ps).getCreateOnly(); will(returnValue(false));\r
 \r
-      oneOf(myProcessFactory).executeCommandLine(ctx, myNuGet, Arrays.asList("push", myFile.getPath(), "api-key-guid"), myFile.getParentFile(), Collections.<String, String>emptyMap());\r
+      oneOf(myProcessFactory).executeCommandLine(with(equal(ctx)), with(equal(cmd)),\r
+              with(arguments("/c", myNuGet.getPath(), "push", myFile.getPath(), "%%teamcity_nuget_api_key_DDD%%")),\r
+              with(equal(myFile.getParentFile())),\r
+              with(envApi("api-key-guid"))\r
+      );\r
     }});\r
 \r
     i.createPush(ctx, ps, myFile);\r
@@ -102,7 +172,11 @@ public class NuGetPushActoinFactoryTest extends BaseTestCase {
       allowing(ps).getPublishSource(); will(returnValue("push-feed"));\r
       allowing(ps).getCreateOnly(); will(returnValue(true));\r
 \r
-      oneOf(myProcessFactory).executeCommandLine(ctx, myNuGet, Arrays.asList("push", myFile.getPath(), "api-key-guid", "-CreateOnly", "-Source", "push-feed"), myFile.getParentFile(), Collections.<String, String>emptyMap());\r
+      oneOf(myProcessFactory).executeCommandLine(with(equal(ctx)), with(equal(cmd)),\r
+              with(arguments("/c", myNuGet.getPath(), "push", myFile.getPath(), "%%teamcity_nuget_api_key_DDD%%", "-CreateOnly", "-Source", "push-feed")),\r
+              with(equal(myFile.getParentFile())),\r
+              with(envApi("api-key-guid"))\r
+      );\r
     }});\r
 \r
     i.createPush(ctx, ps, myFile);\r