<!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-search-bar</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="../../../test/common-test-setup.html"/>
<script src="../../../bower_components/page/page.js"></script>

<link rel="import" href="gr-search-bar.html">
<script src="../../../scripts/util.js"></script>

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

<test-fixture id="basic">
  <template>
    <gr-search-bar></gr-search-bar>
  </template>
</test-fixture>

<script>
  suite('gr-search-bar tests', () => {
    let element;
    let sandbox;

    setup(() => {
      sandbox = sinon.sandbox.create();
      element = fixture('basic');
    });

    teardown(() => {
      sandbox.restore();
    });

    test('value is propagated to _inputVal', () => {
      element.value = 'foo';
      assert.equal(element._inputVal, 'foo');
    });

    getActiveElement = () => {
      return document.activeElement.shadowRoot ?
          document.activeElement.shadowRoot.activeElement :
          document.activeElement;
    };

    test('enter in search input triggers nav', done => {
      sandbox.stub(page, 'show', () => {
        page.show.restore();
        assert.notEqual(getActiveElement(), element.$.searchInput);
        assert.notEqual(getActiveElement(), element.$.searchButton);
        done();
      });
      element.value = 'test';
      MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
          null, 'enter');
    });

    test('search query should be double-escaped', () => {
      const showStub = sandbox.stub(page, 'show');
      element.$.searchInput.text = 'fate/stay';
      MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
          null, 'enter');
      assert.equal(showStub.lastCall.args[0], '/q/fate%252Fstay');
    });

    test('input blurred after commit', () => {
      sandbox.stub(page, 'show');
      const blurSpy = sandbox.spy(element.$.searchInput.$.input, 'blur');
      element.$.searchInput.text = 'fate/stay';
      MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
          null, 'enter');
      assert.isTrue(blurSpy.called);
    });

    test('empty search query does not trigger nav', () => {
      const showSpy = sandbox.spy(page, 'show');
      element.value = '';
      MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
          null, 'enter');
      assert.isFalse(showSpy.called);
    });

    test('keyboard shortcuts', () => {
      const focusSpy = sandbox.spy(element.$.searchInput, 'focus');
      const selectAllSpy = sandbox.spy(element.$.searchInput, 'selectAll');
      MockInteractions.pressAndReleaseKeyOn(document.body, 191, null, '/');
      assert.isTrue(focusSpy.called);
      assert.isTrue(selectAllSpy.called);
    });

    suite('_getSearchSuggestions', () => {
      test('Autocompletes accounts', () => {
        sandbox.stub(element.$.restAPI, 'getSuggestedAccounts', () =>
          Promise.resolve([
            {
              name: 'fred',
              email: 'fred@goog.co',
            },
          ])
        );
        return element._getSearchSuggestions('owner:fr').then(s => {
          assert.equal(s[0].value, 'owner:fred@goog.co');
        });
      });

      test('Inserts self as option when valid', done => {
        sandbox.stub(element.$.restAPI, 'getSuggestedAccounts', () =>
          Promise.resolve([
            {
              name: 'fred',
              email: 'fred@goog.co',
            },
          ])
        );
        element._getSearchSuggestions('owner:s').then(s => {
          assert.equal(s[0].value, 'owner:self');
        }).then(() => {
          element._getSearchSuggestions('owner:selfs').then(s => {
            assert.notEqual(s[0].value, 'owner:self');
            done();
          });
        });
      });

      test('Inserts me as option when valid', done => {
        sandbox.stub(element.$.restAPI, 'getSuggestedAccounts', () =>
          Promise.resolve([
            {
              name: 'fred',
              email: 'fred@goog.co',
            },
          ])
        );
        element._getSearchSuggestions('owner:m').then(s => {
          assert.equal(s[0].value, 'owner:me');
        }).then(() => {
          element._getSearchSuggestions('owner:meme').then(s => {
            assert.notEqual(s[0].value, 'owner:me');
            done();
          });
        });
      });

      test('Autocompletes groups', done => {
        sandbox.stub(element.$.restAPI, 'getSuggestedGroups', () =>
          Promise.resolve({
            Polygerrit: 0,
            gerrit: 0,
            gerrittest: 0,
          })
        );
        element._getSearchSuggestions('ownerin:pol').then(s => {
          assert.equal(s[0].value, 'ownerin:Polygerrit');
          done();
        });
      });

      test('Autocompletes projects', done => {
        sandbox.stub(element.$.restAPI, 'getSuggestedProjects', () =>
          Promise.resolve({
            Polygerrit: 0,
          })
        );
        element._getSearchSuggestions('project:pol').then(s => {
          assert.equal(s[0].value, 'project:Polygerrit');
          done();
        });
      });

      test('Autocompletes simple searches', done => {
        element._getSearchSuggestions('is:o').then(s => {
          assert.equal(s[0].name, 'is:open');
          assert.equal(s[0].value, 'is:open');
          assert.equal(s[1].name, 'is:owner');
          assert.equal(s[1].value, 'is:owner');
          done();
        });
      });

      test('Does not autocomplete with no match', done => {
        element._getSearchSuggestions('asdasdasdasd').then(s => {
          assert.equal(s.length, 0);
          done();
        });
      });

      test('Autocomplete doesnt override exact matches to input', done => {
        sandbox.stub(element.$.restAPI, 'getSuggestedGroups', () =>
          Promise.resolve({
            Polygerrit: 0,
            gerrit: 0,
            gerrittest: 0,
          })
        );
        element._getSearchSuggestions('ownerin:gerrit').then(s => {
          assert.equal(s[0].value, 'ownerin:gerrit');
          done();
        });
      });

      test('Autocomplete respects spaces', done => {
        sandbox.stub(element.$.restAPI, 'getSuggestedAccounts', () =>
          Promise.resolve([
            {
              name: 'fred',
              email: 'fred@goog.co',
            },
          ])
        );
        element._getSearchSuggestions('is:ope').then(s => {
          assert.equal(s[0].name, 'is:open');
          assert.equal(s[0].value, 'is:open');
          element._getSearchSuggestions('is:ope ').then(s => {
            assert.equal(s.length, 0);
            done();
          });
        });
      });

      test('Autocompletes accounts with no email', done => {
        sandbox.stub(element.$.restAPI, 'getSuggestedAccounts', () =>
          Promise.resolve([
            {
              name: 'fred',
            },
          ])
        );
        element._getSearchSuggestions('owner:fr').then(s => {
          assert.equal(s[0].value, 'owner:"fred"');
          done();
        });
      });

      test('Autocompletes accounts with email', done => {
        sandbox.stub(element.$.restAPI, 'getSuggestedAccounts', () =>
          Promise.resolve([
            {
              email: 'fred@goog.co',
            },
          ])
        );
        element._getSearchSuggestions('owner:fr').then(s => {
          assert.equal(s[0].value, 'owner:fred@goog.co');
          done();
        });
      });
    });
  });
</script>
