// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {assert} from 'chai';
import {ResourceNameError, pathsToFieldMask, extractUserId,
  extractProjectDisplayName, extractProjectFromProjectMember,
  projectAndUserToStarName, projectMemberToProjectName} from './converters.js';

describe('pathsToFieldMask', () => {
  it('converts an array of strings to a FieldMask', () => {
    assert.equal(pathsToFieldMask(['foo', 'barQux', 'qaz']), 'foo,barQux,qaz');
  });
});

describe('extractUserId', () => {
  it('throws error on improperly formatted resource name', () => {
    assert.throws(() => extractUserId('projects/1234'),
        ResourceNameError);
    assert.throws(() => extractUserId('users/notAnId'),
        ResourceNameError);
    assert.throws(() => extractUserId('user/1234'),
        ResourceNameError);
  });

  it('extracts user ID', () => {
    assert.equal(extractUserId('users/1234'), '1234');
  });
});

describe('extractProjectDisplayName', () => {
  it('throws error on improperly formatted resource name', () => {
    assert.throws(() => extractProjectDisplayName('users/1234'),
        ResourceNameError);
    assert.throws(() => extractProjectDisplayName('projects/(what)'),
        ResourceNameError);
    assert.throws(() => extractProjectDisplayName('project/test'),
        ResourceNameError);
    assert.throws(() => extractProjectDisplayName('projects/-test-'),
        ResourceNameError);
  });

  it('extracts project display name', () => {
    assert.equal(extractProjectDisplayName('projects/1234'), '1234');
    assert.equal(extractProjectDisplayName('projects/monorail'), 'monorail');
    assert.equal(extractProjectDisplayName('projects/test-project'),
        'test-project');
    assert.equal(extractProjectDisplayName('projects/what-is-love2'),
        'what-is-love2');
  });
});

describe('extractProjectFromProjectMember', () => {
  it('throws error on improperly formatted resource name', () => {
    assert.throws(
        () => extractProjectFromProjectMember(
            'projects/monorail/members/fakeName'),
        ResourceNameError);
    assert.throws(
        () => extractProjectFromProjectMember(
            'projects/-invalid-project-/members/1234'),
        ResourceNameError);
    assert.throws(
        () => extractProjectFromProjectMember(
            'projects/monorail/member/1234'),
        ResourceNameError);
  });

  it('extracts project display name', () => {
    assert.equal(extractProjectFromProjectMember(
        'projects/1234/members/1234'), '1234');
    assert.equal(extractProjectFromProjectMember(
        'projects/monorail/members/1234'), 'monorail');
    assert.equal(extractProjectFromProjectMember(
        'projects/test-project/members/1234'), 'test-project');
    assert.equal(extractProjectFromProjectMember(
        'projects/what-is-love2/members/1234'), 'what-is-love2');
  });
});

describe('projectAndUserToStarName', () => {
  it('throws error on improperly formatted resource name', () => {
    assert.throws(
        () => projectAndUserToStarName('users/1234', 'projects/monorail'),
        ResourceNameError);
  });

  it('generates project star resource name', () => {
    assert.equal(projectAndUserToStarName('projects/monorail', 'users/1234'),
        'users/1234/projectStars/monorail');
  });
});

describe('projectMemberToProjectName', () => {
  it('throws error on improperly formatted resource name', () => {
    assert.throws(
        () => projectMemberToProjectName(
            'projects/monorail/members/fakeName'),
        ResourceNameError);
  });

  it('creates project resource name', () => {
    assert.equal(projectMemberToProjectName(
        'projects/1234/members/1234'), 'projects/1234');
    assert.equal(projectMemberToProjectName(
        'projects/monorail/members/1234'), 'projects/monorail');
    assert.equal(projectMemberToProjectName(
        'projects/test-project/members/1234'), 'projects/test-project');
    assert.equal(projectMemberToProjectName(
        'projects/what-is-love2/members/1234'), 'projects/what-is-love2');
  });
});
