package jenkins.plugins.nodejs; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.jenkinsci.lib.configprovider.model.Config; import org.jenkinsci.plugins.configfiles.GlobalConfigFiles; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.jvnet.hudson.test.JenkinsRule; import org.powermock.api.mockito.PowerMockito; import com.cloudbees.plugins.credentials.CredentialsScope; import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials; import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl; import hudson.EnvVars; import hudson.FilePath; import hudson.model.Environment; import hudson.model.EnvironmentList; import hudson.model.FreeStyleBuild; import hudson.model.FreeStyleProject; import jenkins.plugins.nodejs.configfiles.NPMConfig; import jenkins.plugins.nodejs.configfiles.NPMConfig.NPMConfigProvider; import jenkins.plugins.nodejs.configfiles.NPMRegistry; import jenkins.plugins.nodejs.configfiles.Npmrc; public class NpmrcFileSupplyTest { /* package */ static class MockBuild extends FreeStyleBuild { public MockBuild(FreeStyleProject project, File workspace) throws IOException { super(mock(project)); setWorkspace(new FilePath(workspace)); } private static FreeStyleProject mock(FreeStyleProject project) { FreeStyleProject spy = PowerMockito.spy(project); doReturn(new EnvVars()).when(spy).getCharacteristicEnvVars(); return spy; } @Override public EnvironmentList getEnvironments() { if (buildEnvironments == null) { buildEnvironments = new ArrayList<Environment>(); } return new EnvironmentList(buildEnvironments); } } @Rule public JenkinsRule j = new JenkinsRule(); @Rule public TemporaryFolder folder = new TemporaryFolder(); @Test public void test_supply_npmrc_with_registry() throws Exception { StandardUsernameCredentials user = createUser("test-user-id", "myuser", "mypassword"); NPMRegistry privateRegistry = new NPMRegistry("https://private.organization.com/", user.getId(), null); NPMRegistry officalRegistry = new NPMRegistry("https://registry.npmjs.org/", null, "@user1 user2"); Config config = createSetting("mytest", "email=guest@example.com", Arrays.asList(privateRegistry, officalRegistry)); FreeStyleBuild build = new MockBuild(j.createFreeStyleProject(), folder.newFolder()); FilePath npmrcFile = NodeJSUtils.supplyConfig(config.id, build, build.getWorkspace(), j.createTaskListener(), new EnvVars()); assertTrue(npmrcFile.exists()); assertTrue(npmrcFile.length() > 0); Npmrc npmrc = Npmrc.load(new File(npmrcFile.getRemote())); assertTrue("Missing setting email", npmrc.contains("email")); assertEquals("Unexpected value from settings email", "guest@example.com", npmrc.get("email")); } private StandardUsernameCredentials createUser(String id, String username, String password) { return new UsernamePasswordCredentialsImpl(CredentialsScope.GLOBAL, id, null, username, password); } private Config createSetting(String id, String content, List<NPMRegistry> registries) { String providerId = new NPMConfigProvider().getProviderId(); Config config = new NPMConfig(id, null, null, content, providerId, registries); GlobalConfigFiles globalConfigFiles = j.jenkins.getExtensionList(GlobalConfigFiles.class) .get(GlobalConfigFiles.class); globalConfigFiles.save(config); return config; } }