conventional-changelog-action/node_modules/get-pkg-repo/src/index.spec.js

180 lines
5.1 KiB
JavaScript

'use strict';
const {expect} = require(`chai`);
const {describe, it} = require(`mocha`);
const getPkgRepo = require(`../`);
describe(`get-pkg-repo`, () => {
it(`should error if cannot get repository`, () => {
expect(() => getPkgRepo()).to.throw(
Error,
`No valid "repository" data found in package metadata. Please see https://docs.npmjs.com/files/package.json#repository for proper syntax.`);
expect(() => getPkgRepo({})).to.throw(
Error,
`No valid "repository" data found in package metadata. Please see https://docs.npmjs.com/files/package.json#repository for proper syntax.`);
expect(() => getPkgRepo({repository: {type: `git`}})).to.throw(
Error,
`No valid "repository" data found in package metadata. Please see https://docs.npmjs.com/files/package.json#repository for proper syntax.`);
});
it(`should parse github http when it's just a string`, () => {
const repository = getPkgRepo({repository: `http://github.com/a/b`});
expect(repository).to.contain({
domain: `github.com`,
type: `github`,
user: `a`,
project: `b`,
});
});
it(`should parse github http`, () => {
const repository = getPkgRepo({repository: {url: `http://github.com/a/b`}});
expect(repository).to.contain({
domain: `github.com`,
type: `github`,
user: `a`,
project: `b`,
});
});
it(`should parse github https`, () => {
const repository = getPkgRepo({repository: {url: `https://github.com/a/b`}});
expect(repository).to.contain({
domain: `github.com`,
type: `github`,
user: `a`,
project: `b`,
});
});
it(`should parse gitlab https`, () => {
const repository = getPkgRepo({repository: `https://gitlab.com/hyper-expanse/semantic-release-gitlab-releaser.git`});
expect(repository).to.contain({
domain: `gitlab.com`,
type: `gitlab`,
user: `hyper-expanse`,
project: `semantic-release-gitlab-releaser`,
});
});
it(`should parse github ssh`, () => {
const repository = getPkgRepo({repository: {url: `git@github.com:joyent/node.git`}});
expect(repository).to.contain({
domain: `github.com`,
type: `github`,
user: `joyent`,
project: `node`,
});
});
it(`should parse private gitlab ssh`, () => {
const repository = getPkgRepo({repository: {url: `git@gitlab.team.com:username/test.git`}});
expect(repository).to.contain({
domain: `gitlab.team.com`,
type: `gitlab`,
user: `username`,
project: `test`,
});
});
it(`should parse github short`, () => {
const repository = getPkgRepo({repository: {url: `a/b`}});
expect(repository).to.contain({
domain: `github.com`,
type: `github`,
user: `a`,
project: `b`,
});
});
it(`should parse bitbucket`, () => {
const repository = getPkgRepo({repository: {url: `https://bitbucket.org/a/b.git`}});
expect(repository).to.contain({
domain: `bitbucket.org`,
type: `bitbucket`,
user: `a`,
project: `b`,
});
});
it(`should parse svn`, () => {
const repository = getPkgRepo({repository: {url: `svn://a/b`}});
expect(repository).to.contain({
domain: `a`,
project: null,
type: null,
user: null,
});
});
it(`should parse https`, () => {
const repository = getPkgRepo({repository: {url: `https://a/b`}});
expect(repository).to.contain({
domain: `a`,
project: null,
type: null,
user: null,
});
});
it(`should parse a url with an @`, () => {
const repository = getPkgRepo({repository: {url: `a@b.com`}});
expect(repository).to.contain({
domain: null,
project: null,
type: null,
user: null,
});
});
it(`should fix bad protocol`, () => {
const repository = getPkgRepo({repository: {url: `badprotocol://a/b`}});
expect(repository).to.contain({
domain: `a`,
project: null,
type: null,
user: null,
});
});
it(`should parse github enterprise http url`, () => {
const repository = getPkgRepo({repository: {url: `http://github.mycompany.dev/user/myRepo`}});
expect(repository).to.contain({
domain: `github.mycompany.dev`,
user: `user`,
project: `myRepo`,
type: `github`,
});
});
it(`should parse unknown git URL`, () => {
const repository = getPkgRepo({repository: {url: `git@git.ourdomain.co:group1/group2/group3/project.git`}});
expect(repository).to.contain({
domain: `git.ourdomain.co`,
user: `group1/group2/group3`,
project: `project`,
type: null,
});
});
it(`should parse simple unknown host`, () => {
const repository = getPkgRepo({repository: {url: `https://unknown-host/`}});
expect(repository).to.contain({
domain: `unknown-host`,
project: null,
type: null,
user: null,
});
});
it(`should parse weird unknown host`, () => {
const repository = getPkgRepo({repository: {url: `https://unknown-host/.git`}});
expect(repository).to.contain({
domain: `unknown-host`,
project: null,
type: null,
user: null,
});
});
});