Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 1 | <!DOCTYPE html> |
| 2 | <!-- |
| 3 | Copyright (C) 2015 The Android Open Source Project |
| 4 | |
| 5 | Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | you may not use this file except in compliance with the License. |
| 7 | You may obtain a copy of the License at |
| 8 | |
| 9 | http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | |
| 11 | Unless required by applicable law or agreed to in writing, software |
| 12 | distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | See the License for the specific language governing permissions and |
| 15 | limitations under the License. |
| 16 | --> |
| 17 | |
| 18 | <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> |
| 19 | <title>gr-diff-comment</title> |
| 20 | |
Urs Wolfer | f2f936f | 2016-01-25 19:26:30 +0100 | [diff] [blame] | 21 | <script src="../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> |
| 22 | <script src="../bower_components/web-component-tester/browser.js"></script> |
| 23 | <script src="../bower_components/page/page.js"></script> |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 24 | <script src="../scripts/util.js"></script> |
Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 25 | |
Urs Wolfer | f2f936f | 2016-01-25 19:26:30 +0100 | [diff] [blame] | 26 | <link rel="import" href="../bower_components/iron-test-helpers/iron-test-helpers.html"> |
Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 27 | <link rel="import" href="../elements/gr-diff-comment.html"> |
| 28 | |
| 29 | <test-fixture id="basic"> |
| 30 | <template> |
| 31 | <gr-diff-comment></gr-diff-comment> |
| 32 | </template> |
| 33 | </test-fixture> |
| 34 | |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 35 | <test-fixture id="draft"> |
| 36 | <template> |
| 37 | <gr-diff-comment draft="true"></gr-diff-comment> |
| 38 | </template> |
| 39 | </test-fixture> |
| 40 | |
Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 41 | <script> |
| 42 | suite('gr-diff-comment tests', function() { |
| 43 | var element; |
| 44 | setup(function() { |
| 45 | element = fixture('basic'); |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 46 | element.comment = { |
| 47 | author: { |
| 48 | name: 'Mr. Peanutbutter', |
| 49 | email: 'tenn1sballchaser@aol.com', |
| 50 | }, |
| 51 | id: 'baf0414d_60047215', |
| 52 | line: 5, |
| 53 | message: 'is this a crossover episode!?', |
| 54 | updated: '2015-12-08 19:48:33.843000000', |
Andrew Bonventre | 1b3d953 | 2015-12-20 19:13:45 -0500 | [diff] [blame] | 55 | }; |
Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 56 | }); |
| 57 | |
| 58 | test('proper event fires on reply', function(done) { |
Andrew Bonventre | 1b3d953 | 2015-12-20 19:13:45 -0500 | [diff] [blame] | 59 | element.addEventListener('reply', function(e) { |
Andrew Bonventre | ecc8617 | 2016-01-28 18:07:26 -0500 | [diff] [blame] | 60 | assert.ok(e.detail.comment); |
Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 61 | done(); |
| 62 | }); |
| 63 | MockInteractions.tap(element.$$('.reply')); |
| 64 | }); |
| 65 | |
Andrew Bonventre | ecc8617 | 2016-01-28 18:07:26 -0500 | [diff] [blame] | 66 | test('proper event fires on quote', function(done) { |
| 67 | element.addEventListener('reply', function(e) { |
| 68 | assert.ok(e.detail.comment); |
| 69 | assert.isTrue(e.detail.quote); |
| 70 | done(); |
| 71 | }); |
| 72 | MockInteractions.tap(element.$$('.quote')); |
| 73 | }); |
| 74 | |
Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 75 | test('proper event fires on done', function(done) { |
Andrew Bonventre | 1b3d953 | 2015-12-20 19:13:45 -0500 | [diff] [blame] | 76 | element.addEventListener('done', function(e) { |
Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 77 | done(); |
| 78 | }); |
| 79 | MockInteractions.tap(element.$$('.done')); |
| 80 | }); |
| 81 | |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 82 | test('clicking on date link does not trigger nav', function() { |
| 83 | var showStub = sinon.stub(page, 'show'); |
| 84 | var dateEl = element.$$('.date'); |
| 85 | assert.ok(dateEl); |
| 86 | MockInteractions.tap(dateEl); |
| 87 | var dest = window.location.pathname + '#5'; |
| 88 | assert(showStub.lastCall.calledWithExactly(dest, null, false), |
| 89 | 'Should navigate to ' + dest + ' without triggering nav'); |
| 90 | showStub.restore(); |
| 91 | }); |
| 92 | }); |
| 93 | |
| 94 | suite('gr-diff-comment draft tests', function() { |
| 95 | var element; |
| 96 | var server; |
| 97 | |
| 98 | setup(function() { |
| 99 | element = fixture('draft'); |
| 100 | element.changeNum = 42; |
| 101 | element.patchNum = 1; |
| 102 | element.comment = { |
| 103 | __draft: true, |
| 104 | __draftID: 'temp_draft_id', |
| 105 | path: '/path/to/file', |
| 106 | line: 5, |
| 107 | }; |
| 108 | |
| 109 | server = sinon.fakeServer.create(); |
| 110 | server.respondWith( |
| 111 | 'PUT', |
| 112 | '/changes/42/revisions/1/drafts', |
| 113 | [ |
| 114 | 201, |
Urs Wolfer | 26caed7 | 2016-02-02 21:02:42 +0100 | [diff] [blame^] | 115 | {'Content-Type': 'application/json'}, |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 116 | ')]}\'\n{' + |
| 117 | '"id": "baf0414d_40572e03",' + |
| 118 | '"path": "/path/to/file",' + |
| 119 | '"line": 5,' + |
| 120 | '"updated": "2015-12-08 21:52:36.177000000",' + |
| 121 | '"message": "created!"' + |
| 122 | '}' |
| 123 | ] |
| 124 | ); |
| 125 | |
| 126 | server.respondWith( |
| 127 | 'PUT', |
| 128 | /\/changes\/42\/revisions\/1\/drafts\/.+/, |
| 129 | [ |
| 130 | 200, |
Urs Wolfer | 26caed7 | 2016-02-02 21:02:42 +0100 | [diff] [blame^] | 131 | {'Content-Type': 'application/json'}, |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 132 | ')]}\'\n{' + |
| 133 | '"id": "baf0414d_40572e03",' + |
| 134 | '"path": "/path/to/file",' + |
| 135 | '"line": 5,' + |
| 136 | '"updated": "2015-12-08 21:52:36.177000000",' + |
| 137 | '"message": "saved!"' + |
| 138 | '}' |
| 139 | ] |
| 140 | ); |
| 141 | }); |
| 142 | |
| 143 | teardown(function() { |
| 144 | server.restore(); |
| 145 | }); |
| 146 | |
| 147 | function isVisible(el) { |
| 148 | assert.ok(el); |
| 149 | return getComputedStyle(el).getPropertyValue('display') != 'none'; |
| 150 | } |
| 151 | |
| 152 | test('button visibility states', function() { |
Andrew Bonventre | 1b3d953 | 2015-12-20 19:13:45 -0500 | [diff] [blame] | 153 | element.showActions = false; |
| 154 | assert.isTrue(element.$$('.actions').hasAttribute('hidden')); |
| 155 | element.showActions = true; |
| 156 | assert.isFalse(element.$$('.actions').hasAttribute('hidden')); |
| 157 | |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 158 | element.draft = true; |
| 159 | assert.isTrue(isVisible(element.$$('.edit')), 'edit is visible'); |
| 160 | assert.isTrue(isVisible(element.$$('.discard')), 'discard is visible'); |
| 161 | assert.isFalse(isVisible(element.$$('.save')), 'save is not visible'); |
| 162 | assert.isFalse(isVisible(element.$$('.cancel')), 'cancel is not visible'); |
| 163 | assert.isFalse(isVisible(element.$$('.reply')), 'reply is not visible'); |
Andrew Bonventre | ecc8617 | 2016-01-28 18:07:26 -0500 | [diff] [blame] | 164 | assert.isFalse(isVisible(element.$$('.quote')), 'quote is not visible'); |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 165 | assert.isFalse(isVisible(element.$$('.done')), 'done is not visible'); |
| 166 | |
| 167 | element.editing = true; |
Urs Wolfer | 26caed7 | 2016-02-02 21:02:42 +0100 | [diff] [blame^] | 168 | assert.isFalse(isVisible(element.$$('.edit')), 'edit is not visible'); |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 169 | assert.isTrue(isVisible(element.$$('.discard')), 'discard is visible'); |
| 170 | assert.isTrue(isVisible(element.$$('.save')), 'save is visible'); |
Andrew Bonventre | ecc8617 | 2016-01-28 18:07:26 -0500 | [diff] [blame] | 171 | assert.isFalse(isVisible(element.$$('.cancel')), 'cancel is visible'); |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 172 | assert.isFalse(isVisible(element.$$('.reply')), 'reply is not visible'); |
Andrew Bonventre | ecc8617 | 2016-01-28 18:07:26 -0500 | [diff] [blame] | 173 | assert.isFalse(isVisible(element.$$('.quote')), 'quote is not visible'); |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 174 | assert.isFalse(isVisible(element.$$('.done')), 'done is not visible'); |
| 175 | |
Urs Wolfer | 26caed7 | 2016-02-02 21:02:42 +0100 | [diff] [blame^] | 176 | element.draft = false; |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 177 | element.editing = false; |
Urs Wolfer | 26caed7 | 2016-02-02 21:02:42 +0100 | [diff] [blame^] | 178 | assert.isFalse(isVisible(element.$$('.edit')), 'edit is not visible'); |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 179 | assert.isFalse(isVisible(element.$$('.discard')), |
| 180 | 'discard is not visible'); |
| 181 | assert.isFalse(isVisible(element.$$('.save')), 'save is not visible'); |
| 182 | assert.isFalse(isVisible(element.$$('.cancel')), 'cancel is not visible'); |
Andrew Bonventre | ecc8617 | 2016-01-28 18:07:26 -0500 | [diff] [blame] | 183 | assert.isTrue(isVisible(element.$$('.reply')), 'reply is visible'); |
| 184 | assert.isTrue(isVisible(element.$$('.quote')), 'quote is visible'); |
| 185 | assert.isTrue(isVisible(element.$$('.done')), 'done is visible'); |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 186 | |
Andrew Bonventre | ecc8617 | 2016-01-28 18:07:26 -0500 | [diff] [blame] | 187 | element.comment.id = 'foo'; |
| 188 | element.editing = true; |
| 189 | assert.isTrue(isVisible(element.$$('.cancel')), 'cancel is visible'); |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 190 | }); |
| 191 | |
| 192 | test('draft creation/cancelation', function(done) { |
| 193 | assert.isFalse(element.editing); |
| 194 | MockInteractions.tap(element.$$('.edit')); |
| 195 | assert.isTrue(element.editing); |
| 196 | |
| 197 | element._editDraft = ''; |
| 198 | // Save should be disabled on an empty message. |
| 199 | var disabled = element.$$('.save').hasAttribute('disabled'); |
| 200 | assert.isTrue(disabled, 'save button should be disabled.'); |
Urs Wolfer | 26caed7 | 2016-02-02 21:02:42 +0100 | [diff] [blame^] | 201 | element._editDraft = ' '; |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 202 | disabled = element.$$('.save').hasAttribute('disabled'); |
| 203 | assert.isTrue(disabled, 'save button should be disabled.'); |
| 204 | |
| 205 | var numDiscardEvents = 0; |
Andrew Bonventre | 1b3d953 | 2015-12-20 19:13:45 -0500 | [diff] [blame] | 206 | element.addEventListener('discard', function(e) { |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 207 | numDiscardEvents++; |
Andrew Bonventre | 593db0f | 2016-01-16 13:35:57 -0500 | [diff] [blame] | 208 | if (numDiscardEvents == 3) { |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 209 | done(); |
| 210 | } |
| 211 | }); |
| 212 | MockInteractions.tap(element.$$('.cancel')); |
| 213 | MockInteractions.tap(element.$$('.discard')); |
Andrew Bonventre | 7523c33 | 2016-01-18 14:24:33 -0500 | [diff] [blame] | 214 | MockInteractions.pressAndReleaseKeyOn(element.$.editTextarea, 27); // esc |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 215 | }); |
| 216 | |
| 217 | test('draft saving/editing', function(done) { |
| 218 | element.draft = true; |
| 219 | MockInteractions.tap(element.$$('.edit')); |
| 220 | element._editDraft = 'good news, everyone!'; |
| 221 | MockInteractions.tap(element.$$('.save')); |
| 222 | assert.isTrue(element.disabled, |
| 223 | 'Element should be disabled when creating draft.'); |
| 224 | |
| 225 | server.respond(); |
| 226 | |
| 227 | element._xhrPromise.then(function(req) { |
| 228 | assert.isFalse(element.disabled, |
| 229 | 'Element should be enabled when done creating draft.'); |
| 230 | assert.equal(req.status, 201); |
| 231 | assert.equal(req.url, '/changes/42/revisions/1/drafts'); |
| 232 | assert.equal(req.response.message, 'created!'); |
| 233 | assert.isFalse(element.editing); |
| 234 | }).then(function() { |
| 235 | MockInteractions.tap(element.$$('.edit')); |
| 236 | element._editDraft = 'You’ll be delivering a package to Chapek 9, a ' + |
| 237 | 'world where humans are killed on sight.'; |
| 238 | MockInteractions.tap(element.$$('.save')); |
| 239 | assert.isTrue(element.disabled, |
| 240 | 'Element should be disabled when updating draft.'); |
| 241 | server.respond(); |
| 242 | |
| 243 | element._xhrPromise.then(function(req) { |
| 244 | assert.isFalse(element.disabled, |
| 245 | 'Element should be enabled when done updating draft.'); |
| 246 | assert.equal(req.status, 200); |
| 247 | assert.equal(req.url, |
| 248 | '/changes/42/revisions/1/drafts/baf0414d_40572e03'); |
| 249 | assert.equal(req.response.message, 'saved!'); |
| 250 | assert.isFalse(element.editing); |
| 251 | done(); |
| 252 | }); |
| 253 | }); |
| 254 | }); |
| 255 | |
Andrew Bonventre | c3ef3e4 | 2015-12-02 11:40:14 -0500 | [diff] [blame] | 256 | test('clicking on date link does not trigger nav', function() { |
| 257 | var showStub = sinon.stub(page, 'show'); |
| 258 | var dateEl = element.$$('.date'); |
| 259 | assert.ok(dateEl); |
| 260 | MockInteractions.tap(dateEl); |
| 261 | var dest = window.location.pathname + '#5'; |
| 262 | assert(showStub.lastCall.calledWithExactly(dest, null, false), |
| 263 | 'Should navigate to ' + dest + ' without triggering nav'); |
| 264 | showStub.restore(); |
| 265 | }); |
Andrew Bonventre | 4c94478 | 2015-11-18 16:31:18 -0500 | [diff] [blame] | 266 | }); |
| 267 | </script> |