<!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.min.js"></script>
<script src="../../../bower_components/web-component-tester/browser.js"></script>

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

<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>
