// Copyright 2019 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 sinon from 'sinon';
import {MrCommentList} from './mr-comment-list.js';


let element;

describe('mr-comment-list', () => {
  beforeEach(() => {
    element = document.createElement('mr-comment-list');
    document.body.appendChild(element);
    element.comments = [
      {
        canFlag: true,
        localId: 898395,
        canDelete: true,
        projectName: 'chromium',
        commenter: {
          displayName: 'user@example.com',
          userId: '12345',
        },
        content: 'foo',
        sequenceNum: 1,
        timestamp: 1549319989,
      },
      {
        canFlag: true,
        localId: 898395,
        canDelete: true,
        projectName: 'chromium',
        commenter: {
          displayName: 'user@example.com',
          userId: '12345',
        },
        content: 'foo',
        sequenceNum: 2,
        timestamp: 1549320089,
      },
      {
        canFlag: true,
        localId: 898395,
        canDelete: true,
        projectName: 'chromium',
        commenter: {
          displayName: 'user@example.com',
          userId: '12345',
        },
        content: 'foo',
        sequenceNum: 3,
        timestamp: 1549320189,
      },
    ];

    // Stub RAF to execute immediately.
    sinon.stub(window, 'requestAnimationFrame').callsFake((func) => func());
  });

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

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

  it('scrolls to comment', async () => {
    await element.updateComplete;

    const commentElements = element.shadowRoot.querySelectorAll('mr-comment');
    const commentElement = commentElements[commentElements.length - 1];
    sinon.stub(commentElement, 'scrollIntoView');

    element.focusId = 'c3';

    await element.updateComplete;

    assert.isTrue(element._hideComments);
    assert.isTrue(commentElement.scrollIntoView.calledOnce);

    commentElement.scrollIntoView.restore();
  });

  it('scrolls to hidden comment', async () => {
    await element.updateComplete;

    element.focusId = 'c1';

    await element.updateComplete;

    assert.isFalse(element._hideComments);
    // TODO: Check that the comment has been scrolled into view.
  });

  it('doesnt scroll to unknown comment', async () => {
    await element.updateComplete;

    element.focusId = 'c100';

    await element.updateComplete;

    assert.isTrue(element._hideComments);
  });
});
