<!DOCTYPE html>
<!--
Copyright (C) 2016 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-settings-view</title>

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

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

<script>void(0);</script>

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

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

    setup(function(done) {
      groups = [{
        url: 'some url',
        options: {},
        description: 'Group 1 description',
        group_id: 1,
        owner: 'Administrators',
        owner_id: '123',
        id: 'abc',
        name: 'Group 1',
      },{
        options: {visible_to_all: true},
        id: '456',
        name: 'Group 2',
      },{
        options: {},
        id: '789',
        name: 'Group 3',
      }];

      stub('gr-rest-api-interface', {
        getAccountGroups: function() { return Promise.resolve(groups); },
      });

      element = fixture('basic');

      element.loadData().then(function() { flush(done); });
    });

    test('renders', function() {
      var rows = Polymer.dom(element.root).querySelectorAll('tbody tr');

      assert.equal(rows.length, 3);

      var nameCells = rows.map(
          function(row) { return row.querySelectorAll('td')[0].textContent; });

      assert.equal(nameCells[0], 'Group 1');
      assert.equal(nameCells[1], 'Group 2');
      assert.equal(nameCells[2], 'Group 3');
    });

    test('_computeVisibleToAll', function() {
      assert.equal(element._computeVisibleToAll(groups[0]), 'No');
      assert.equal(element._computeVisibleToAll(groups[1]), 'Yes');
    });
  });
</script>
