// 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 {MrClickThroughs} from './mr-click-throughs.js';
import page from 'page';

let element;

describe('mr-click-throughs', () => {
  beforeEach(() => {
    element = document.createElement('mr-click-throughs');
    document.body.appendChild(element);

    sinon.stub(page, 'call');
  });

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

    page.call.restore();
  });

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

  it('stateChanged', () => {
    const state = {userV0: {currentUser:
      {prefs: new Map(), prefsLoaded: false}}};
    element.stateChanged(state);
    assert.deepEqual(element.prefs, new Map([['render_markdown', false]]));
    assert.isFalse(element.prefsLoaded);
  });

  it('anon does not see privacy dialog', () => {
    assert.isFalse(element._showPrivacyDialog);
  });

  it('signed in user sees no privacy dialog before prefs load', () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = false;
    assert.isFalse(element._showPrivacyDialog);
  });

  it('signed in user sees no privacy dialog if dismissal pref set', () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = true;
    element.prefs = new Map([['privacy_click_through', true]]);
    assert.isFalse(element._showPrivacyDialog);
  });

  it('signed in user sees privacy dialog if dismissal pref missing', () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = true;
    element.prefs = new Map();
    assert.isTrue(element._showPrivacyDialog);
  });

  it('anon does not see corp mode dialog', () => {
    assert.isFalse(element._showCorpModeDialog);
  });

  it('signed in user sees no corp mode dialog before prefs load', () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = false;
    assert.isFalse(element._showCorpModeDialog);
  });

  it('signed in user sees no corp mode dialog if dismissal pref set', () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = true;
    element.prefs = new Map([['corp_mode_click_through', true]]);
    assert.isFalse(element._showCorpModeDialog);
  });

  it('non-corp user sees no corp mode dialog', () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = true;
    element.prefs = new Map();
    assert.isFalse(element._showCorpModeDialog);
  });

  it('corp user sees corp mode dialog if dismissal pref missing', () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = true;
    element.prefs = new Map([['public_issue_notice', true]]);
    assert.isTrue(element._showCorpModeDialog);
  });

  it('corp user sees no corp mode dialog in members-only project', () => {
    window.CS_env = {projectIsRestricted: true};
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = true;
    element.prefs = new Map([['public_issue_notice', true]]);
    assert.isFalse(element._showCorpModeDialog);
  });

  it('corp user sees corp mode dialog with no RVG warning', async () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = true;
    element.prefs = new Map([['public_issue_notice', true]]);

    await element.updateComplete;
    assert.notInclude(element.shadowRoot.innerHTML, 'altered');
  });

  it('corp user sees corp mode dialog with RVG warning', async () => {
    element.userDisplayName = 'user@example.com';
    element.prefsLoaded = true;
    element.prefs = new Map([
      ['public_issue_notice', true],
      ['restrict_new_issues', true],
    ]);

    await element.updateComplete;
    assert.include(element.shadowRoot.innerHTML, 'altered');
  });
});
