196 lines
6.7 KiB
JavaScript
196 lines
6.7 KiB
JavaScript
import test from 'ava';
|
|
import getAuthUrl from '../lib/get-git-auth-url';
|
|
import {gitRepo} from './helpers/git-utils';
|
|
|
|
// Save the current process.env
|
|
const envBackup = Object.assign({}, process.env);
|
|
// Save the current working diretory
|
|
const cwd = process.cwd();
|
|
|
|
test.beforeEach(() => {
|
|
delete process.env.GIT_CREDENTIALS;
|
|
delete process.env.GH_TOKEN;
|
|
delete process.env.GITHUB_TOKEN;
|
|
delete process.env.GL_TOKEN;
|
|
delete process.env.GITLAB_TOKEN;
|
|
delete process.env.BB_TOKEN;
|
|
delete process.env.BITBUCKET_TOKEN;
|
|
process.env.GIT_ASKPASS = 'echo';
|
|
process.env.GIT_TERMINAL_PROMPT = 0;
|
|
});
|
|
|
|
test.afterEach.always(() => {
|
|
// Restore process.env
|
|
process.env = envBackup;
|
|
// Restore the current working directory
|
|
process.chdir(cwd);
|
|
});
|
|
|
|
test.serial('Return the same "git" formatted URL if "gitCredentials" is not defined', async t => {
|
|
t.is(await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo.git'}), 'git@host.null:owner/repo.git');
|
|
});
|
|
|
|
test.serial('Return the same "https" formatted URL if "gitCredentials" is not defined', async t => {
|
|
t.is(await getAuthUrl({repositoryUrl: 'https://host.null/owner/repo.git'}), 'https://host.null/owner/repo.git');
|
|
});
|
|
|
|
test.serial(
|
|
'Return the "https" formatted URL if "gitCredentials" is not defined and repositoryUrl is a "git+https" URL',
|
|
async t => {
|
|
t.is(await getAuthUrl({repositoryUrl: 'git+https://host.null/owner/repo.git'}), 'https://host.null/owner/repo.git');
|
|
}
|
|
);
|
|
|
|
test.serial('Do not add trailing ".git" if not present in the origian URL', async t => {
|
|
t.is(await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo'}), 'git@host.null:owner/repo');
|
|
});
|
|
|
|
test.serial('Handle "https" URL with group and subgroup', async t => {
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'https://host.null/group/subgroup/owner/repo.git'}),
|
|
'https://host.null/group/subgroup/owner/repo.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Handle "git" URL with group and subgroup', async t => {
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git@host.null:group/subgroup/owner/repo.git'}),
|
|
'git@host.null:group/subgroup/owner/repo.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Convert shorthand URL', async t => {
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'semanitc-release/semanitc-release'}),
|
|
'https://github.com/semanitc-release/semanitc-release.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Convert GitLab shorthand URL', async t => {
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'gitlab:semanitc-release/semanitc-release'}),
|
|
'https://gitlab.com/semanitc-release/semanitc-release.git'
|
|
);
|
|
});
|
|
|
|
test.serial(
|
|
'Return the "https" formatted URL if "gitCredentials" is defined and repositoryUrl is a "git" URL',
|
|
async t => {
|
|
process.env.GIT_CREDENTIALS = 'user:pass';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo.git'}),
|
|
'https://user:pass@host.null/owner/repo.git'
|
|
);
|
|
}
|
|
);
|
|
|
|
test.serial(
|
|
'Return the "https" formatted URL if "gitCredentials" is defined and repositoryUrl is a "https" URL',
|
|
async t => {
|
|
process.env.GIT_CREDENTIALS = 'user:pass';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'https://host.null/owner/repo.git'}),
|
|
'https://user:pass@host.null/owner/repo.git'
|
|
);
|
|
}
|
|
);
|
|
|
|
test.serial(
|
|
'Return the "http" formatted URL if "gitCredentials" is defined and repositoryUrl is a "http" URL',
|
|
async t => {
|
|
process.env.GIT_CREDENTIALS = 'user:pass';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'http://host.null/owner/repo.git'}),
|
|
'http://user:pass@host.null/owner/repo.git'
|
|
);
|
|
}
|
|
);
|
|
|
|
test.serial(
|
|
'Return the "https" formatted URL if "gitCredentials" is defined and repositoryUrl is a "git+https" URL',
|
|
async t => {
|
|
process.env.GIT_CREDENTIALS = 'user:pass';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git+https://host.null/owner/repo.git'}),
|
|
'https://user:pass@host.null/owner/repo.git'
|
|
);
|
|
}
|
|
);
|
|
|
|
test.serial(
|
|
'Return the "http" formatted URL if "gitCredentials" is defined and repositoryUrl is a "git+http" URL',
|
|
async t => {
|
|
process.env.GIT_CREDENTIALS = 'user:pass';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git+http://host.null/owner/repo.git'}),
|
|
'http://user:pass@host.null/owner/repo.git'
|
|
);
|
|
}
|
|
);
|
|
|
|
test.serial('Return the "https" formatted URL if "gitCredentials" is defined with "GH_TOKEN"', async t => {
|
|
process.env.GH_TOKEN = 'token';
|
|
t.is(await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo.git'}), 'https://token@host.null/owner/repo.git');
|
|
});
|
|
|
|
test.serial('Return the "https" formatted URL if "gitCredentials" is defined with "GITHUB_TOKEN"', async t => {
|
|
process.env.GITHUB_TOKEN = 'token';
|
|
t.is(await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo.git'}), 'https://token@host.null/owner/repo.git');
|
|
});
|
|
|
|
test.serial('Return the "https" formatted URL if "gitCredentials" is defined with "GL_TOKEN"', async t => {
|
|
process.env.GL_TOKEN = 'token';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo.git'}),
|
|
'https://gitlab-ci-token:token@host.null/owner/repo.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Return the "https" formatted URL if "gitCredentials" is defined with "GITLAB_TOKEN"', async t => {
|
|
process.env.GITLAB_TOKEN = 'token';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo.git'}),
|
|
'https://gitlab-ci-token:token@host.null/owner/repo.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Return the "https" formatted URL if "gitCredentials" is defined with "BB_TOKEN"', async t => {
|
|
process.env.BB_TOKEN = 'token';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo.git'}),
|
|
'https://x-token-auth:token@host.null/owner/repo.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Return the "https" formatted URL if "gitCredentials" is defined with "BITBUCKET_TOKEN"', async t => {
|
|
process.env.BITBUCKET_TOKEN = 'token';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git@host.null:owner/repo.git'}),
|
|
'https://x-token-auth:token@host.null/owner/repo.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Handle "https" URL with group and subgroup, with "GIT_CREDENTIALS"', async t => {
|
|
process.env.GIT_CREDENTIALS = 'user:pass';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'https://host.null/group/subgroup/owner/repo.git'}),
|
|
'https://user:pass@host.null/group/subgroup/owner/repo.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Handle "git" URL with group and subgroup, with "GIT_CREDENTIALS', async t => {
|
|
process.env.GIT_CREDENTIALS = 'user:pass';
|
|
t.is(
|
|
await getAuthUrl({repositoryUrl: 'git@host.null:group/subgroup/owner/repo.git'}),
|
|
'https://user:pass@host.null/group/subgroup/owner/repo.git'
|
|
);
|
|
});
|
|
|
|
test.serial('Do not add git credential to repositoryUrl if push is allowed', async t => {
|
|
process.env.GIT_CREDENTIALS = 'user:pass';
|
|
// Create a git repository, set the current working directory at the root of the repo
|
|
const repositoryUrl = await gitRepo(true);
|
|
|
|
t.is(await getAuthUrl({repositoryUrl}), repositoryUrl);
|
|
});
|