Test comment creation against interface

...not implementation details. In this case it is relatively easy to
test the public interface (the create-comment event) and not a private
method. This will make it easier to incorporate and test the changes to
the interface about to come.

Also group related tests into a suite.

Change-Id: I1b5d0d1186c5d7ecb7aeebcac50b9cbe9777687c
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
index ed9a8df..20063f4 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
@@ -955,87 +955,126 @@
     });
   });
 
-  test('_getOrCreateThread', () => {
-    const diffSide = Side.LEFT;
-    const commentSide = CommentSide.PARENT;
+  suite('create-comment', () => {
+    test('creates comments if they do not exist yet', () => {
+      const diffSide = Side.LEFT;
+      const commentSide = CommentSide.PARENT;
 
-    assert.isOk(element._getOrCreateThread('2', 3,
-        diffSide, commentSide, '/p'));
+      element.dispatchEvent(new CustomEvent('create-comment', {
+        detail: {
+          patchNum: '2',
+          lineNum: 3,
+          side: diffSide,
+          commentSide,
+          path: '/p',
+        },
+      }));
 
-    let threads = dom(element.$.diff)
-        .queryDistributedElements('gr-comment-thread');
+      let threads = dom(element.$.diff)
+          .queryDistributedElements('gr-comment-thread');
 
-    assert.equal(threads.length, 1);
-    assert.equal(threads[0].diffSide, diffSide);
-    assert.equal(threads[0].range, undefined);
-    assert.equal(threads[0].patchNum, 2);
+      assert.equal(threads.length, 1);
+      assert.equal(threads[0].diffSide, diffSide);
+      assert.equal(threads[0].range, undefined);
+      assert.equal(threads[0].patchNum, 2);
 
-    // Try to fetch a thread with a different range.
-    const range = {
-      start_line: 1,
-      start_character: 1,
-      end_line: 1,
-      end_character: 3,
-    };
+      // Try to fetch a thread with a different range.
+      const range = {
+        start_line: 1,
+        start_character: 1,
+        end_line: 1,
+        end_character: 3,
+      };
 
-    assert.isOk(element._getOrCreateThread(
-        '3', 1, diffSide, commentSide, '/p', range));
+      element.dispatchEvent(new CustomEvent('create-comment', {
+        detail: {
+          patchNum: '3',
+          lineNum: 1,
+          side: diffSide,
+          commentSide,
+          path: '/p',
+          range,
+        },
+      }));
 
-    threads = dom(element.$.diff)
-        .queryDistributedElements('gr-comment-thread');
+      threads = dom(element.$.diff)
+          .queryDistributedElements('gr-comment-thread');
 
-    assert.equal(threads.length, 2);
-    assert.equal(threads[1].diffSide, diffSide);
-    assert.equal(threads[1].range, range);
-    assert.equal(threads[1].patchNum, 3);
-  });
+      assert.equal(threads.length, 2);
+      assert.equal(threads[1].diffSide, diffSide);
+      assert.equal(threads[1].range, range);
+      assert.equal(threads[1].patchNum, 3);
+    });
 
-  test('thread should use old file path if first created ' +
-   'on patch set (left) before renaming', () => {
-    const diffSide = Side.LEFT;
-    element.file = {basePath: 'file_renamed.txt', path: element.path};
+    test('thread should use old file path if first created ' +
+    'on patch set (left) before renaming', () => {
+      const diffSide = Side.LEFT;
+      element.file = {basePath: 'file_renamed.txt', path: element.path};
 
-    assert.isOk(element._getOrCreateThread('2', 3,
-        diffSide, CommentSide.REVISION, '/p'));
+      element.dispatchEvent(new CustomEvent('create-comment', {
+        detail: {
+          patchNum: '2',
+          lineNum: 3,
+          side: diffSide,
+          commentSide: CommentSide.REVISION,
+          path: '/p',
+        },
+      }));
 
-    const threads = dom(element.$.diff)
-        .queryDistributedElements('gr-comment-thread');
+      const threads = dom(element.$.diff)
+          .queryDistributedElements('gr-comment-thread');
 
-    assert.equal(threads.length, 1);
-    assert.equal(threads[0].diffSide, diffSide);
-    assert.equal(threads[0].path, element.file.basePath);
-  });
+      assert.equal(threads.length, 1);
+      assert.equal(threads[0].diffSide, diffSide);
+      assert.equal(threads[0].path, element.file.basePath);
+    });
 
-  test('thread should use new file path if first created' +
-   'on patch set (right) after renaming', () => {
-    const diffSide = Side.RIGHT;
-    element.file = {basePath: 'file_renamed.txt', path: element.path};
+    test('thread should use new file path if first created' +
+    'on patch set (right) after renaming', () => {
+      const diffSide = Side.RIGHT;
+      element.file = {basePath: 'file_renamed.txt', path: element.path};
 
-    assert.isOk(element._getOrCreateThread('2', 3,
-        diffSide, CommentSide.REVISION, '/p'));
+      element.dispatchEvent(new CustomEvent('create-comment', {
+        detail: {
+          patchNum: '2',
+          lineNum: 3,
+          side: diffSide,
+          commentSide: CommentSide.REVISION,
+          path: '/p',
+        },
+      }));
 
-    const threads = dom(element.$.diff)
-        .queryDistributedElements('gr-comment-thread');
+      const threads = dom(element.$.diff)
+          .queryDistributedElements('gr-comment-thread');
 
-    assert.equal(threads.length, 1);
-    assert.equal(threads[0].diffSide, diffSide);
-    assert.equal(threads[0].path, element.file.path);
-  });
+      assert.equal(threads.length, 1);
+      assert.equal(threads[0].diffSide, diffSide);
+      assert.equal(threads[0].path, element.file.path);
+    });
 
-  test('thread should use new file path if first created' +
-   'on patch set (left) but is base', () => {
-    const diffSide = Side.LEFT;
-    element.file = {basePath: 'file_renamed.txt', path: element.path};
+    test('thread should use new file path if first created' +
+    'on patch set (left) but is base', () => {
+      const diffSide = Side.LEFT;
+      element.file = {basePath: 'file_renamed.txt', path: element.path};
 
-    assert.isOk(element._getOrCreateThread('2', 3,
-        diffSide, CommentSide.PARENT, '/p', undefined));
+      element.dispatchEvent(new CustomEvent('create-comment', {
+        detail: {
+          patchNum: '2',
+          lineNum: 3,
+          side: diffSide,
+          commentSide: CommentSide.PARENT,
+          path: '/p',
+          range: undefined,
+        },
+      }));
 
-    const threads = dom(element.$.diff)
-        .queryDistributedElements('gr-comment-thread');
+      const threads = dom(element.$.diff)
+          .queryDistributedElements('gr-comment-thread');
 
-    assert.equal(threads.length, 1);
-    assert.equal(threads[0].diffSide, diffSide);
-    assert.equal(threads[0].path, element.file.path);
+      assert.equal(threads.length, 1);
+      assert.equal(threads[0].diffSide, diffSide);
+      assert.equal(threads[0].path, element.file.path);
+    });
   });
 
   test('_filterThreadElsForLocation with no threads', () => {