// 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 {MrIssueStar} from './mr-issue-star.js';
import {issueRefToString} from 'shared/convertersV0.js';
import sinon from 'sinon';


let element;

describe('mr-issue-star', () => {
  beforeEach(() => {
    element = document.createElement('mr-issue-star');
    document.body.appendChild(element);
  });

  afterEach(() => {
    document.body.removeChild(element);
  });

  it('initializes', () => {
    assert.instanceOf(element, MrIssueStar);
  });

  it('starring logins user when user is not logged in', async () => {
    element._currentUserName = undefined;
    sinon.stub(element, 'login');

    await element.updateComplete;

    const star = element.shadowRoot.querySelector('button');

    star.click();

    sinon.assert.calledOnce(element.login);
  });

  it('_isStarring true only when issue ref is being starred', async () => {
    element._starringIssues = new Map([['chromium:22', {requesting: true}]]);
    element.issueRef = {projectName: 'chromium', localId: 5};

    assert.isFalse(element._isStarring);

    element.issueRef = {projectName: 'chromium', localId: 22};

    assert.isTrue(element._isStarring);

    element._starringIssues = new Map([['chromium:22', {requesting: false}]]);

    assert.isFalse(element._isStarring);
  });

  it('starring is disabled when _isStarring true', () => {
    element._currentUserName = 'users/1234';
    sinon.stub(element, '_isStarring').get(() => true);

    assert.isFalse(element._starringEnabled);
  });

  it('starring is disabled when _fetchingIsStarred true', () => {
    element._currentUserName = 'users/1234';
    element._fetchingIsStarred = true;

    assert.isFalse(element._starringEnabled);
  });

  it('_starredIssues changes displayed icon', async () => {
    element.issueRef = {projectName: 'proj', localId: 1};

    element._starredIssues = new Set([issueRefToString(element.issueRef)]);

    await element.updateComplete;

    const star = element.shadowRoot.querySelector('button');
    assert.equal(star.textContent.trim(), 'star');

    element._starredIssues = new Set();

    await element.updateComplete;

    assert.equal(star.textContent.trim(), 'star_border');
  });
});
