<!DOCTYPE html>
<!--
Copyright (C) 2015 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<title>gr-change-list-item</title>

<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<script src="../../../bower_components/web-component-tester/browser.js"></script>
<script src="../../../scripts/util.js"></script>

<link rel="import" href="gr-change-list-item.html">

<test-fixture id="basic">
  <template>
    <gr-change-list-item></gr-change-list-item>
  </template>
</test-fixture>

<script>
  suite('gr-change-list-item tests', function() {
    var element;

    setup(function() {
      stub('gr-rest-api-interface', {
        getConfig: function() { return Promise.resolve({}); },
        getLoggedIn: function() { return Promise.resolve(false); },
      });
      element = fixture('basic');
    });

    test('change status', function() {
      var getStatusForChange = function(change) {
        element.change = change;
        return element.$$('.cell.status').textContent;
      };

      assert.equal(getStatusForChange({mergeable: true}), '');
      assert.equal(getStatusForChange({mergeable: false}), 'Merge Conflict');
      assert.equal(getStatusForChange({status: 'NEW'}), '');
      assert.equal(getStatusForChange({status: 'MERGED'}), 'Merged');
      assert.equal(getStatusForChange({status: 'ABANDONED'}), 'Abandoned');
      assert.equal(getStatusForChange({status: 'DRAFT'}), 'Draft');
    });

    test('computed fields', function() {
      assert.equal(element._computeLabelClass({labels: {}}),
          'cell label u-gray-background');
      assert.equal(element._computeLabelClass(
          {labels: {}}, 'Verified'), 'cell label u-gray-background');
      assert.equal(element._computeLabelClass(
          {labels: {Verified: {approved: true, value: 1}}}, 'Verified'),
          'cell label u-green u-monospace');
      assert.equal(element._computeLabelClass(
          {labels: {Verified: {rejected: true, value: -1}}}, 'Verified'),
          'cell label u-monospace u-red');
      assert.equal(element._computeLabelClass(
          {labels: {'Code-Review': {value: 1}}}, 'Code-Review'),
          'cell label u-green u-monospace');
      assert.equal(element._computeLabelClass(
          {labels: {'Code-Review': {value: -1}}}, 'Code-Review'),
          'cell label u-monospace u-red');
      assert.equal(element._computeLabelClass(
          {labels: {'Code-Review': {value: -1}}}, 'Verified'),
          'cell label u-gray-background');

      assert.equal(element._computeLabelTitle({labels: {}}, 'Verified'),
          'Label not applicable');
      assert.equal(element._computeLabelTitle(
          {labels: {Verified: {approved: {name: 'Diffy'}}}}, 'Verified'),
          'Verified\nby Diffy');
      assert.equal(element._computeLabelTitle(
          {labels: {Verified: {approved: {name: 'Diffy'}}}}, 'Code-Review'),
          'Label not applicable');
      assert.equal(element._computeLabelTitle(
          {labels: {Verified: {rejected: {name: 'Diffy'}}}}, 'Verified'),
          'Verified\nby Diffy');
      assert.equal(element._computeLabelTitle(
          {labels: {'Code-Review': {disliked: {name: 'Diffy'}, value: -1}}},
          'Code-Review'), 'Code-Review\nby Diffy');
      assert.equal(element._computeLabelTitle(
          {labels: {'Code-Review': {recommended: {name: 'Diffy'}, value: 1}}},
          'Code-Review'), 'Code-Review\nby Diffy');
      assert.equal(element._computeLabelTitle(
          {labels: {'Code-Review': {recommended: {name: 'Diffy'},
          rejected: {name: 'Admin'}}}}, 'Code-Review'),
          'Code-Review\nby Admin');
      assert.equal(element._computeLabelTitle(
          {labels: {'Code-Review': {approved: {name: 'Diffy'},
          rejected: {name: 'Admin'}}}}, 'Code-Review'),
          'Code-Review\nby Admin');
      assert.equal(element._computeLabelTitle(
          {labels: {'Code-Review': {recommended: {name: 'Diffy'},
          disliked: {name: 'Admin'}, value: -1}}}, 'Code-Review'),
          'Code-Review\nby Admin');
      assert.equal(element._computeLabelTitle(
          {labels: {'Code-Review': {approved: {name: 'Diffy'},
          disliked: {name: 'Admin'}, value: -1}}}, 'Code-Review'),
          'Code-Review\nby Diffy');

      assert.equal(element._computeLabelValue({labels: {}}), '');
      assert.equal(element._computeLabelValue({labels: {}}, 'Verified'), '');
      assert.equal(element._computeLabelValue(
          {labels: {Verified: {approved: true, value: 1}}}, 'Verified'), '✓');
      assert.equal(element._computeLabelValue(
          {labels: {Verified: {value: 1}}}, 'Verified'), '+1');
      assert.equal(element._computeLabelValue(
          {labels: {Verified: {value: -1}}}, 'Verified'), '-1');
      assert.equal(element._computeLabelValue(
          {labels: {Verified: {approved: true}}}, 'Verified'), '✓');
      assert.equal(element._computeLabelValue(
          {labels: {Verified: {rejected: true}}}, 'Verified'), '✕');

      assert.equal(element._computeProjectURL('combustible/stuff'),
          '/q/status:open+project:combustible%252Fstuff');

      assert.equal(element._computeProjectBranchURL(
          'combustible-stuff', 'le/mons'),
          '/q/status:open+project:combustible-stuff+branch:le%252Fmons');

      element.change = {_number: 42};
      assert.equal(element.changeURL, '/c/42/');
      element.change = {_number: 43};
      assert.equal(element.changeURL, '/c/43/');
    });

  });
</script>
