import * as assert from 'assert';
import { getNpmTag } from './tag';

describe('tag.ts', () => {
  describe('getNpmTag()', () => {
    it('should return the right tags for primary branches', () => {
      assert.strictEqual(getNpmTag('master'), null);
      assert.strictEqual(getNpmTag('beta'), 'beta');
      assert.strictEqual(getNpmTag('alpha'), 'alpha');
    });

    it('should return the right tags for primary branches with different default branches', () => {
      process.env.CI_TOOLS_DEVELOP_BRANCH = 'development';
      process.env.CI_TOOLS_ALPHA_BRANCH = 'prerelease';
      process.env.CI_TOOLS_BETA_BRANCH = 'staging';
      process.env.CI_TOOLS_STABLE_BRANCH = 'main';

      // fully reload tag module, to apply new environment variables
      delete require.cache[require.resolve('./tag')];
      const getNpmTagWithNewEnvironment = require('./tag').getNpmTag;

      assert.strictEqual(getNpmTagWithNewEnvironment('main'), null);
      assert.strictEqual(getNpmTagWithNewEnvironment('staging'), 'beta');
      assert.strictEqual(getNpmTagWithNewEnvironment('prerelease'), 'alpha');
      assert.strictEqual(getNpmTagWithNewEnvironment('development'), 'develop');

      assert.strictEqual(getNpmTagWithNewEnvironment('master'), 'master');
      assert.strictEqual(getNpmTagWithNewEnvironment('beta'), 'beta');
      assert.strictEqual(getNpmTagWithNewEnvironment('alpha'), 'alpha');
      assert.strictEqual(getNpmTagWithNewEnvironment('develop'), 'develop');

      delete process.env.CI_TOOLS_DEVELOP_BRANCH;
      delete process.env.CI_TOOLS_ALPHA_BRANCH;
      delete process.env.CI_TOOLS_BETA_BRANCH;
      delete process.env.CI_TOOLS_STABLE_BRANCH;
    });

    it('should return the right tags for secondary branches', () => {
      assert.strictEqual(getNpmTag('feature/add-new-feature'), 'feature~add-new-feature');
      assert.strictEqual(getNpmTag('refs/pull/16/merge'), 'refs~pull~16~merge');
    });
  });
});
