Dmitrii Filippov | acd39a2 | 2020-04-02 10:31:43 +0200 | [diff] [blame] | 1 | /** |
| 2 | * @license |
| 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 | */ |
Andrew Bonventre | 547b8ab | 2015-12-01 01:02:00 -0500 | [diff] [blame] | 17 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 18 | import '../../../test/common-test-setup-karma'; |
| 19 | import '../../edit/gr-edit-constants'; |
| 20 | import './gr-change-view'; |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 21 | import { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 22 | ChangeStatus, |
| 23 | CommentSide, |
| 24 | DefaultBase, |
| 25 | DiffViewMode, |
| 26 | HttpMethod, |
| 27 | PrimaryTab, |
| 28 | SecondaryTab, |
| 29 | } from '../../../constants/constants'; |
| 30 | import {GrEditConstants} from '../../edit/gr-edit-constants'; |
| 31 | import {_testOnly_resetEndpoints} from '../../shared/gr-js-api-interface/gr-plugin-endpoints'; |
| 32 | import {getComputedStyleValue} from '../../../utils/dom-util'; |
Ben Rohlfs | ebe4acc | 2020-12-11 21:16:10 +0100 | [diff] [blame] | 33 | import {GerritNav} from '../../core/gr-navigation/gr-navigation'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 34 | import {getPluginLoader} from '../../shared/gr-js-api-interface/gr-plugin-loader'; |
| 35 | import {_testOnly_initGerritPluginApi} from '../../shared/gr-js-api-interface/gr-gerrit'; |
| 36 | import {EventType, PluginApi} from '../../plugins/gr-plugin-types'; |
| 37 | |
| 38 | import 'lodash/lodash'; |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 39 | import { |
| 40 | stubRestApi, |
| 41 | TestKeyboardShortcutBinder, |
| 42 | } from '../../../test/test-utils'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 43 | import {SPECIAL_PATCH_SET_NUM} from '../../../utils/patch-set-util'; |
| 44 | import {Shortcut} from '../../../mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin'; |
| 45 | import { |
| 46 | createAppElementChangeViewParams, |
| 47 | createApproval, |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 48 | createChange, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 49 | createChangeConfig, |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 50 | createChangeMessages, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 51 | createCommit, |
| 52 | createMergeable, |
| 53 | createPreferences, |
| 54 | createRevision, |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 55 | createRevisions, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 56 | createServerInfo, |
| 57 | createUserConfig, |
| 58 | TEST_NUMERIC_CHANGE_ID, |
| 59 | TEST_PROJECT_NAME, |
| 60 | getCurrentRevision, |
| 61 | createEditRevision, |
| 62 | createAccountWithIdNameAndEmail, |
| 63 | } from '../../../test/test-data-generators'; |
| 64 | import {ChangeViewPatchRange, GrChangeView} from './gr-change-view'; |
| 65 | import { |
| 66 | AccountId, |
| 67 | ApprovalInfo, |
| 68 | ChangeId, |
| 69 | ChangeInfo, |
| 70 | CommitId, |
| 71 | CommitInfo, |
| 72 | EditInfo, |
| 73 | EditPatchSetNum, |
| 74 | ElementPropertyDeepChange, |
| 75 | GitRef, |
| 76 | NumericChangeId, |
| 77 | ParentPatchSetNum, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 78 | PatchRange, |
| 79 | PatchSetNum, |
| 80 | RevisionInfo, |
| 81 | RobotId, |
| 82 | Timestamp, |
| 83 | UrlEncodedCommentId, |
| 84 | } from '../../../types/common'; |
| 85 | import { |
| 86 | pressAndReleaseKeyOn, |
| 87 | tap, |
| 88 | } from '@polymer/iron-test-helpers/mock-interactions'; |
| 89 | import {GrEditControls} from '../../edit/gr-edit-controls/gr-edit-controls'; |
| 90 | import {AppElementChangeViewParams} from '../../gr-app-types'; |
| 91 | import { |
| 92 | SinonFakeTimers, |
| 93 | SinonSpy, |
| 94 | SinonStubbedMember, |
| 95 | } from 'sinon/pkg/sinon-esm'; |
Ben Rohlfs | a9d2cff | 2021-01-22 21:33:58 +0100 | [diff] [blame^] | 96 | import {RestApiService} from '../../../services/gr-rest-api/gr-rest-api'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 97 | import {CustomKeyboardEvent} from '../../../types/events'; |
| 98 | import { |
| 99 | CommentThread, |
| 100 | DraftInfo, |
| 101 | UIDraft, |
| 102 | UIRobot, |
| 103 | } from '../../../utils/comment-util'; |
| 104 | import 'lodash/lodash'; |
| 105 | import {ParsedChangeInfo} from '../../shared/gr-rest-api-interface/gr-reviewer-updates-parser'; |
| 106 | import {ChangeComments} from '../../diff/gr-comment-api/gr-comment-api'; |
Ben Rohlfs | ebe4acc | 2020-12-11 21:16:10 +0100 | [diff] [blame] | 107 | import {GerritView} from '../../../services/router/router-model'; |
Dmitrii Filippov | acd39a2 | 2020-04-02 10:31:43 +0200 | [diff] [blame] | 108 | |
Dmitrii Filippov | 5f25dc0 | 2020-04-07 18:49:00 +0200 | [diff] [blame] | 109 | const pluginApi = _testOnly_initGerritPluginApi(); |
Dmitrii Filippov | acd39a2 | 2020-04-02 10:31:43 +0200 | [diff] [blame] | 110 | const fixture = fixtureFromElement('gr-change-view'); |
Dmitrii Filippov | 0028b58 | 2020-03-24 11:58:55 +0100 | [diff] [blame] | 111 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 112 | type SinonSpyMember<F extends (...args: any) => any> = SinonSpy< |
| 113 | Parameters<F>, |
| 114 | ReturnType<F> |
| 115 | >; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 116 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 117 | suite('gr-change-view tests', () => { |
| 118 | let element: GrChangeView; |
| 119 | |
| 120 | let navigateToChangeStub: SinonStubbedMember<typeof GerritNav.navigateToChange>; |
Dmitrii Filippov | 06117e8 | 2020-06-25 13:26:55 +0200 | [diff] [blame] | 121 | |
| 122 | suiteSetup(() => { |
| 123 | const kb = TestKeyboardShortcutBinder.push(); |
Dmitrii Filippov | 2dd0a44 | 2020-07-11 16:37:25 +0200 | [diff] [blame] | 124 | kb.bindShortcut(Shortcut.SEND_REPLY, 'ctrl+enter'); |
| 125 | kb.bindShortcut(Shortcut.REFRESH_CHANGE, 'shift+r'); |
| 126 | kb.bindShortcut(Shortcut.OPEN_REPLY_DIALOG, 'a'); |
| 127 | kb.bindShortcut(Shortcut.OPEN_DOWNLOAD_DIALOG, 'd'); |
| 128 | kb.bindShortcut(Shortcut.TOGGLE_DIFF_MODE, 'm'); |
| 129 | kb.bindShortcut(Shortcut.TOGGLE_CHANGE_STAR, 's'); |
| 130 | kb.bindShortcut(Shortcut.UP_TO_DASHBOARD, 'u'); |
| 131 | kb.bindShortcut(Shortcut.EXPAND_ALL_MESSAGES, 'x'); |
| 132 | kb.bindShortcut(Shortcut.COLLAPSE_ALL_MESSAGES, 'z'); |
| 133 | kb.bindShortcut(Shortcut.OPEN_DIFF_PREFS, ','); |
| 134 | kb.bindShortcut(Shortcut.EDIT_TOPIC, 't'); |
Dmitrii Filippov | 06117e8 | 2020-06-25 13:26:55 +0200 | [diff] [blame] | 135 | }); |
| 136 | |
| 137 | suiteTeardown(() => { |
| 138 | TestKeyboardShortcutBinder.pop(); |
| 139 | }); |
| 140 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 141 | const TEST_SCROLL_TOP_PX = 100; |
Andrew Bonventre | 547b8ab | 2015-12-01 01:02:00 -0500 | [diff] [blame] | 142 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 143 | const ROBOT_COMMENTS_LIMIT = 10; |
| 144 | |
Tao Zhou | 18738b9 | 2020-05-04 19:44:51 +0200 | [diff] [blame] | 145 | // TODO: should have a mock service to generate VALID fake data |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 146 | const THREADS: CommentThread[] = [ |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 147 | { |
| 148 | comments: [ |
| 149 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 150 | path: '/COMMIT_MSG', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 151 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 152 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 153 | name: 'user', |
| 154 | username: 'user', |
| 155 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 156 | patch_set: 2 as PatchSetNum, |
| 157 | robot_id: 'rb1' as RobotId, |
| 158 | id: 'ecf0b9fa_fe1a5f62' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 159 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 160 | updated: '2018-02-08 18:49:18.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 161 | message: 'test', |
| 162 | unresolved: true, |
| 163 | }, |
| 164 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 165 | path: '/COMMIT_MSG', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 166 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 167 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 168 | name: 'user', |
| 169 | username: 'user', |
| 170 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 171 | patch_set: 4 as PatchSetNum, |
| 172 | id: 'ecf0b9fa_fe1a5f62_1' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 173 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 174 | updated: '2018-02-08 18:49:18.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 175 | message: 'test', |
| 176 | unresolved: true, |
| 177 | }, |
| 178 | { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 179 | id: '503008e2_0ab203ee' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 180 | path: '/COMMIT_MSG', |
| 181 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 182 | in_reply_to: 'ecf0b9fa_fe1a5f62' as UrlEncodedCommentId, |
| 183 | updated: '2018-02-13 22:48:48.018000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 184 | message: 'draft', |
| 185 | unresolved: false, |
| 186 | __draft: true, |
| 187 | __draftID: '0.m683trwff68', |
| 188 | __editing: false, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 189 | patch_set: 2 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 190 | }, |
| 191 | ], |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 192 | patchNum: 4 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 193 | path: '/COMMIT_MSG', |
| 194 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 195 | rootId: 'ecf0b9fa_fe1a5f62' as UrlEncodedCommentId, |
Dhruv Srivastava | 794db3a | 2020-11-11 11:28:08 +0100 | [diff] [blame] | 196 | commentSide: CommentSide.REVISION, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 197 | }, |
| 198 | { |
| 199 | comments: [ |
| 200 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 201 | path: '/COMMIT_MSG', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 202 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 203 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 204 | name: 'user', |
| 205 | username: 'user', |
| 206 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 207 | patch_set: 3 as PatchSetNum, |
| 208 | id: 'ecf0b9fa_fe5f62' as UrlEncodedCommentId, |
| 209 | robot_id: 'rb2' as RobotId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 210 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 211 | updated: '2018-02-08 18:49:18.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 212 | message: 'test', |
| 213 | unresolved: true, |
| 214 | }, |
| 215 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 216 | path: 'test.txt', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 217 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 218 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 219 | name: 'user', |
| 220 | username: 'user', |
| 221 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 222 | patch_set: 3 as PatchSetNum, |
| 223 | id: '09a9fb0a_1484e6cf' as UrlEncodedCommentId, |
| 224 | side: CommentSide.PARENT, |
| 225 | updated: '2018-02-13 22:47:19.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 226 | message: 'Some comment on another patchset.', |
| 227 | unresolved: false, |
| 228 | }, |
| 229 | ], |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 230 | patchNum: 3 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 231 | path: 'test.txt', |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 232 | rootId: '09a9fb0a_1484e6cf' as UrlEncodedCommentId, |
| 233 | commentSide: CommentSide.PARENT, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 234 | }, |
| 235 | { |
| 236 | comments: [ |
| 237 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 238 | path: '/COMMIT_MSG', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 239 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 240 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 241 | name: 'user', |
| 242 | username: 'user', |
| 243 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 244 | patch_set: 2 as PatchSetNum, |
| 245 | id: '8caddf38_44770ec1' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 246 | line: 4, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 247 | updated: '2018-02-13 22:48:40.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 248 | message: 'Another unresolved comment', |
| 249 | unresolved: true, |
| 250 | }, |
| 251 | ], |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 252 | patchNum: 2 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 253 | path: '/COMMIT_MSG', |
| 254 | line: 4, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 255 | rootId: '8caddf38_44770ec1' as UrlEncodedCommentId, |
Dhruv Srivastava | 794db3a | 2020-11-11 11:28:08 +0100 | [diff] [blame] | 256 | commentSide: CommentSide.REVISION, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 257 | }, |
| 258 | { |
| 259 | comments: [ |
| 260 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 261 | path: '/COMMIT_MSG', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 262 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 263 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 264 | name: 'user', |
| 265 | username: 'user', |
| 266 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 267 | patch_set: 2 as PatchSetNum, |
| 268 | id: 'scaddf38_44770ec1' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 269 | line: 4, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 270 | updated: '2018-02-14 22:48:40.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 271 | message: 'Yet another unresolved comment', |
| 272 | unresolved: true, |
| 273 | }, |
| 274 | ], |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 275 | patchNum: 2 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 276 | path: '/COMMIT_MSG', |
| 277 | line: 4, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 278 | rootId: 'scaddf38_44770ec1' as UrlEncodedCommentId, |
Dhruv Srivastava | 794db3a | 2020-11-11 11:28:08 +0100 | [diff] [blame] | 279 | commentSide: CommentSide.REVISION, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 280 | }, |
| 281 | { |
| 282 | comments: [ |
| 283 | { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 284 | id: 'zcf0b9fa_fe1a5f62' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 285 | path: '/COMMIT_MSG', |
| 286 | line: 6, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 287 | updated: '2018-02-15 22:48:48.018000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 288 | message: 'resolved draft', |
| 289 | unresolved: false, |
| 290 | __draft: true, |
| 291 | __draftID: '0.m683trwff68', |
| 292 | __editing: false, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 293 | patch_set: 2 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 294 | }, |
| 295 | ], |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 296 | patchNum: 4 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 297 | path: '/COMMIT_MSG', |
| 298 | line: 6, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 299 | rootId: 'zcf0b9fa_fe1a5f62' as UrlEncodedCommentId, |
Dhruv Srivastava | 794db3a | 2020-11-11 11:28:08 +0100 | [diff] [blame] | 300 | commentSide: CommentSide.REVISION, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 301 | }, |
| 302 | { |
| 303 | comments: [ |
| 304 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 305 | path: '/COMMIT_MSG', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 306 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 307 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 308 | name: 'user', |
| 309 | username: 'user', |
| 310 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 311 | patch_set: 4 as PatchSetNum, |
| 312 | id: 'rc1' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 313 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 314 | updated: '2019-02-08 18:49:18.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 315 | message: 'test', |
| 316 | unresolved: true, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 317 | robot_id: 'rc1' as RobotId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 318 | }, |
| 319 | ], |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 320 | patchNum: 4 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 321 | path: '/COMMIT_MSG', |
| 322 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 323 | rootId: 'rc1' as UrlEncodedCommentId, |
Dhruv Srivastava | 794db3a | 2020-11-11 11:28:08 +0100 | [diff] [blame] | 324 | commentSide: CommentSide.REVISION, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 325 | }, |
| 326 | { |
| 327 | comments: [ |
| 328 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 329 | path: '/COMMIT_MSG', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 330 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 331 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 332 | name: 'user', |
| 333 | username: 'user', |
| 334 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 335 | patch_set: 4 as PatchSetNum, |
| 336 | id: 'rc2' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 337 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 338 | updated: '2019-03-08 18:49:18.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 339 | message: 'test', |
| 340 | unresolved: true, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 341 | robot_id: 'rc2' as RobotId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 342 | }, |
| 343 | { |
Dhruv Srivastava | 3dfaf36 | 2020-12-01 21:53:59 +0100 | [diff] [blame] | 344 | path: '/COMMIT_MSG', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 345 | author: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 346 | _account_id: 1000000 as AccountId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 347 | name: 'user', |
| 348 | username: 'user', |
| 349 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 350 | patch_set: 4 as PatchSetNum, |
| 351 | id: 'c2_1' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 352 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 353 | updated: '2019-03-08 18:49:18.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 354 | message: 'test', |
| 355 | unresolved: true, |
| 356 | }, |
| 357 | ], |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 358 | patchNum: 4 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 359 | path: '/COMMIT_MSG', |
| 360 | line: 5, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 361 | rootId: 'rc2' as UrlEncodedCommentId, |
Dhruv Srivastava | 794db3a | 2020-11-11 11:28:08 +0100 | [diff] [blame] | 362 | commentSide: CommentSide.REVISION, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 363 | }, |
| 364 | ]; |
| 365 | |
| 366 | setup(() => { |
Dmitrii Filippov | f97fc6e | 2020-04-07 09:59:22 +0200 | [diff] [blame] | 367 | // Since pluginEndpoints are global, must reset state. |
| 368 | _testOnly_resetEndpoints(); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 369 | navigateToChangeStub = sinon.stub(GerritNav, 'navigateToChange'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 370 | |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 371 | stubRestApi('getConfig').returns( |
| 372 | Promise.resolve({ |
| 373 | ...createServerInfo(), |
| 374 | user: { |
| 375 | ...createUserConfig(), |
| 376 | anonymous_coward_name: 'test coward name', |
| 377 | }, |
| 378 | }) |
| 379 | ); |
| 380 | stubRestApi('getAccount').returns(Promise.resolve(undefined)); |
| 381 | stubRestApi('getDiffComments').returns(Promise.resolve({})); |
| 382 | stubRestApi('getDiffRobotComments').returns(Promise.resolve({})); |
| 383 | stubRestApi('getDiffDrafts').returns(Promise.resolve({})); |
Dmitrii Filippov | acd39a2 | 2020-04-02 10:31:43 +0200 | [diff] [blame] | 384 | element = fixture.instantiate(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 385 | element._changeNum = 1 as NumericChangeId; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 386 | sinon.stub(element.$.actions, 'reload').returns(Promise.resolve()); |
Dhruv Srivastava | 12e2c99 | 2020-09-01 16:40:21 +0200 | [diff] [blame] | 387 | getPluginLoader().loadPlugins([]); |
Dmitrii Filippov | 5f25dc0 | 2020-04-07 18:49:00 +0200 | [diff] [blame] | 388 | pluginApi.install( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 389 | plugin => { |
| 390 | plugin.registerDynamicCustomComponent( |
| 391 | 'change-view-tab-header', |
| 392 | 'gr-checks-change-view-tab-header-view' |
| 393 | ); |
| 394 | plugin.registerDynamicCustomComponent( |
| 395 | 'change-view-tab-content', |
| 396 | 'gr-checks-view' |
| 397 | ); |
| 398 | }, |
| 399 | '0.1', |
| 400 | 'http://some/plugins/url.html' |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 401 | ); |
| 402 | }); |
| 403 | |
| 404 | teardown(done => { |
| 405 | flush(() => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 406 | done(); |
| 407 | }); |
| 408 | }); |
| 409 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 410 | const getCustomCssValue = (cssParam: string) => |
| 411 | getComputedStyleValue(cssParam, element); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 412 | |
Dhruv Srivastava | 163de6f | 2020-06-04 09:40:28 +0000 | [diff] [blame] | 413 | test('_handleMessageAnchorTap', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 414 | element._changeNum = 1 as NumericChangeId; |
Dhruv Srivastava | 163de6f | 2020-06-04 09:40:28 +0000 | [diff] [blame] | 415 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 416 | basePatchNum: ParentPatchSetNum, |
| 417 | patchNum: 1 as PatchSetNum, |
Dhruv Srivastava | 163de6f | 2020-06-04 09:40:28 +0000 | [diff] [blame] | 418 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 419 | element._change = createChange(); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 420 | const getUrlStub = sinon.stub(GerritNav, 'getUrlForChange'); |
| 421 | const replaceStateStub = sinon.stub(history, 'replaceState'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 422 | element._handleMessageAnchorTap( |
| 423 | new CustomEvent('message-anchor-tap', {detail: {id: 'a12345'}}) |
| 424 | ); |
Dhruv Srivastava | 163de6f | 2020-06-04 09:40:28 +0000 | [diff] [blame] | 425 | |
| 426 | assert.equal(getUrlStub.lastCall.args[4], '#message-a12345'); |
| 427 | assert.isTrue(replaceStateStub.called); |
| 428 | }); |
| 429 | |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 430 | test('_handleDiffAgainstBase', () => { |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 431 | element._change = { |
| 432 | ...createChange(), |
| 433 | revisions: createRevisions(10), |
| 434 | }; |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 435 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 436 | patchNum: 3 as PatchSetNum, |
| 437 | basePatchNum: 1 as PatchSetNum, |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 438 | }; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 439 | sinon.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 440 | element._handleDiffAgainstBase(new CustomEvent('') as CustomKeyboardEvent); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 441 | assert(navigateToChangeStub.called); |
| 442 | const args = navigateToChangeStub.getCall(0).args; |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 443 | assert.equal(args[0], element._change); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 444 | assert.equal(args[1], 3 as PatchSetNum); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 445 | }); |
| 446 | |
| 447 | test('_handleDiffAgainstLatest', () => { |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 448 | element._change = { |
| 449 | ...createChange(), |
| 450 | revisions: createRevisions(10), |
| 451 | }; |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 452 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 453 | basePatchNum: 1 as PatchSetNum, |
| 454 | patchNum: 3 as PatchSetNum, |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 455 | }; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 456 | sinon.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 457 | element._handleDiffAgainstLatest( |
| 458 | new CustomEvent('') as CustomKeyboardEvent |
| 459 | ); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 460 | assert(navigateToChangeStub.called); |
| 461 | const args = navigateToChangeStub.getCall(0).args; |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 462 | assert.equal(args[0], element._change); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 463 | assert.equal(args[1], 10 as PatchSetNum); |
| 464 | assert.equal(args[2], 1 as PatchSetNum); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 465 | }); |
| 466 | |
| 467 | test('_handleDiffBaseAgainstLeft', () => { |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 468 | element._change = { |
| 469 | ...createChange(), |
| 470 | revisions: createRevisions(10), |
| 471 | }; |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 472 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 473 | patchNum: 3 as PatchSetNum, |
| 474 | basePatchNum: 1 as PatchSetNum, |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 475 | }; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 476 | sinon.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 477 | element._handleDiffBaseAgainstLeft( |
| 478 | new CustomEvent('') as CustomKeyboardEvent |
| 479 | ); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 480 | assert(navigateToChangeStub.called); |
| 481 | const args = navigateToChangeStub.getCall(0).args; |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 482 | assert.equal(args[0], element._change); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 483 | assert.equal(args[1], 1 as PatchSetNum); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 484 | }); |
| 485 | |
| 486 | test('_handleDiffRightAgainstLatest', () => { |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 487 | element._change = { |
| 488 | ...createChange(), |
| 489 | revisions: createRevisions(10), |
| 490 | }; |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 491 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 492 | basePatchNum: 1 as PatchSetNum, |
| 493 | patchNum: 3 as PatchSetNum, |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 494 | }; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 495 | sinon.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 496 | element._handleDiffRightAgainstLatest( |
| 497 | new CustomEvent('') as CustomKeyboardEvent |
| 498 | ); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 499 | assert(navigateToChangeStub.called); |
| 500 | const args = navigateToChangeStub.getCall(0).args; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 501 | assert.equal(args[1], 10 as PatchSetNum); |
| 502 | assert.equal(args[2], 3 as PatchSetNum); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 503 | }); |
| 504 | |
| 505 | test('_handleDiffBaseAgainstLatest', () => { |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 506 | element._change = { |
| 507 | ...createChange(), |
| 508 | revisions: createRevisions(10), |
| 509 | }; |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 510 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 511 | basePatchNum: 1 as PatchSetNum, |
| 512 | patchNum: 3 as PatchSetNum, |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 513 | }; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 514 | sinon.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 515 | element._handleDiffBaseAgainstLatest( |
| 516 | new CustomEvent('') as CustomKeyboardEvent |
| 517 | ); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 518 | assert(navigateToChangeStub.called); |
| 519 | const args = navigateToChangeStub.getCall(0).args; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 520 | assert.equal(args[1], 10 as PatchSetNum); |
Dhruv Srivastava | 4757b35 | 2020-06-12 15:41:42 +0200 | [diff] [blame] | 521 | assert.isNotOk(args[2]); |
| 522 | }); |
| 523 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 524 | suite('plugins adding to file tab', () => { |
| 525 | setup(done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 526 | element._changeNum = 1 as NumericChangeId; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 527 | // Resolving it here instead of during setup() as other tests depend |
| 528 | // on flush() not being called during setup. |
| 529 | flush(() => done()); |
Andrew Bonventre | 547b8ab | 2015-12-01 01:02:00 -0500 | [diff] [blame] | 530 | }); |
| 531 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 532 | test('plugin added tab shows up as a dynamic endpoint', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 533 | assert( |
| 534 | element._dynamicTabHeaderEndpoints.includes( |
| 535 | 'change-view-tab-header-url' |
| 536 | ) |
| 537 | ); |
| 538 | const primaryTabs = element.shadowRoot!.querySelector('#primaryTabs')!; |
| 539 | const paperTabs = primaryTabs.querySelectorAll<HTMLElement>('paper-tab'); |
Dhruv Srivastava | 929af7f | 2020-05-13 19:10:05 +0200 | [diff] [blame] | 540 | // 4 Tabs are : Files, Comment Threads, Plugin, Findings |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 541 | assert.equal(primaryTabs.querySelectorAll('paper-tab').length, 4); |
| 542 | assert.equal(paperTabs[2].dataset.name, 'change-view-tab-header-url'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 543 | }); |
| 544 | |
Tao Zhou | 4fd32d5 | 2020-04-06 17:23:10 +0200 | [diff] [blame] | 545 | test('_setActivePrimaryTab switched tab correctly', done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 546 | element._setActivePrimaryTab( |
| 547 | new CustomEvent('', { |
| 548 | detail: {tab: 'change-view-tab-header-url'}, |
| 549 | }) |
| 550 | ); |
Becky Siegel | ba3f589 | 2017-05-12 12:28:13 -0700 | [diff] [blame] | 551 | flush(() => { |
Tao Zhou | 4fd32d5 | 2020-04-06 17:23:10 +0200 | [diff] [blame] | 552 | assert.equal(element._activeTabs[0], 'change-view-tab-header-url'); |
| 553 | done(); |
| 554 | }); |
| 555 | }); |
| 556 | |
| 557 | test('show-primary-tab switched primary tab correctly', done => { |
Paladox none | 6b055dc | 2020-06-28 14:53:18 +0000 | [diff] [blame] | 558 | element.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 559 | new CustomEvent('show-primary-tab', { |
| 560 | composed: true, |
| 561 | bubbles: true, |
| 562 | detail: { |
| 563 | tab: 'change-view-tab-header-url', |
| 564 | }, |
| 565 | }) |
| 566 | ); |
Tao Zhou | 4fd32d5 | 2020-04-06 17:23:10 +0200 | [diff] [blame] | 567 | flush(() => { |
| 568 | assert.equal(element._activeTabs[0], 'change-view-tab-header-url'); |
| 569 | done(); |
| 570 | }); |
| 571 | }); |
| 572 | |
| 573 | test('param change should switch primary tab correctly', done => { |
Dmitrii Filippov | e903bbf | 2020-05-06 12:57:39 +0200 | [diff] [blame] | 574 | assert.equal(element._activeTabs[0], PrimaryTab.FILES); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 575 | const queryMap = new Map<string, string>(); |
Dmitrii Filippov | e903bbf | 2020-05-06 12:57:39 +0200 | [diff] [blame] | 576 | queryMap.set('tab', PrimaryTab.FINDINGS); |
Tao Zhou | 4fd32d5 | 2020-04-06 17:23:10 +0200 | [diff] [blame] | 577 | // view is required |
Tao Zhou | 4cd35cb | 2020-07-22 11:28:22 +0200 | [diff] [blame] | 578 | element.params = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 579 | ...createAppElementChangeViewParams(), |
| 580 | ...element.params, |
| 581 | queryMap, |
| 582 | }; |
Tao Zhou | 4fd32d5 | 2020-04-06 17:23:10 +0200 | [diff] [blame] | 583 | flush(() => { |
Dmitrii Filippov | e903bbf | 2020-05-06 12:57:39 +0200 | [diff] [blame] | 584 | assert.equal(element._activeTabs[0], PrimaryTab.FINDINGS); |
Tao Zhou | 4fd32d5 | 2020-04-06 17:23:10 +0200 | [diff] [blame] | 585 | done(); |
| 586 | }); |
| 587 | }); |
| 588 | |
| 589 | test('invalid param change should not switch primary tab', done => { |
Dmitrii Filippov | e903bbf | 2020-05-06 12:57:39 +0200 | [diff] [blame] | 590 | assert.equal(element._activeTabs[0], PrimaryTab.FILES); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 591 | const queryMap = new Map<string, string>(); |
Tao Zhou | 4fd32d5 | 2020-04-06 17:23:10 +0200 | [diff] [blame] | 592 | queryMap.set('tab', 'random'); |
| 593 | // view is required |
Tao Zhou | 4cd35cb | 2020-07-22 11:28:22 +0200 | [diff] [blame] | 594 | element.params = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 595 | ...createAppElementChangeViewParams(), |
| 596 | ...element.params, |
| 597 | queryMap, |
| 598 | }; |
Tao Zhou | 4fd32d5 | 2020-04-06 17:23:10 +0200 | [diff] [blame] | 599 | flush(() => { |
Dmitrii Filippov | e903bbf | 2020-05-06 12:57:39 +0200 | [diff] [blame] | 600 | assert.equal(element._activeTabs[0], PrimaryTab.FILES); |
Viktar Donich | 29e1ce5 | 2017-03-28 17:02:44 -0700 | [diff] [blame] | 601 | done(); |
| 602 | }); |
Kasper Nilsson | f074373 | 2016-10-18 13:01:10 -0700 | [diff] [blame] | 603 | }); |
| 604 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 605 | test('switching tab sets _selectedTabPluginEndpoint', done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 606 | const paperTabs = element.shadowRoot!.querySelector('#primaryTabs')!; |
| 607 | tap(paperTabs.querySelectorAll('paper-tab')[2]); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 608 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 609 | assert.equal( |
| 610 | element._selectedTabPluginEndpoint, |
| 611 | 'change-view-tab-content-url' |
| 612 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 613 | done(); |
| 614 | }); |
| 615 | }); |
| 616 | }); |
Paladox none | 7acb7ac | 2017-11-09 18:06:18 +0000 | [diff] [blame] | 617 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 618 | suite('keyboard shortcuts', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 619 | let clock: SinonFakeTimers; |
Dhruv Srivastava | 4caf084 | 2020-09-18 11:50:33 +0200 | [diff] [blame] | 620 | setup(() => { |
| 621 | clock = sinon.useFakeTimers(); |
| 622 | }); |
| 623 | |
| 624 | teardown(() => { |
| 625 | clock.restore(); |
| 626 | sinon.restore(); |
| 627 | }); |
| 628 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 629 | test('t to add topic', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 630 | const editStub = sinon.stub(element.$.metadata, 'editTopic'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 631 | pressAndReleaseKeyOn(element, 83, null, 't'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 632 | assert(editStub.called); |
| 633 | }); |
| 634 | |
| 635 | test('S should toggle the CL star', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 636 | const starStub = sinon.stub(element.$.changeStar, 'toggleStar'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 637 | pressAndReleaseKeyOn(element, 83, null, 's'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 638 | assert(starStub.called); |
| 639 | }); |
| 640 | |
Dhruv Srivastava | 4caf084 | 2020-09-18 11:50:33 +0200 | [diff] [blame] | 641 | test('toggle star is throttled', () => { |
| 642 | const starStub = sinon.stub(element.$.changeStar, 'toggleStar'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 643 | pressAndReleaseKeyOn(element, 83, null, 's'); |
Dhruv Srivastava | 4caf084 | 2020-09-18 11:50:33 +0200 | [diff] [blame] | 644 | assert(starStub.called); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 645 | pressAndReleaseKeyOn(element, 83, null, 's'); |
Dhruv Srivastava | 4caf084 | 2020-09-18 11:50:33 +0200 | [diff] [blame] | 646 | assert.equal(starStub.callCount, 1); |
| 647 | clock.tick(1000); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 648 | pressAndReleaseKeyOn(element, 83, null, 's'); |
Dhruv Srivastava | 4caf084 | 2020-09-18 11:50:33 +0200 | [diff] [blame] | 649 | assert.equal(starStub.callCount, 2); |
| 650 | }); |
| 651 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 652 | test('U should navigate to root if no backPage set', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 653 | const relativeNavStub = sinon.stub(GerritNav, 'navigateToRelativeUrl'); |
| 654 | pressAndReleaseKeyOn(element, 85, null, 'u'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 655 | assert.isTrue(relativeNavStub.called); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 656 | assert.isTrue( |
| 657 | relativeNavStub.lastCall.calledWithExactly(GerritNav.getUrlForRoot()) |
| 658 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 659 | }); |
| 660 | |
| 661 | test('U should navigate to backPage if set', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 662 | const relativeNavStub = sinon.stub(GerritNav, 'navigateToRelativeUrl'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 663 | element.backPage = '/dashboard/self'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 664 | pressAndReleaseKeyOn(element, 85, null, 'u'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 665 | assert.isTrue(relativeNavStub.called); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 666 | assert.isTrue( |
| 667 | relativeNavStub.lastCall.calledWithExactly('/dashboard/self') |
| 668 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 669 | }); |
| 670 | |
| 671 | test('A fires an error event when not logged in', done => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 672 | sinon.stub(element, '_getLoggedIn').returns(Promise.resolve(false)); |
| 673 | const loggedInErrorSpy = sinon.spy(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 674 | element.addEventListener('show-auth-required', loggedInErrorSpy); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 675 | pressAndReleaseKeyOn(element, 65, null, 'a'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 676 | flush(() => { |
| 677 | assert.isFalse(element.$.replyOverlay.opened); |
| 678 | assert.isTrue(loggedInErrorSpy.called); |
| 679 | done(); |
| 680 | }); |
| 681 | }); |
| 682 | |
| 683 | test('shift A does not open reply overlay', done => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 684 | sinon.stub(element, '_getLoggedIn').returns(Promise.resolve(true)); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 685 | pressAndReleaseKeyOn(element, 65, 'shift', 'a'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 686 | flush(() => { |
| 687 | assert.isFalse(element.$.replyOverlay.opened); |
| 688 | done(); |
| 689 | }); |
| 690 | }); |
| 691 | |
| 692 | test('A toggles overlay when logged in', done => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 693 | sinon.stub(element, '_getLoggedIn').returns(Promise.resolve(true)); |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 694 | element._change = { |
| 695 | ...createChange(), |
| 696 | revisions: createRevisions(1), |
| 697 | messages: createChangeMessages(1), |
| 698 | }; |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 699 | element._change.labels = {}; |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 700 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 701 | Promise.resolve({ |
| 702 | ...createChange(), |
| 703 | // element has latest info |
| 704 | revisions: createRevisions(1), |
| 705 | messages: createChangeMessages(1), |
| 706 | current_revision: 'rev1' as CommitId, |
| 707 | }) |
| 708 | ); |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 709 | |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 710 | const openSpy = sinon.spy(element, '_openReplyDialog'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 711 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 712 | pressAndReleaseKeyOn(element, 65, null, 'a'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 713 | flush(() => { |
| 714 | assert.isTrue(element.$.replyOverlay.opened); |
| 715 | element.$.replyOverlay.close(); |
| 716 | assert.isFalse(element.$.replyOverlay.opened); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 717 | assert( |
| 718 | openSpy.lastCall.calledWithExactly( |
| 719 | element.$.replyDialog.FocusTarget.ANY |
| 720 | ), |
| 721 | '_openReplyDialog should have been passed ANY' |
| 722 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 723 | assert.equal(openSpy.callCount, 1); |
| 724 | done(); |
| 725 | }); |
| 726 | }); |
| 727 | |
| 728 | test('fullscreen-overlay-opened hides content', () => { |
| 729 | element._loggedIn = true; |
| 730 | element._loading = false; |
| 731 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 732 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 733 | labels: {}, |
| 734 | actions: { |
| 735 | abandon: { |
| 736 | enabled: true, |
| 737 | label: 'Abandon', |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 738 | method: HttpMethod.POST, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 739 | title: 'Abandon', |
| 740 | }, |
| 741 | }, |
| 742 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 743 | const handlerSpy = sinon.spy(element, '_handleHideBackgroundContent'); |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 744 | element.$.replyDialog.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 745 | new CustomEvent('fullscreen-overlay-opened', { |
| 746 | composed: true, |
| 747 | bubbles: true, |
| 748 | }) |
| 749 | ); |
| 750 | assert.isTrue(handlerSpy.called); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 751 | assert.isTrue(element.$.mainContent.classList.contains('overlayOpen')); |
| 752 | assert.equal(getComputedStyle(element.$.actions).display, 'flex'); |
| 753 | }); |
| 754 | |
| 755 | test('fullscreen-overlay-closed shows content', () => { |
| 756 | element._loggedIn = true; |
| 757 | element._loading = false; |
| 758 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 759 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 760 | labels: {}, |
| 761 | actions: { |
| 762 | abandon: { |
| 763 | enabled: true, |
| 764 | label: 'Abandon', |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 765 | method: HttpMethod.POST, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 766 | title: 'Abandon', |
| 767 | }, |
| 768 | }, |
| 769 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 770 | const handlerSpy = sinon.spy(element, '_handleShowBackgroundContent'); |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 771 | element.$.replyDialog.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 772 | new CustomEvent('fullscreen-overlay-closed', { |
| 773 | composed: true, |
| 774 | bubbles: true, |
| 775 | }) |
| 776 | ); |
| 777 | assert.isTrue(handlerSpy.called); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 778 | assert.isFalse(element.$.mainContent.classList.contains('overlayOpen')); |
| 779 | }); |
| 780 | |
| 781 | test('expand all messages when expand-diffs fired', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 782 | const handleExpand = sinon.stub(element.$.fileList, 'expandAllDiffs'); |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 783 | element.$.fileListHeader.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 784 | new CustomEvent('expand-diffs', { |
| 785 | composed: true, |
| 786 | bubbles: true, |
| 787 | }) |
| 788 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 789 | assert.isTrue(handleExpand.called); |
| 790 | }); |
| 791 | |
| 792 | test('collapse all messages when collapse-diffs fired', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 793 | const handleCollapse = sinon.stub(element.$.fileList, 'collapseAllDiffs'); |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 794 | element.$.fileListHeader.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 795 | new CustomEvent('collapse-diffs', { |
| 796 | composed: true, |
| 797 | bubbles: true, |
| 798 | }) |
| 799 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 800 | assert.isTrue(handleCollapse.called); |
| 801 | }); |
| 802 | |
| 803 | test('X should expand all messages', done => { |
| 804 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 805 | const handleExpand = sinon.stub( |
| 806 | element.messagesList!, |
| 807 | 'handleExpandCollapse' |
| 808 | ); |
| 809 | pressAndReleaseKeyOn(element, 88, null, 'x'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 810 | assert(handleExpand.calledWith(true)); |
| 811 | done(); |
| 812 | }); |
| 813 | }); |
| 814 | |
| 815 | test('Z should collapse all messages', done => { |
| 816 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 817 | const handleExpand = sinon.stub( |
| 818 | element.messagesList!, |
| 819 | 'handleExpandCollapse' |
| 820 | ); |
| 821 | pressAndReleaseKeyOn(element, 90, null, 'z'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 822 | assert(handleExpand.calledWith(false)); |
| 823 | done(); |
| 824 | }); |
| 825 | }); |
| 826 | |
Dhruv Srivastava | 8449e77 | 2020-07-22 11:57:29 +0200 | [diff] [blame] | 827 | test('reload event from reply dialog is processed', () => { |
| 828 | const handleReloadStub = sinon.stub(element, '_reload'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 829 | element.$.replyDialog.dispatchEvent( |
| 830 | new CustomEvent('reload', { |
| 831 | detail: {clearPatchset: true}, |
| 832 | bubbles: true, |
| 833 | composed: true, |
| 834 | }) |
| 835 | ); |
Dhruv Srivastava | 8449e77 | 2020-07-22 11:57:29 +0200 | [diff] [blame] | 836 | assert.isTrue(handleReloadStub.called); |
| 837 | }); |
| 838 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 839 | test('shift + R should fetch and navigate to the latest patch set', done => { |
| 840 | element._changeNum = TEST_NUMERIC_CHANGE_ID; |
| 841 | element._patchRange = { |
| 842 | basePatchNum: ParentPatchSetNum, |
| 843 | patchNum: 1 as PatchSetNum, |
| 844 | }; |
| 845 | element._change = { |
| 846 | ...createChange(), |
| 847 | revisions: { |
| 848 | rev1: createRevision(), |
| 849 | }, |
| 850 | current_revision: 'rev1' as CommitId, |
| 851 | status: ChangeStatus.NEW, |
| 852 | labels: {}, |
| 853 | actions: {}, |
| 854 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 855 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 856 | const reloadChangeStub = sinon.stub(element, '_reload'); |
| 857 | pressAndReleaseKeyOn(element, 82, 'shift', 'r'); |
| 858 | flush(() => { |
| 859 | assert.isTrue(reloadChangeStub.called); |
| 860 | done(); |
| 861 | }); |
| 862 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 863 | |
| 864 | test('d should open download overlay', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 865 | const stub = sinon |
| 866 | .stub(element.$.downloadOverlay, 'open') |
| 867 | .returns(Promise.resolve()); |
| 868 | pressAndReleaseKeyOn(element, 68, null, 'd'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 869 | assert.isTrue(stub.called); |
| 870 | }); |
| 871 | |
| 872 | test(', should open diff preferences', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 873 | const stub = sinon.stub( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 874 | element.$.fileList.$.diffPreferencesDialog, |
| 875 | 'open' |
| 876 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 877 | element._loggedIn = false; |
| 878 | element.disableDiffPrefs = true; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 879 | pressAndReleaseKeyOn(element, 188, null, ','); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 880 | assert.isFalse(stub.called); |
| 881 | |
| 882 | element._loggedIn = true; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 883 | pressAndReleaseKeyOn(element, 188, null, ','); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 884 | assert.isFalse(stub.called); |
| 885 | |
| 886 | element.disableDiffPrefs = false; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 887 | pressAndReleaseKeyOn(element, 188, null, ','); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 888 | assert.isTrue(stub.called); |
| 889 | }); |
| 890 | |
| 891 | test('m should toggle diff mode', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 892 | sinon.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 893 | const setModeStub = sinon.stub( |
| 894 | element.$.fileListHeader, |
| 895 | 'setDiffViewMode' |
| 896 | ); |
| 897 | const e = {preventDefault: () => {}} as CustomKeyboardEvent; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 898 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 899 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 900 | element.viewState.diffMode = DiffViewMode.SIDE_BY_SIDE; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 901 | element._handleToggleDiffMode(e); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 902 | assert.isTrue(setModeStub.calledWith(DiffViewMode.UNIFIED)); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 903 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 904 | element.viewState.diffMode = DiffViewMode.UNIFIED; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 905 | element._handleToggleDiffMode(e); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 906 | assert.isTrue(setModeStub.calledWith(DiffViewMode.SIDE_BY_SIDE)); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 907 | }); |
| 908 | }); |
| 909 | |
| 910 | suite('reloading drafts', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 911 | let reloadStub: SinonStubbedMember<typeof element.$.commentAPI.reloadDrafts>; |
| 912 | const drafts: {[path: string]: UIDraft[]} = { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 913 | 'testfile.txt': [ |
| 914 | { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 915 | patch_set: 5 as PatchSetNum, |
| 916 | id: 'dd2982f5_c01c9e6a' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 917 | line: 1, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 918 | updated: '2017-11-08 18:47:45.000000000' as Timestamp, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 919 | message: 'test', |
| 920 | unresolved: true, |
| 921 | }, |
| 922 | ], |
| 923 | }; |
| 924 | setup(() => { |
| 925 | // Fake computeDraftCount as its required for ChangeComments, |
| 926 | // see gr-comment-api#reloadDrafts. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 927 | reloadStub = sinon.stub(element.$.commentAPI, 'reloadDrafts').returns( |
| 928 | Promise.resolve({ |
| 929 | drafts, |
| 930 | getAllThreadsForChange: () => [] as CommentThread[], |
| 931 | computeDraftCount: () => 1, |
| 932 | } as ChangeComments) |
| 933 | ); |
| 934 | element._changeNum = 1 as NumericChangeId; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 935 | }); |
| 936 | |
| 937 | test('drafts are reloaded when reload-drafts fired', done => { |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 938 | element.$.fileList.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 939 | new CustomEvent('reload-drafts', { |
| 940 | detail: { |
| 941 | resolve: () => { |
| 942 | assert.isTrue(reloadStub.called); |
| 943 | assert.deepEqual(element._diffDrafts, drafts); |
| 944 | done(); |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 945 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 946 | }, |
| 947 | composed: true, |
| 948 | bubbles: true, |
| 949 | }) |
| 950 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 951 | }); |
| 952 | |
| 953 | test('drafts are reloaded when comment-refresh fired', () => { |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 954 | element.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 955 | new CustomEvent('comment-refresh', { |
| 956 | composed: true, |
| 957 | bubbles: true, |
| 958 | }) |
| 959 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 960 | assert.isTrue(reloadStub.called); |
| 961 | }); |
| 962 | }); |
| 963 | |
Tao Zhou | 18738b9 | 2020-05-04 19:44:51 +0200 | [diff] [blame] | 964 | suite('_recomputeComments', () => { |
| 965 | setup(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 966 | element._changeNum = TEST_NUMERIC_CHANGE_ID; |
| 967 | element._change = createChange(); |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 968 | flush(); |
Tao Zhou | 18738b9 | 2020-05-04 19:44:51 +0200 | [diff] [blame] | 969 | // Fake computeDraftCount as its required for ChangeComments, |
| 970 | // see gr-comment-api#reloadDrafts. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 971 | sinon.stub(element.$.commentAPI, 'reloadDrafts').returns( |
| 972 | Promise.resolve({ |
| 973 | drafts: {}, |
| 974 | getAllThreadsForChange: () => THREADS, |
| 975 | computeDraftCount: () => 0, |
| 976 | } as ChangeComments) |
| 977 | ); |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 978 | element._change = createChange(); |
Ben Rohlfs | 739b1d2 | 2020-09-21 12:26:31 +0200 | [diff] [blame] | 979 | element._changeNum = element._change._number; |
Tao Zhou | 18738b9 | 2020-05-04 19:44:51 +0200 | [diff] [blame] | 980 | }); |
| 981 | |
| 982 | test('draft threads should be a new copy with correct states', done => { |
| 983 | element.$.fileList.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 984 | new CustomEvent('reload-drafts', { |
| 985 | detail: { |
| 986 | resolve: () => { |
| 987 | assert.equal(element._draftCommentThreads!.length, 2); |
| 988 | assert.equal( |
| 989 | element._draftCommentThreads![0].rootId, |
| 990 | THREADS[0].rootId |
| 991 | ); |
| 992 | assert.notEqual( |
| 993 | element._draftCommentThreads![0].comments, |
| 994 | THREADS[0].comments |
| 995 | ); |
| 996 | assert.notEqual( |
| 997 | element._draftCommentThreads![0].comments[0], |
| 998 | THREADS[0].comments[0] |
| 999 | ); |
| 1000 | assert.isTrue( |
| 1001 | element |
| 1002 | ._draftCommentThreads![0].comments.slice(0, 2) |
| 1003 | .every(c => c.collapsed === true) |
| 1004 | ); |
Tao Zhou | 18738b9 | 2020-05-04 19:44:51 +0200 | [diff] [blame] | 1005 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1006 | assert.isTrue( |
| 1007 | element._draftCommentThreads![0].comments[2].collapsed === false |
| 1008 | ); |
| 1009 | done(); |
Tao Zhou | 18738b9 | 2020-05-04 19:44:51 +0200 | [diff] [blame] | 1010 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1011 | }, |
| 1012 | composed: true, |
| 1013 | bubbles: true, |
| 1014 | }) |
| 1015 | ); |
Tao Zhou | 18738b9 | 2020-05-04 19:44:51 +0200 | [diff] [blame] | 1016 | }); |
| 1017 | }); |
| 1018 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1019 | test('diff comments modified', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1020 | const reloadThreadsSpy = sinon.spy(element, '_handleReloadCommentThreads'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1021 | return element._reloadComments().then(() => { |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 1022 | element.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1023 | new CustomEvent('diff-comments-modified', { |
| 1024 | composed: true, |
| 1025 | bubbles: true, |
| 1026 | }) |
| 1027 | ); |
| 1028 | assert.isTrue(reloadThreadsSpy.called); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1029 | }); |
| 1030 | }); |
| 1031 | |
| 1032 | test('thread list modified', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1033 | const reloadDiffSpy = sinon.spy(element, '_handleReloadDiffComments'); |
Dhruv Srivastava | 929af7f | 2020-05-13 19:10:05 +0200 | [diff] [blame] | 1034 | element._activeTabs = [PrimaryTab.COMMENT_THREADS, SecondaryTab.CHANGE_LOG]; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 1035 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1036 | |
| 1037 | return element._reloadComments().then(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1038 | element.threadList!.dispatchEvent( |
| 1039 | new CustomEvent('thread-list-modified', { |
| 1040 | composed: true, |
| 1041 | bubbles: true, |
| 1042 | }) |
| 1043 | ); |
| 1044 | assert.isTrue(reloadDiffSpy.called); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1045 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1046 | let draftStub = sinon |
| 1047 | .stub(element._changeComments!, 'computeDraftCount') |
| 1048 | .returns(1); |
| 1049 | assert.equal( |
| 1050 | element._computeTotalCommentCounts(5, element._changeComments!), |
| 1051 | '5 unresolved, 1 draft' |
| 1052 | ); |
| 1053 | assert.equal( |
| 1054 | element._computeTotalCommentCounts(0, element._changeComments!), |
| 1055 | '1 draft' |
| 1056 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1057 | draftStub.restore(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1058 | draftStub = sinon |
| 1059 | .stub(element._changeComments!, 'computeDraftCount') |
| 1060 | .returns(0); |
| 1061 | assert.equal( |
| 1062 | element._computeTotalCommentCounts(0, element._changeComments!), |
| 1063 | '' |
| 1064 | ); |
| 1065 | assert.equal( |
| 1066 | element._computeTotalCommentCounts(1, element._changeComments!), |
| 1067 | '1 unresolved' |
| 1068 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1069 | draftStub.restore(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1070 | draftStub = sinon |
| 1071 | .stub(element._changeComments!, 'computeDraftCount') |
| 1072 | .returns(2); |
| 1073 | assert.equal( |
| 1074 | element._computeTotalCommentCounts(1, element._changeComments!), |
| 1075 | '1 unresolved, 2 drafts' |
| 1076 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1077 | draftStub.restore(); |
| 1078 | }); |
| 1079 | }); |
| 1080 | |
| 1081 | suite('thread list and change log tabs', () => { |
| 1082 | setup(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1083 | element._changeNum = TEST_NUMERIC_CHANGE_ID; |
Kasper Nilsson | 9c1a3db | 2018-10-19 15:11:07 -0700 | [diff] [blame] | 1084 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1085 | basePatchNum: ParentPatchSetNum, |
| 1086 | patchNum: 1 as PatchSetNum, |
Kasper Nilsson | 9c1a3db | 2018-10-19 15:11:07 -0700 | [diff] [blame] | 1087 | }; |
Becky Siegel | 9b03dd2 | 2017-10-26 14:57:32 -0700 | [diff] [blame] | 1088 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1089 | ...createChange(), |
Becky Siegel | 9b03dd2 | 2017-10-26 14:57:32 -0700 | [diff] [blame] | 1090 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1091 | rev2: createRevision(2), |
| 1092 | rev1: createRevision(1), |
| 1093 | rev13: createRevision(13), |
| 1094 | rev3: createRevision(3), |
Kasper Nilsson | f074373 | 2016-10-18 13:01:10 -0700 | [diff] [blame] | 1095 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1096 | current_revision: 'rev3' as CommitId, |
| 1097 | status: ChangeStatus.NEW, |
Kasper Nilsson | f074373 | 2016-10-18 13:01:10 -0700 | [diff] [blame] | 1098 | labels: { |
| 1099 | test: { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1100 | all: [], |
Kasper Nilsson | f074373 | 2016-10-18 13:01:10 -0700 | [diff] [blame] | 1101 | default_value: 0, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1102 | values: {}, |
Kasper Nilsson | f074373 | 2016-10-18 13:01:10 -0700 | [diff] [blame] | 1103 | approved: {}, |
| 1104 | }, |
| 1105 | }, |
| 1106 | }; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1107 | sinon.stub(element.$.relatedChanges, 'reload'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1108 | sinon.stub(element, '_reload').returns(Promise.resolve([])); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1109 | sinon.spy(element, '_paramsChanged'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1110 | element.params = createAppElementChangeViewParams(); |
Kasper Nilsson | 34a5d89 | 2018-04-11 11:10:53 -0700 | [diff] [blame] | 1111 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1112 | }); |
| 1113 | |
| 1114 | suite('Findings comment tab', () => { |
| 1115 | setup(done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1116 | element._changeNum = TEST_NUMERIC_CHANGE_ID; |
Kasper Nilsson | bbd2867 | 2018-08-01 10:23:23 -0700 | [diff] [blame] | 1117 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1118 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1119 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1120 | rev2: createRevision(2), |
| 1121 | rev1: createRevision(1), |
| 1122 | rev13: createRevision(13), |
| 1123 | rev3: createRevision(3), |
| 1124 | rev4: createRevision(4), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1125 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1126 | current_revision: 'rev4' as CommitId, |
Kasper Nilsson | bbd2867 | 2018-08-01 10:23:23 -0700 | [diff] [blame] | 1127 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1128 | element._commentThreads = THREADS; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1129 | const paperTabs = element.shadowRoot!.querySelector('#primaryTabs')!; |
| 1130 | tap(paperTabs.querySelectorAll('paper-tab')[3]); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1131 | flush(() => { |
| 1132 | done(); |
| 1133 | }); |
Kasper Nilsson | bbd2867 | 2018-08-01 10:23:23 -0700 | [diff] [blame] | 1134 | }); |
Milutin Kristofic | 7a86db1 | 2019-08-07 15:26:13 +0200 | [diff] [blame] | 1135 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1136 | test('robot comments count per patchset', () => { |
| 1137 | const count = element._robotCommentCountPerPatchSet(THREADS); |
| 1138 | const expectedCount = { |
| 1139 | 2: 1, |
| 1140 | 3: 1, |
| 1141 | 4: 2, |
| 1142 | }; |
| 1143 | assert.deepEqual(count, expectedCount); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1144 | assert.equal( |
| 1145 | element._computeText(createRevision(2), THREADS), |
| 1146 | 'Patchset 2 (1 finding)' |
| 1147 | ); |
| 1148 | assert.equal( |
| 1149 | element._computeText(createRevision(4), THREADS), |
| 1150 | 'Patchset 4 (2 findings)' |
| 1151 | ); |
| 1152 | assert.equal( |
| 1153 | element._computeText(createRevision(5), THREADS), |
| 1154 | 'Patchset 5' |
| 1155 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1156 | }); |
Milutin Kristofic | 7a86db1 | 2019-08-07 15:26:13 +0200 | [diff] [blame] | 1157 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1158 | test('only robot comments are rendered', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1159 | assert.equal(element._robotCommentThreads!.length, 2); |
| 1160 | assert.equal( |
| 1161 | (element._robotCommentThreads![0].comments[0] as UIRobot).robot_id, |
| 1162 | 'rc1' |
| 1163 | ); |
| 1164 | assert.equal( |
| 1165 | (element._robotCommentThreads![1].comments[0] as UIRobot).robot_id, |
| 1166 | 'rc2' |
| 1167 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1168 | }); |
| 1169 | |
| 1170 | test('changing patchsets resets robot comments', done => { |
| 1171 | element.set('_change.current_revision', 'rev3'); |
| 1172 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1173 | assert.equal(element._robotCommentThreads!.length, 1); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1174 | done(); |
| 1175 | }); |
| 1176 | }); |
| 1177 | |
| 1178 | test('Show more button is hidden', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1179 | assert.isNull(element.shadowRoot!.querySelector('.show-robot-comments')); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1180 | }); |
| 1181 | |
| 1182 | suite('robot comments show more button', () => { |
| 1183 | setup(done => { |
| 1184 | const arr = []; |
| 1185 | for (let i = 0; i <= 30; i++) { |
| 1186 | arr.push(...THREADS); |
| 1187 | } |
| 1188 | element._commentThreads = arr; |
Milutin Kristofic | 7a86db1 | 2019-08-07 15:26:13 +0200 | [diff] [blame] | 1189 | flush(() => { |
Milutin Kristofic | 7a86db1 | 2019-08-07 15:26:13 +0200 | [diff] [blame] | 1190 | done(); |
| 1191 | }); |
| 1192 | }); |
| 1193 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1194 | test('Show more button is rendered', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1195 | assert.isOk(element.shadowRoot!.querySelector('.show-robot-comments')); |
| 1196 | assert.equal( |
| 1197 | element._robotCommentThreads!.length, |
| 1198 | ROBOT_COMMENTS_LIMIT |
| 1199 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1200 | }); |
| 1201 | |
| 1202 | test('Clicking show more button renders all comments', done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1203 | tap(element.shadowRoot!.querySelector('.show-robot-comments')!); |
Milutin Kristofic | 7a86db1 | 2019-08-07 15:26:13 +0200 | [diff] [blame] | 1204 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1205 | assert.equal(element._robotCommentThreads!.length, 62); |
Milutin Kristofic | 7a86db1 | 2019-08-07 15:26:13 +0200 | [diff] [blame] | 1206 | done(); |
| 1207 | }); |
| 1208 | }); |
| 1209 | }); |
Andrew Bonventre | 547b8ab | 2015-12-01 01:02:00 -0500 | [diff] [blame] | 1210 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1211 | |
| 1212 | test('reply button is not visible when logged out', () => { |
| 1213 | assert.equal(getComputedStyle(element.$.replyBtn).display, 'none'); |
| 1214 | element._loggedIn = true; |
| 1215 | assert.notEqual(getComputedStyle(element.$.replyBtn).display, 'none'); |
| 1216 | }); |
| 1217 | |
| 1218 | test('download tap calls _handleOpenDownloadDialog', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1219 | const openDialogStub = sinon.stub(element, '_handleOpenDownloadDialog'); |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 1220 | element.$.actions.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1221 | new CustomEvent('download-tap', { |
| 1222 | composed: true, |
| 1223 | bubbles: true, |
| 1224 | }) |
| 1225 | ); |
| 1226 | assert.isTrue(openDialogStub.called); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1227 | }); |
| 1228 | |
| 1229 | test('fetches the server config on attached', done => { |
| 1230 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1231 | assert.equal( |
| 1232 | element._serverConfig!.user.anonymous_coward_name, |
| 1233 | 'test coward name' |
| 1234 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1235 | done(); |
| 1236 | }); |
| 1237 | }); |
| 1238 | |
| 1239 | test('_changeStatuses', () => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1240 | element._loading = false; |
| 1241 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1242 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1243 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1244 | rev2: createRevision(2), |
| 1245 | rev1: createRevision(1), |
| 1246 | rev13: createRevision(13), |
| 1247 | rev3: createRevision(3), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1248 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1249 | current_revision: 'rev3' as CommitId, |
Dmitrii Filippov | 3bf6889 | 2020-07-12 00:19:10 +0200 | [diff] [blame] | 1250 | status: ChangeStatus.MERGED, |
| 1251 | work_in_progress: true, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1252 | labels: { |
| 1253 | test: { |
| 1254 | all: [], |
| 1255 | default_value: 0, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1256 | values: {}, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1257 | approved: {}, |
| 1258 | }, |
| 1259 | }, |
| 1260 | }; |
| 1261 | element._mergeable = true; |
| 1262 | const expectedStatuses = ['Merged', 'WIP']; |
| 1263 | assert.deepEqual(element._changeStatuses, expectedStatuses); |
| 1264 | assert.equal(element._changeStatus, expectedStatuses.join(', ')); |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 1265 | flush(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1266 | const statusChips = element.shadowRoot!.querySelectorAll( |
| 1267 | 'gr-change-status' |
| 1268 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1269 | assert.equal(statusChips.length, 2); |
| 1270 | }); |
| 1271 | |
| 1272 | test('diff preferences open when open-diff-prefs is fired', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1273 | const overlayOpenStub = sinon.stub(element.$.fileList, 'openDiffPrefs'); |
Tao Zhou | 0a3c986 | 2020-04-08 14:45:37 +0200 | [diff] [blame] | 1274 | element.$.fileListHeader.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1275 | new CustomEvent('open-diff-prefs', { |
| 1276 | composed: true, |
| 1277 | bubbles: true, |
| 1278 | }) |
| 1279 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1280 | assert.isTrue(overlayOpenStub.called); |
| 1281 | }); |
| 1282 | |
| 1283 | test('_prepareCommitMsgForLinkify', () => { |
| 1284 | let commitMessage = 'R=test@google.com'; |
| 1285 | let result = element._prepareCommitMsgForLinkify(commitMessage); |
| 1286 | assert.equal(result, 'R=\u200Btest@google.com'); |
| 1287 | |
| 1288 | commitMessage = 'R=test@google.com\nR=test@google.com'; |
| 1289 | result = element._prepareCommitMsgForLinkify(commitMessage); |
| 1290 | assert.equal(result, 'R=\u200Btest@google.com\nR=\u200Btest@google.com'); |
| 1291 | |
| 1292 | commitMessage = 'CC=test@google.com'; |
| 1293 | result = element._prepareCommitMsgForLinkify(commitMessage); |
| 1294 | assert.equal(result, 'CC=\u200Btest@google.com'); |
David Ostrovsky | a2401c1 | 2020-05-03 19:29:26 +0200 | [diff] [blame] | 1295 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1296 | |
| 1297 | test('_isSubmitEnabled', () => { |
| 1298 | assert.isFalse(element._isSubmitEnabled({})); |
| 1299 | assert.isFalse(element._isSubmitEnabled({submit: {}})); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1300 | assert.isTrue(element._isSubmitEnabled({submit: {enabled: true}})); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1301 | }); |
| 1302 | |
| 1303 | test('_reload is called when an approved label is removed', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1304 | const vote: ApprovalInfo = { |
| 1305 | ...createApproval(), |
| 1306 | _account_id: 1 as AccountId, |
| 1307 | name: 'bojack', |
| 1308 | value: 1, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1309 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1310 | element._changeNum = TEST_NUMERIC_CHANGE_ID; |
| 1311 | element._patchRange = { |
| 1312 | basePatchNum: ParentPatchSetNum, |
| 1313 | patchNum: 1 as PatchSetNum, |
| 1314 | }; |
| 1315 | const change = { |
| 1316 | ...createChange(), |
| 1317 | owner: createAccountWithIdNameAndEmail(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1318 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1319 | rev2: createRevision(2), |
| 1320 | rev1: createRevision(1), |
| 1321 | rev13: createRevision(13), |
| 1322 | rev3: createRevision(3), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1323 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1324 | current_revision: 'rev3' as CommitId, |
| 1325 | status: ChangeStatus.NEW, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1326 | labels: { |
| 1327 | test: { |
| 1328 | all: [vote], |
| 1329 | default_value: 0, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1330 | values: {}, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1331 | approved: {}, |
| 1332 | }, |
| 1333 | }, |
| 1334 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1335 | element._change = change; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 1336 | flush(); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1337 | const reloadStub = sinon.stub(element, '_reload'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1338 | element.splice('_change.labels.test.all', 0, 1); |
| 1339 | assert.isFalse(reloadStub.called); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1340 | change.labels.test.all.push(vote); |
| 1341 | change.labels.test.all.push(vote); |
| 1342 | change.labels.test.approved = vote; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 1343 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1344 | element.splice('_change.labels.test.all', 0, 2); |
| 1345 | assert.isTrue(reloadStub.called); |
| 1346 | assert.isTrue(reloadStub.calledOnce); |
| 1347 | }); |
| 1348 | |
| 1349 | test('reply button has updated count when there are drafts', () => { |
| 1350 | const getLabel = element._computeReplyButtonLabel; |
| 1351 | |
| 1352 | assert.equal(getLabel(null, false), 'Reply'); |
Ben Rohlfs | 706d72b | 2020-05-28 14:56:55 +0200 | [diff] [blame] | 1353 | assert.equal(getLabel(null, true), 'Start Review'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1354 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1355 | const changeRecord: ElementPropertyDeepChange< |
| 1356 | GrChangeView, |
| 1357 | '_diffDrafts' |
| 1358 | > = {base: undefined, path: '', value: undefined}; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1359 | assert.equal(getLabel(changeRecord, false), 'Reply'); |
| 1360 | |
| 1361 | changeRecord.base = {}; |
| 1362 | assert.equal(getLabel(changeRecord, false), 'Reply'); |
| 1363 | |
| 1364 | changeRecord.base = { |
| 1365 | 'file1.txt': [{}], |
| 1366 | 'file2.txt': [{}, {}], |
| 1367 | }; |
| 1368 | assert.equal(getLabel(changeRecord, false), 'Reply (3)'); |
Tao Zhou | 709c082 | 2020-07-08 09:47:09 +0200 | [diff] [blame] | 1369 | assert.equal(getLabel(changeRecord, true), 'Start Review (3)'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1370 | }); |
| 1371 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1372 | test('comment events properly update diff drafts', () => { |
| 1373 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1374 | basePatchNum: ParentPatchSetNum, |
| 1375 | patchNum: 2 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1376 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1377 | const draft: DraftInfo = { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1378 | __draft: true, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1379 | id: 'id1' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1380 | path: '/foo/bar.txt', |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1381 | message: 'hello', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1382 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1383 | element._handleCommentSave(new CustomEvent('', {detail: {comment: draft}})); |
| 1384 | draft.patch_set = 2 as PatchSetNum; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1385 | assert.deepEqual(element._diffDrafts, {'/foo/bar.txt': [draft]}); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1386 | draft.patch_set = undefined; |
| 1387 | draft.message = 'hello, there'; |
| 1388 | element._handleCommentSave(new CustomEvent('', {detail: {comment: draft}})); |
| 1389 | draft.patch_set = 2 as PatchSetNum; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1390 | assert.deepEqual(element._diffDrafts, {'/foo/bar.txt': [draft]}); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1391 | const draft2: DraftInfo = { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1392 | __draft: true, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1393 | id: 'id2' as UrlEncodedCommentId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1394 | path: '/foo/bar.txt', |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1395 | message: 'hola', |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1396 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1397 | element._handleCommentSave( |
| 1398 | new CustomEvent('', {detail: {comment: draft2}}) |
| 1399 | ); |
| 1400 | draft2.patch_set = 2 as PatchSetNum; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1401 | assert.deepEqual(element._diffDrafts, {'/foo/bar.txt': [draft, draft2]}); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1402 | draft.patch_set = undefined; |
| 1403 | element._handleCommentDiscard( |
| 1404 | new CustomEvent('', {detail: {comment: draft}}) |
| 1405 | ); |
| 1406 | draft.patch_set = 2 as PatchSetNum; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1407 | assert.deepEqual(element._diffDrafts, {'/foo/bar.txt': [draft2]}); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1408 | element._handleCommentDiscard( |
| 1409 | new CustomEvent('', {detail: {comment: draft2}}) |
| 1410 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1411 | assert.deepEqual(element._diffDrafts, {}); |
| 1412 | }); |
| 1413 | |
| 1414 | test('change num change', () => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1415 | const change = { |
| 1416 | ...createChange(), |
| 1417 | labels: {}, |
| 1418 | } as ParsedChangeInfo; |
| 1419 | stubRestApi('getChangeDetail').returns(Promise.resolve(change)); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1420 | element._changeNum = undefined; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1421 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1422 | basePatchNum: ParentPatchSetNum, |
| 1423 | patchNum: 2 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1424 | }; |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1425 | element._change = change; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1426 | element.viewState.changeNum = null; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1427 | element.viewState.diffMode = DiffViewMode.UNIFIED; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1428 | assert.equal(element.viewState.numFilesShown, 200); |
| 1429 | assert.equal(element._numFilesShown, 200); |
| 1430 | element._numFilesShown = 150; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 1431 | flush(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1432 | assert.equal(element.viewState.diffMode, DiffViewMode.UNIFIED); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1433 | assert.equal(element.viewState.numFilesShown, 150); |
| 1434 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1435 | element._changeNum = 1 as NumericChangeId; |
| 1436 | element.params = { |
| 1437 | ...createAppElementChangeViewParams(), |
| 1438 | changeNum: 1 as NumericChangeId, |
| 1439 | }; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 1440 | flush(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1441 | assert.equal(element.viewState.diffMode, DiffViewMode.UNIFIED); |
| 1442 | assert.equal(element.viewState.changeNum, 1); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1443 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1444 | element._changeNum = 2 as NumericChangeId; |
| 1445 | element.params = { |
| 1446 | ...createAppElementChangeViewParams(), |
| 1447 | changeNum: 2 as NumericChangeId, |
| 1448 | }; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 1449 | flush(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1450 | assert.equal(element.viewState.diffMode, DiffViewMode.UNIFIED); |
| 1451 | assert.equal(element.viewState.changeNum, 2); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1452 | assert.equal(element.viewState.numFilesShown, 200); |
| 1453 | assert.equal(element._numFilesShown, 200); |
| 1454 | }); |
| 1455 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1456 | test('_setDiffViewMode is called with reset when new change is loaded', () => { |
| 1457 | const setDiffViewModeStub = sinon.stub(element, '_setDiffViewMode'); |
| 1458 | element.viewState = {changeNum: 1 as NumericChangeId}; |
| 1459 | element._changeNum = 2 as NumericChangeId; |
| 1460 | element._resetFileListViewState(); |
| 1461 | assert.isTrue(setDiffViewModeStub.calledWithExactly(true)); |
| 1462 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1463 | |
| 1464 | test('diffViewMode is propagated from file list header', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1465 | element.viewState = {diffMode: DiffViewMode.UNIFIED}; |
| 1466 | element.$.fileListHeader.diffViewMode = DiffViewMode.SIDE_BY_SIDE; |
| 1467 | assert.equal(element.viewState.diffMode, DiffViewMode.SIDE_BY_SIDE); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1468 | }); |
| 1469 | |
| 1470 | test('diffMode defaults to side by side without preferences', done => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1471 | stubRestApi('getPreferences').returns(Promise.resolve(createPreferences())); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1472 | // No user prefs or diff view mode set. |
| 1473 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1474 | element._setDiffViewMode()!.then(() => { |
| 1475 | assert.equal(element.viewState.diffMode, DiffViewMode.SIDE_BY_SIDE); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1476 | done(); |
| 1477 | }); |
| 1478 | }); |
| 1479 | |
| 1480 | test('diffMode defaults to preference when not already set', done => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1481 | stubRestApi('getPreferences').returns( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1482 | Promise.resolve({ |
| 1483 | ...createPreferences(), |
| 1484 | default_diff_view: DiffViewMode.UNIFIED, |
| 1485 | }) |
| 1486 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1487 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1488 | element._setDiffViewMode()!.then(() => { |
| 1489 | assert.equal(element.viewState.diffMode, DiffViewMode.UNIFIED); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1490 | done(); |
| 1491 | }); |
| 1492 | }); |
| 1493 | |
| 1494 | test('existing diffMode overrides preference', done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1495 | element.viewState.diffMode = DiffViewMode.SIDE_BY_SIDE; |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1496 | stubRestApi('getPreferences').returns( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1497 | Promise.resolve({ |
| 1498 | ...createPreferences(), |
| 1499 | default_diff_view: DiffViewMode.UNIFIED, |
| 1500 | }) |
| 1501 | ); |
| 1502 | element._setDiffViewMode()!.then(() => { |
| 1503 | assert.equal(element.viewState.diffMode, DiffViewMode.SIDE_BY_SIDE); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1504 | done(); |
| 1505 | }); |
| 1506 | }); |
| 1507 | |
| 1508 | test('don’t reload entire page when patchRange changes', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1509 | const reloadStub = sinon |
| 1510 | .stub(element, '_reload') |
| 1511 | .callsFake(() => Promise.resolve([])); |
| 1512 | const reloadPatchDependentStub = sinon |
| 1513 | .stub(element, '_reloadPatchNumDependentResources') |
Dhruv Srivastava | 09a1b5a | 2021-01-20 09:28:15 +0100 | [diff] [blame] | 1514 | .callsFake(() => Promise.resolve([undefined, undefined, undefined])); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1515 | const relatedClearSpy = sinon.spy(element.$.relatedChanges, 'clear'); |
| 1516 | const collapseStub = sinon.stub(element.$.fileList, 'collapseAllDiffs'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1517 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1518 | const value: AppElementChangeViewParams = { |
| 1519 | ...createAppElementChangeViewParams(), |
| 1520 | view: GerritView.CHANGE, |
| 1521 | patchNum: 1 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1522 | }; |
| 1523 | element._paramsChanged(value); |
| 1524 | assert.isTrue(reloadStub.calledOnce); |
| 1525 | assert.isTrue(relatedClearSpy.calledOnce); |
| 1526 | |
| 1527 | element._initialLoadComplete = true; |
| 1528 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1529 | value.basePatchNum = 1 as PatchSetNum; |
| 1530 | value.patchNum = 2 as PatchSetNum; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1531 | element._paramsChanged(value); |
| 1532 | assert.isFalse(reloadStub.calledTwice); |
| 1533 | assert.isTrue(reloadPatchDependentStub.calledOnce); |
| 1534 | assert.isTrue(relatedClearSpy.calledOnce); |
| 1535 | assert.isTrue(collapseStub.calledTwice); |
| 1536 | }); |
| 1537 | |
Dhruv Srivastava | 09a1b5a | 2021-01-20 09:28:15 +0100 | [diff] [blame] | 1538 | test('reload ported comments when patchNum changes', () => { |
| 1539 | sinon.stub(element, '_reload').callsFake(() => Promise.resolve([])); |
| 1540 | sinon.stub(element, '_getCommitInfo'); |
| 1541 | sinon.stub(element.$.fileList, 'reload'); |
| 1542 | const reloadPortedCommentsStub = sinon.stub( |
| 1543 | element.$.commentAPI, |
| 1544 | 'reloadPortedComments' |
| 1545 | ); |
| 1546 | sinon.spy(element.$.relatedChanges, 'clear'); |
| 1547 | sinon.stub(element.$.fileList, 'collapseAllDiffs'); |
| 1548 | |
| 1549 | const value: AppElementChangeViewParams = { |
| 1550 | ...createAppElementChangeViewParams(), |
| 1551 | view: GerritView.CHANGE, |
| 1552 | patchNum: 1 as PatchSetNum, |
| 1553 | }; |
| 1554 | element._paramsChanged(value); |
| 1555 | |
| 1556 | element._initialLoadComplete = true; |
| 1557 | |
| 1558 | value.basePatchNum = 1 as PatchSetNum; |
| 1559 | value.patchNum = 2 as PatchSetNum; |
| 1560 | element._paramsChanged(value); |
| 1561 | assert.isTrue(reloadPortedCommentsStub.calledOnce); |
| 1562 | }); |
| 1563 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1564 | test('reload entire page when patchRange doesnt change', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1565 | const reloadStub = sinon |
| 1566 | .stub(element, '_reload') |
| 1567 | .callsFake(() => Promise.resolve([])); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1568 | const collapseStub = sinon.stub(element.$.fileList, 'collapseAllDiffs'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1569 | const value: AppElementChangeViewParams = createAppElementChangeViewParams(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1570 | element._paramsChanged(value); |
| 1571 | assert.isTrue(reloadStub.calledOnce); |
| 1572 | element._initialLoadComplete = true; |
| 1573 | element._paramsChanged(value); |
| 1574 | assert.isTrue(reloadStub.calledTwice); |
| 1575 | assert.isTrue(collapseStub.calledTwice); |
| 1576 | }); |
| 1577 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1578 | test('related changes are not updated after other action', done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1579 | sinon.stub(element, '_reload').callsFake(() => Promise.resolve([])); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1580 | sinon.stub(element.$.relatedChanges, 'reload'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1581 | element._reload(true).then(() => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1582 | assert.isFalse(navigateToChangeStub.called); |
| 1583 | done(); |
| 1584 | }); |
| 1585 | }); |
| 1586 | |
| 1587 | test('_computeMergedCommitInfo', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1588 | const dummyRevs: {[revisionId: string]: RevisionInfo} = { |
| 1589 | 1: createRevision(1), |
| 1590 | 2: createRevision(2), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1591 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1592 | assert.deepEqual( |
| 1593 | element._computeMergedCommitInfo('0' as CommitId, dummyRevs), |
| 1594 | {} |
| 1595 | ); |
| 1596 | assert.deepEqual( |
| 1597 | element._computeMergedCommitInfo('1' as CommitId, dummyRevs), |
| 1598 | dummyRevs[1].commit |
| 1599 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1600 | |
| 1601 | // Regression test for issue 5337. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1602 | const commit = element._computeMergedCommitInfo('2' as CommitId, dummyRevs); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1603 | assert.notDeepEqual(commit, dummyRevs[2]); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1604 | assert.deepEqual(commit, dummyRevs[2].commit); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1605 | }); |
| 1606 | |
| 1607 | test('_computeCopyTextForTitle', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1608 | const change: ChangeInfo = { |
| 1609 | ...createChange(), |
| 1610 | _number: 123 as NumericChangeId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1611 | subject: 'test subject', |
| 1612 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1613 | rev1: createRevision(1), |
| 1614 | rev3: createRevision(3), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1615 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1616 | current_revision: 'rev3' as CommitId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1617 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1618 | sinon.stub(GerritNav, 'getUrlForChange').returns('/change/123'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1619 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1620 | element._computeCopyTextForTitle(change), |
| 1621 | `123: test subject | http://${location.host}/change/123` |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1622 | ); |
| 1623 | }); |
| 1624 | |
| 1625 | test('get latest revision', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1626 | let change: ChangeInfo = { |
| 1627 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1628 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1629 | rev1: createRevision(1), |
| 1630 | rev3: createRevision(3), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1631 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1632 | current_revision: 'rev3' as CommitId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1633 | }; |
| 1634 | assert.equal(element._getLatestRevisionSHA(change), 'rev3'); |
| 1635 | change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1636 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1637 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1638 | rev1: createRevision(1), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1639 | }, |
| 1640 | }; |
| 1641 | assert.equal(element._getLatestRevisionSHA(change), 'rev1'); |
| 1642 | }); |
| 1643 | |
| 1644 | test('show commit message edit button', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1645 | const change = createChange(); |
| 1646 | const mergedChanged: ChangeInfo = { |
| 1647 | ...createChange(), |
Dmitrii Filippov | 4e4522e | 2020-05-06 12:50:49 +0200 | [diff] [blame] | 1648 | status: ChangeStatus.MERGED, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1649 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1650 | assert.isTrue(element._computeHideEditCommitMessage(false, false, change)); |
| 1651 | assert.isTrue(element._computeHideEditCommitMessage(true, true, change)); |
| 1652 | assert.isTrue(element._computeHideEditCommitMessage(false, true, change)); |
| 1653 | assert.isFalse(element._computeHideEditCommitMessage(true, false, change)); |
| 1654 | assert.isTrue( |
| 1655 | element._computeHideEditCommitMessage(true, false, mergedChanged) |
| 1656 | ); |
| 1657 | assert.isTrue( |
| 1658 | element._computeHideEditCommitMessage(true, false, change, true) |
| 1659 | ); |
| 1660 | assert.isFalse( |
| 1661 | element._computeHideEditCommitMessage(true, false, change, false) |
| 1662 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1663 | }); |
| 1664 | |
| 1665 | test('_handleCommitMessageSave trims trailing whitespace', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1666 | element._change = createChange(); |
| 1667 | // Response code is 500, because we want to avoid window reloading |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1668 | const putStub = stubRestApi('putChangeCommitMessage').returns( |
| 1669 | Promise.resolve(new Response(null, {status: 500})) |
| 1670 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1671 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1672 | const mockEvent = (content: string) => { |
| 1673 | return new CustomEvent('', {detail: {content}}); |
| 1674 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1675 | |
| 1676 | element._handleCommitMessageSave(mockEvent('test \n test ')); |
| 1677 | assert.equal(putStub.lastCall.args[1], 'test\n test'); |
| 1678 | |
| 1679 | element._handleCommitMessageSave(mockEvent(' test\ntest')); |
| 1680 | assert.equal(putStub.lastCall.args[1], ' test\ntest'); |
| 1681 | |
| 1682 | element._handleCommitMessageSave(mockEvent('\n\n\n\n\n\n\n\n')); |
| 1683 | assert.equal(putStub.lastCall.args[1], '\n\n\n\n\n\n\n\n'); |
| 1684 | }); |
| 1685 | |
| 1686 | test('_computeChangeIdCommitMessageError', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1687 | let commitMessage = 'Change-Id: I4ce18b2395bca69d7a9aa48bf4554faa56282483'; |
| 1688 | let change: ChangeInfo = { |
| 1689 | ...createChange(), |
| 1690 | change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282483' as ChangeId, |
| 1691 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1692 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1693 | element._computeChangeIdCommitMessageError(commitMessage, change), |
| 1694 | null |
| 1695 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1696 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1697 | change = { |
| 1698 | ...createChange(), |
| 1699 | change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282484' as ChangeId, |
| 1700 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1701 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1702 | element._computeChangeIdCommitMessageError(commitMessage, change), |
| 1703 | 'mismatch' |
| 1704 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1705 | |
| 1706 | commitMessage = 'This is the greatest change.'; |
| 1707 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1708 | element._computeChangeIdCommitMessageError(commitMessage, change), |
| 1709 | 'missing' |
| 1710 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1711 | }); |
| 1712 | |
| 1713 | test('multiple change Ids in commit message picks last', () => { |
| 1714 | const commitMessage = [ |
| 1715 | 'Change-Id: I4ce18b2395bca69d7a9aa48bf4554faa56282484', |
| 1716 | 'Change-Id: I4ce18b2395bca69d7a9aa48bf4554faa56282483', |
| 1717 | ].join('\n'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1718 | let change: ChangeInfo = { |
| 1719 | ...createChange(), |
| 1720 | change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282483' as ChangeId, |
| 1721 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1722 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1723 | element._computeChangeIdCommitMessageError(commitMessage, change), |
| 1724 | null |
| 1725 | ); |
| 1726 | change = { |
| 1727 | ...createChange(), |
| 1728 | change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282484' as ChangeId, |
| 1729 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1730 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1731 | element._computeChangeIdCommitMessageError(commitMessage, change), |
| 1732 | 'mismatch' |
| 1733 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1734 | }); |
| 1735 | |
| 1736 | test('does not count change Id that starts mid line', () => { |
| 1737 | const commitMessage = [ |
| 1738 | 'Change-Id: I4ce18b2395bca69d7a9aa48bf4554faa56282484', |
| 1739 | 'Change-Id: I4ce18b2395bca69d7a9aa48bf4554faa56282483', |
| 1740 | ].join(' and '); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1741 | let change: ChangeInfo = { |
| 1742 | ...createChange(), |
| 1743 | change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282484' as ChangeId, |
| 1744 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1745 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1746 | element._computeChangeIdCommitMessageError(commitMessage, change), |
| 1747 | null |
| 1748 | ); |
| 1749 | change = { |
| 1750 | ...createChange(), |
| 1751 | change_id: 'I4ce18b2395bca69d7a9aa48bf4554faa56282483' as ChangeId, |
| 1752 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1753 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1754 | element._computeChangeIdCommitMessageError(commitMessage, change), |
| 1755 | 'mismatch' |
| 1756 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1757 | }); |
| 1758 | |
| 1759 | test('_computeTitleAttributeWarning', () => { |
| 1760 | let changeIdCommitMessageError = 'missing'; |
| 1761 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1762 | element._computeTitleAttributeWarning(changeIdCommitMessageError), |
| 1763 | 'No Change-Id in commit message' |
| 1764 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1765 | |
| 1766 | changeIdCommitMessageError = 'mismatch'; |
| 1767 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1768 | element._computeTitleAttributeWarning(changeIdCommitMessageError), |
| 1769 | 'Change-Id mismatch' |
| 1770 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1771 | }); |
| 1772 | |
| 1773 | test('_computeChangeIdClass', () => { |
| 1774 | let changeIdCommitMessageError = 'missing'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1775 | assert.equal(element._computeChangeIdClass(changeIdCommitMessageError), ''); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1776 | |
| 1777 | changeIdCommitMessageError = 'mismatch'; |
| 1778 | assert.equal( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1779 | element._computeChangeIdClass(changeIdCommitMessageError), |
| 1780 | 'warning' |
| 1781 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1782 | }); |
| 1783 | |
| 1784 | test('topic is coalesced to null', done => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1785 | sinon.stub(element, '_changeChanged'); |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1786 | stubRestApi('getChangeDetail').returns( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1787 | Promise.resolve({ |
| 1788 | ...createChange(), |
| 1789 | labels: {}, |
| 1790 | current_revision: 'foo' as CommitId, |
| 1791 | revisions: {foo: createRevision()}, |
| 1792 | }) |
| 1793 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1794 | |
| 1795 | element._getChangeDetail().then(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1796 | assert.isNull(element._change!.topic); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1797 | done(); |
| 1798 | }); |
| 1799 | }); |
| 1800 | |
| 1801 | test('commit sha is populated from getChangeDetail', done => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1802 | sinon.stub(element, '_changeChanged'); |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1803 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1804 | Promise.resolve({ |
| 1805 | ...createChange(), |
| 1806 | labels: {}, |
| 1807 | current_revision: 'foo' as CommitId, |
| 1808 | revisions: {foo: createRevision()}, |
| 1809 | }) |
| 1810 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1811 | |
| 1812 | element._getChangeDetail().then(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1813 | assert.equal('foo', element._commitInfo!.commit); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1814 | done(); |
| 1815 | }); |
| 1816 | }); |
| 1817 | |
| 1818 | test('edit is added to change', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1819 | sinon.stub(element, '_changeChanged'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1820 | const changeRevision = createRevision(); |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1821 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1822 | Promise.resolve({ |
| 1823 | ...createChange(), |
| 1824 | labels: {}, |
| 1825 | current_revision: 'foo' as CommitId, |
| 1826 | revisions: {foo: {...changeRevision}}, |
| 1827 | }) |
| 1828 | ); |
| 1829 | const editCommit: CommitInfo = { |
| 1830 | ...createCommit(), |
| 1831 | commit: 'bar' as CommitId, |
| 1832 | }; |
| 1833 | sinon.stub(element, '_getEdit').callsFake(() => |
| 1834 | Promise.resolve({ |
| 1835 | base_patch_set_number: 1 as PatchSetNum, |
| 1836 | commit: {...editCommit}, |
| 1837 | base_revision: 'abc', |
| 1838 | ref: 'some/ref' as GitRef, |
| 1839 | }) |
| 1840 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1841 | element._patchRange = {}; |
| 1842 | |
| 1843 | return element._getChangeDetail().then(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1844 | const revs = element._change!.revisions!; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1845 | assert.equal(Object.keys(revs).length, 2); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1846 | assert.deepEqual(revs['foo'], changeRevision); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1847 | assert.deepEqual(revs['bar'], { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1848 | ...createEditRevision(), |
| 1849 | commit: editCommit, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1850 | fetch: undefined, |
| 1851 | }); |
| 1852 | }); |
| 1853 | }); |
| 1854 | |
| 1855 | test('_getBasePatchNum', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1856 | const _change: ChangeInfo = { |
| 1857 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1858 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1859 | '98da160735fb81604b4c40e93c368f380539dd0e': createRevision(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1860 | }, |
| 1861 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1862 | const _patchRange: ChangeViewPatchRange = { |
| 1863 | basePatchNum: ParentPatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1864 | }; |
| 1865 | assert.equal(element._getBasePatchNum(_change, _patchRange), 'PARENT'); |
| 1866 | |
| 1867 | element._prefs = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1868 | ...createPreferences(), |
| 1869 | default_base_for_merges: DefaultBase.FIRST_PARENT, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1870 | }; |
| 1871 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1872 | const _change2: ChangeInfo = { |
| 1873 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1874 | revisions: { |
| 1875 | '98da160735fb81604b4c40e93c368f380539dd0e': { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1876 | ...createRevision(1), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1877 | commit: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1878 | ...createCommit(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1879 | parents: [ |
| 1880 | { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1881 | commit: '6e12bdf1176eb4ab24d8491ba3b6d0704409cde8' as CommitId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1882 | subject: 'test', |
| 1883 | }, |
| 1884 | { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1885 | commit: '22f7db4754b5d9816fc581f3d9a6c0ef8429c841' as CommitId, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1886 | subject: 'test3', |
| 1887 | }, |
| 1888 | ], |
| 1889 | }, |
| 1890 | }, |
| 1891 | }, |
| 1892 | }; |
| 1893 | assert.equal(element._getBasePatchNum(_change2, _patchRange), -1); |
| 1894 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1895 | _patchRange.patchNum = 1 as PatchSetNum; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1896 | assert.equal(element._getBasePatchNum(_change2, _patchRange), 'PARENT'); |
| 1897 | }); |
| 1898 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1899 | test('_openReplyDialog called with `ANY` when coming from tap event', done => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1900 | flush(() => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1901 | const openStub = sinon.stub(element, '_openReplyDialog'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1902 | tap(element.$.replyBtn); |
| 1903 | assert( |
| 1904 | openStub.lastCall.calledWithExactly( |
| 1905 | element.$.replyDialog.FocusTarget.ANY |
| 1906 | ), |
| 1907 | '_openReplyDialog should have been passed ANY' |
| 1908 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1909 | assert.equal(openStub.callCount, 1); |
| 1910 | done(); |
| 1911 | }); |
| 1912 | }); |
| 1913 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1914 | test( |
| 1915 | '_openReplyDialog called with `BODY` when coming from message reply' + |
| 1916 | 'event', |
| 1917 | done => { |
| 1918 | flush(() => { |
| 1919 | const openStub = sinon.stub(element, '_openReplyDialog'); |
| 1920 | element.messagesList!.dispatchEvent( |
| 1921 | new CustomEvent('reply', { |
| 1922 | detail: {message: {message: 'text'}}, |
| 1923 | composed: true, |
| 1924 | bubbles: true, |
| 1925 | }) |
| 1926 | ); |
| 1927 | assert( |
| 1928 | openStub.lastCall.calledWithExactly( |
| 1929 | element.$.replyDialog.FocusTarget.BODY |
| 1930 | ), |
| 1931 | '_openReplyDialog should have been passed BODY' |
| 1932 | ); |
| 1933 | assert.equal(openStub.callCount, 1); |
| 1934 | done(); |
| 1935 | }); |
| 1936 | } |
| 1937 | ); |
| 1938 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1939 | test('reply dialog focus can be controlled', () => { |
| 1940 | const FocusTarget = element.$.replyDialog.FocusTarget; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1941 | const openStub = sinon.stub(element, '_openReplyDialog'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1942 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1943 | const e = new CustomEvent('show-reply-dialog', { |
| 1944 | detail: {value: {ccsOnly: false}}, |
| 1945 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1946 | element._handleShowReplyDialog(e); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1947 | assert( |
| 1948 | openStub.lastCall.calledWithExactly(FocusTarget.REVIEWERS), |
| 1949 | '_openReplyDialog should have been passed REVIEWERS' |
| 1950 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1951 | assert.equal(openStub.callCount, 1); |
| 1952 | |
| 1953 | e.detail.value = {ccsOnly: true}; |
| 1954 | element._handleShowReplyDialog(e); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1955 | assert( |
| 1956 | openStub.lastCall.calledWithExactly(FocusTarget.CCS), |
| 1957 | '_openReplyDialog should have been passed CCS' |
| 1958 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1959 | assert.equal(openStub.callCount, 2); |
| 1960 | }); |
| 1961 | |
| 1962 | test('getUrlParameter functionality', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 1963 | const locationStub = sinon.stub(element, '_getLocationSearch'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1964 | |
| 1965 | locationStub.returns('?test'); |
| 1966 | assert.equal(element._getUrlParameter('test'), 'test'); |
| 1967 | locationStub.returns('?test2=12&test=3'); |
| 1968 | assert.equal(element._getUrlParameter('test'), 'test'); |
| 1969 | locationStub.returns(''); |
| 1970 | assert.isNull(element._getUrlParameter('test')); |
| 1971 | locationStub.returns('?'); |
| 1972 | assert.isNull(element._getUrlParameter('test')); |
| 1973 | locationStub.returns('?test2'); |
| 1974 | assert.isNull(element._getUrlParameter('test')); |
| 1975 | }); |
| 1976 | |
| 1977 | test('revert dialog opened with revert param', done => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 1978 | stubRestApi('getLoggedIn').returns(Promise.resolve(true)); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1979 | const awaitPluginsLoadedStub = sinon |
| 1980 | .stub(getPluginLoader(), 'awaitPluginsLoaded') |
| 1981 | .callsFake(() => Promise.resolve()); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1982 | |
| 1983 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1984 | basePatchNum: ParentPatchSetNum, |
| 1985 | patchNum: 2 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1986 | }; |
| 1987 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1988 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1989 | revisions: { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1990 | rev1: createRevision(1), |
| 1991 | rev2: createRevision(2), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1992 | }, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1993 | current_revision: 'rev1' as CommitId, |
Dmitrii Filippov | 4e4522e | 2020-05-06 12:50:49 +0200 | [diff] [blame] | 1994 | status: ChangeStatus.MERGED, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 1995 | labels: {}, |
| 1996 | actions: {}, |
| 1997 | }; |
| 1998 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 1999 | sinon.stub(element, '_getUrlParameter').callsFake(param => { |
| 2000 | assert.equal(param, 'revert'); |
| 2001 | return param; |
| 2002 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2003 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2004 | sinon.stub(element.$.actions, 'showRevertDialog').callsFake(done); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2005 | |
| 2006 | element._maybeShowRevertDialog(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2007 | assert.isTrue(awaitPluginsLoadedStub.called); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2008 | }); |
| 2009 | |
| 2010 | suite('scroll related tests', () => { |
| 2011 | test('document scrolling calls function to set scroll height', done => { |
| 2012 | const originalHeight = document.body.scrollHeight; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2013 | const scrollStub = sinon.stub(element, '_handleScroll').callsFake(() => { |
| 2014 | assert.isTrue(scrollStub.called); |
| 2015 | document.body.style.height = `${originalHeight}px`; |
| 2016 | scrollStub.restore(); |
| 2017 | done(); |
| 2018 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2019 | document.body.style.height = '10000px'; |
| 2020 | element._handleScroll(); |
| 2021 | }); |
| 2022 | |
| 2023 | test('scrollTop is set correctly', () => { |
| 2024 | element.viewState = {scrollTop: TEST_SCROLL_TOP_PX}; |
| 2025 | |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2026 | sinon.stub(element, '_reload').callsFake(() => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2027 | // When element is reloaded, ensure that the history |
| 2028 | // state has the scrollTop set earlier. This will then |
| 2029 | // be reset. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2030 | assert.isTrue(element.viewState.scrollTop === TEST_SCROLL_TOP_PX); |
| 2031 | return Promise.resolve([]); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2032 | }); |
| 2033 | |
| 2034 | // simulate reloading component, which is done when route |
| 2035 | // changes to match a regex of change view type. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2036 | element._paramsChanged({...createAppElementChangeViewParams()}); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2037 | }); |
| 2038 | |
| 2039 | test('scrollTop is reset when new change is loaded', () => { |
| 2040 | element._resetFileListViewState(); |
| 2041 | assert.equal(element.viewState.scrollTop, 0); |
| 2042 | }); |
| 2043 | }); |
| 2044 | |
| 2045 | suite('reply dialog tests', () => { |
| 2046 | setup(() => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2047 | sinon.stub(element.$.replyDialog, '_draftChanged'); |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 2048 | element._change = { |
| 2049 | ...createChange(), |
| 2050 | revisions: createRevisions(1), |
| 2051 | messages: createChangeMessages(1), |
| 2052 | }; |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 2053 | element._change.labels = {}; |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2054 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2055 | Promise.resolve({ |
| 2056 | ...createChange(), |
| 2057 | // element has latest info |
| 2058 | revisions: {rev1: createRevision()}, |
| 2059 | messages: createChangeMessages(1), |
| 2060 | current_revision: 'rev1' as CommitId, |
| 2061 | }) |
| 2062 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2063 | }); |
| 2064 | |
Tao Zhou | da7463c | 2020-07-14 11:17:20 +0200 | [diff] [blame] | 2065 | test('show reply dialog on open-reply-dialog event', done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2066 | const openReplyDialogStub = sinon.stub(element, '_openReplyDialog'); |
Tao Zhou | da7463c | 2020-07-14 11:17:20 +0200 | [diff] [blame] | 2067 | element.dispatchEvent( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2068 | new CustomEvent('open-reply-dialog', { |
| 2069 | composed: true, |
| 2070 | bubbles: true, |
| 2071 | detail: {}, |
| 2072 | }) |
| 2073 | ); |
Tao Zhou | da7463c | 2020-07-14 11:17:20 +0200 | [diff] [blame] | 2074 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2075 | assert.isTrue(openReplyDialogStub.calledOnce); |
Tao Zhou | da7463c | 2020-07-14 11:17:20 +0200 | [diff] [blame] | 2076 | done(); |
| 2077 | }); |
| 2078 | }); |
| 2079 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2080 | test('reply from comment adds quote text', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2081 | const e = new CustomEvent('', { |
| 2082 | detail: {message: {message: 'quote text'}}, |
| 2083 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2084 | element._handleMessageReply(e); |
| 2085 | assert.equal(element.$.replyDialog.quote, '> quote text\n\n'); |
| 2086 | }); |
| 2087 | |
| 2088 | test('reply from comment replaces quote text', () => { |
| 2089 | element.$.replyDialog.draft = '> old quote text\n\n some draft text'; |
| 2090 | element.$.replyDialog.quote = '> old quote text\n\n'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2091 | const e = new CustomEvent('', { |
| 2092 | detail: {message: {message: 'quote text'}}, |
| 2093 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2094 | element._handleMessageReply(e); |
| 2095 | assert.equal(element.$.replyDialog.quote, '> quote text\n\n'); |
| 2096 | }); |
| 2097 | |
| 2098 | test('reply from same comment preserves quote text', () => { |
| 2099 | element.$.replyDialog.draft = '> quote text\n\n some draft text'; |
| 2100 | element.$.replyDialog.quote = '> quote text\n\n'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2101 | const e = new CustomEvent('', { |
| 2102 | detail: {message: {message: 'quote text'}}, |
| 2103 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2104 | element._handleMessageReply(e); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2105 | assert.equal( |
| 2106 | element.$.replyDialog.draft, |
| 2107 | '> quote text\n\n some draft text' |
| 2108 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2109 | assert.equal(element.$.replyDialog.quote, '> quote text\n\n'); |
| 2110 | }); |
| 2111 | |
| 2112 | test('reply from top of page contains previous draft', () => { |
| 2113 | const div = document.createElement('div'); |
| 2114 | element.$.replyDialog.draft = '> quote text\n\n some draft text'; |
| 2115 | element.$.replyDialog.quote = '> quote text\n\n'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2116 | const e = ({ |
| 2117 | target: div, |
| 2118 | preventDefault: sinon.spy(), |
| 2119 | } as unknown) as MouseEvent; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2120 | element._handleReplyTap(e); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2121 | assert.equal( |
| 2122 | element.$.replyDialog.draft, |
| 2123 | '> quote text\n\n some draft text' |
| 2124 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2125 | assert.equal(element.$.replyDialog.quote, '> quote text\n\n'); |
| 2126 | }); |
| 2127 | }); |
| 2128 | |
Milutin Kristofic | bec88f1 | 2020-10-13 16:53:28 +0200 | [diff] [blame] | 2129 | test('reply button is disabled until server config is loaded', done => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2130 | assert.isTrue(element._replyDisabled); |
Milutin Kristofic | bec88f1 | 2020-10-13 16:53:28 +0200 | [diff] [blame] | 2131 | // fetches the server config on attached |
| 2132 | flush(() => { |
| 2133 | assert.isFalse(element._replyDisabled); |
| 2134 | done(); |
| 2135 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2136 | }); |
| 2137 | |
| 2138 | suite('commit message expand/collapse', () => { |
| 2139 | setup(() => { |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 2140 | element._change = { |
| 2141 | ...createChange(), |
| 2142 | revisions: createRevisions(1), |
| 2143 | messages: createChangeMessages(1), |
| 2144 | }; |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 2145 | element._change.labels = {}; |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2146 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2147 | Promise.resolve({ |
| 2148 | ...createChange(), |
| 2149 | // new patchset was uploaded |
| 2150 | revisions: createRevisions(2), |
| 2151 | current_revision: getCurrentRevision(2), |
| 2152 | messages: createChangeMessages(1), |
| 2153 | }) |
| 2154 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2155 | }); |
| 2156 | |
| 2157 | test('commitCollapseToggle hidden for short commit message', () => { |
| 2158 | element._latestCommitMessage = ''; |
| 2159 | assert.isTrue(element.$.commitCollapseToggle.hasAttribute('hidden')); |
| 2160 | }); |
| 2161 | |
| 2162 | test('commitCollapseToggle shown for long commit message', () => { |
| 2163 | element._latestCommitMessage = _.times(31, String).join('\n'); |
| 2164 | assert.isFalse(element.$.commitCollapseToggle.hasAttribute('hidden')); |
| 2165 | }); |
| 2166 | |
| 2167 | test('commitCollapseToggle functions', () => { |
| 2168 | element._latestCommitMessage = _.times(35, String).join('\n'); |
| 2169 | assert.isTrue(element._commitCollapsed); |
| 2170 | assert.isTrue(element._commitCollapsible); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2171 | assert.isTrue(element.$.commitMessageEditor.hasAttribute('collapsed')); |
| 2172 | tap(element.$.commitCollapseToggleButton); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2173 | assert.isFalse(element._commitCollapsed); |
| 2174 | assert.isTrue(element._commitCollapsible); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2175 | assert.isFalse(element.$.commitMessageEditor.hasAttribute('collapsed')); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2176 | }); |
| 2177 | }); |
| 2178 | |
| 2179 | suite('related changes expand/collapse', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2180 | let updateHeightSpy: SinonSpyMember<typeof element._updateRelatedChangeMaxHeight>; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2181 | setup(() => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2182 | updateHeightSpy = sinon.spy(element, '_updateRelatedChangeMaxHeight'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2183 | }); |
| 2184 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2185 | test('relatedChangesToggle shown height greater than changeInfo height', () => { |
| 2186 | assert.isFalse( |
| 2187 | element.$.relatedChangesToggle.classList.contains('showToggle') |
| 2188 | ); |
| 2189 | sinon.stub(element, '_getOffsetHeight').callsFake(() => 50); |
| 2190 | sinon.stub(element, '_getScrollHeight').callsFake(() => 60); |
| 2191 | sinon.stub(element, '_getLineHeight').callsFake(() => 5); |
| 2192 | sinon.stub(window, 'matchMedia').callsFake(() => { |
| 2193 | return {matches: true} as MediaQueryList; |
| 2194 | }); |
| 2195 | element.$.relatedChanges.dispatchEvent( |
| 2196 | new CustomEvent('new-section-loaded') |
| 2197 | ); |
| 2198 | assert.isTrue( |
| 2199 | element.$.relatedChangesToggle.classList.contains('showToggle') |
| 2200 | ); |
| 2201 | assert.equal(updateHeightSpy.callCount, 1); |
| 2202 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2203 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2204 | test('relatedChangesToggle hidden height less than changeInfo height', () => { |
| 2205 | assert.isFalse( |
| 2206 | element.$.relatedChangesToggle.classList.contains('showToggle') |
| 2207 | ); |
| 2208 | sinon.stub(element, '_getOffsetHeight').callsFake(() => 50); |
| 2209 | sinon.stub(element, '_getScrollHeight').callsFake(() => 40); |
| 2210 | sinon.stub(element, '_getLineHeight').callsFake(() => 5); |
| 2211 | sinon.stub(window, 'matchMedia').callsFake(() => { |
| 2212 | return {matches: true} as MediaQueryList; |
| 2213 | }); |
| 2214 | element.$.relatedChanges.dispatchEvent( |
| 2215 | new CustomEvent('new-section-loaded') |
| 2216 | ); |
| 2217 | assert.isFalse( |
| 2218 | element.$.relatedChangesToggle.classList.contains('showToggle') |
| 2219 | ); |
| 2220 | assert.equal(updateHeightSpy.callCount, 1); |
| 2221 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2222 | |
| 2223 | test('relatedChangesToggle functions', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2224 | sinon.stub(element, '_getOffsetHeight').callsFake(() => 50); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2225 | sinon.stub(window, 'matchMedia').callsFake(() => { |
| 2226 | return {matches: false} as MediaQueryList; |
| 2227 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2228 | assert.isTrue(element._relatedChangesCollapsed); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2229 | assert.isTrue(element.$.relatedChanges.classList.contains('collapsed')); |
| 2230 | tap(element.$.relatedChangesToggleButton); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2231 | assert.isFalse(element._relatedChangesCollapsed); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2232 | assert.isFalse(element.$.relatedChanges.classList.contains('collapsed')); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2233 | }); |
| 2234 | |
| 2235 | test('_updateRelatedChangeMaxHeight without commit toggle', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2236 | sinon.stub(element, '_getOffsetHeight').callsFake(() => 50); |
| 2237 | sinon.stub(element, '_getLineHeight').callsFake(() => 12); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2238 | sinon.stub(window, 'matchMedia').callsFake(() => { |
| 2239 | return {matches: false} as MediaQueryList; |
| 2240 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2241 | |
| 2242 | // 50 (existing height) - 30 (extra height) = 20 (adjusted height). |
| 2243 | // 20 (max existing height) % 12 (line height) = 6 (remainder). |
| 2244 | // 20 (adjusted height) - 8 (remainder) = 12 (max height to set). |
| 2245 | |
| 2246 | element._updateRelatedChangeMaxHeight(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2247 | assert.equal(getCustomCssValue('--relation-chain-max-height'), '12px'); |
| 2248 | assert.equal(getCustomCssValue('--related-change-btn-top-padding'), ''); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2249 | }); |
| 2250 | |
| 2251 | test('_updateRelatedChangeMaxHeight with commit toggle', () => { |
| 2252 | element._latestCommitMessage = _.times(31, String).join('\n'); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2253 | sinon.stub(element, '_getOffsetHeight').callsFake(() => 50); |
| 2254 | sinon.stub(element, '_getLineHeight').callsFake(() => 12); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2255 | sinon.stub(window, 'matchMedia').callsFake(() => { |
| 2256 | return {matches: false} as MediaQueryList; |
| 2257 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2258 | |
| 2259 | // 50 (existing height) % 12 (line height) = 2 (remainder). |
| 2260 | // 50 (existing height) - 2 (remainder) = 48 (max height to set). |
| 2261 | |
| 2262 | element._updateRelatedChangeMaxHeight(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2263 | assert.equal(getCustomCssValue('--relation-chain-max-height'), '48px'); |
| 2264 | assert.equal( |
| 2265 | getCustomCssValue('--related-change-btn-top-padding'), |
| 2266 | '2px' |
| 2267 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2268 | }); |
| 2269 | |
| 2270 | test('_updateRelatedChangeMaxHeight in small screen mode', () => { |
| 2271 | element._latestCommitMessage = _.times(31, String).join('\n'); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2272 | sinon.stub(element, '_getOffsetHeight').callsFake(() => 50); |
| 2273 | sinon.stub(element, '_getLineHeight').callsFake(() => 12); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2274 | sinon.stub(window, 'matchMedia').callsFake(() => { |
| 2275 | return {matches: true} as MediaQueryList; |
| 2276 | }); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2277 | |
| 2278 | element._updateRelatedChangeMaxHeight(); |
| 2279 | |
| 2280 | // 400 (new height) % 12 (line height) = 4 (remainder). |
| 2281 | // 400 (new height) - 4 (remainder) = 396. |
| 2282 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2283 | assert.equal(getCustomCssValue('--relation-chain-max-height'), '396px'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2284 | }); |
| 2285 | |
| 2286 | test('_updateRelatedChangeMaxHeight in medium screen mode', () => { |
| 2287 | element._latestCommitMessage = _.times(31, String).join('\n'); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2288 | sinon.stub(element, '_getOffsetHeight').callsFake(() => 50); |
| 2289 | sinon.stub(element, '_getLineHeight').callsFake(() => 12); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2290 | const matchMediaStub = sinon.stub(window, 'matchMedia').callsFake(() => { |
| 2291 | if (matchMediaStub.lastCall.args[0] === '(max-width: 75em)') { |
| 2292 | return {matches: true} as MediaQueryList; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2293 | } else { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2294 | return {matches: false} as MediaQueryList; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2295 | } |
| 2296 | }); |
| 2297 | |
| 2298 | // 100 (new height) % 12 (line height) = 4 (remainder). |
| 2299 | // 100 (new height) - 4 (remainder) = 96. |
| 2300 | element._updateRelatedChangeMaxHeight(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2301 | assert.equal(getCustomCssValue('--relation-chain-max-height'), '96px'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2302 | }); |
| 2303 | |
| 2304 | suite('update checks', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2305 | let startUpdateCheckTimerSpy: SinonSpyMember<typeof element._startUpdateCheckTimer>; |
| 2306 | let asyncStub: SinonStubbedMember<typeof element.async>; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2307 | setup(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2308 | startUpdateCheckTimerSpy = sinon.spy(element, '_startUpdateCheckTimer'); |
| 2309 | asyncStub = sinon.stub(element, 'async').callsFake(f => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2310 | // Only fire the async callback one time. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2311 | if (asyncStub.callCount > 1) { |
| 2312 | return 1; |
| 2313 | } |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2314 | f.call(element); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2315 | return 1; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2316 | }); |
Dmitrii Filippov | 0695d40 | 2020-10-22 16:57:57 +0200 | [diff] [blame] | 2317 | element._change = { |
| 2318 | ...createChange(), |
| 2319 | revisions: createRevisions(1), |
| 2320 | messages: createChangeMessages(1), |
| 2321 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2322 | }); |
| 2323 | |
| 2324 | test('_startUpdateCheckTimer negative delay', () => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2325 | const getChangeDetailStub = stubRestApi('getChangeDetail').returns( |
| 2326 | Promise.resolve({ |
| 2327 | ...createChange(), |
| 2328 | // element has latest info |
| 2329 | revisions: {rev1: createRevision()}, |
| 2330 | messages: createChangeMessages(1), |
| 2331 | current_revision: 'rev1' as CommitId, |
| 2332 | }) |
| 2333 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2334 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2335 | element._serverConfig = { |
| 2336 | ...createServerInfo(), |
| 2337 | change: {...createChangeConfig(), update_delay: -1}, |
| 2338 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2339 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2340 | assert.isTrue(startUpdateCheckTimerSpy.called); |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 2341 | assert.isFalse(getChangeDetailStub.called); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2342 | }); |
| 2343 | |
Ben Rohlfs | 67614c7 | 2020-09-17 08:18:04 +0200 | [diff] [blame] | 2344 | test('_startUpdateCheckTimer up-to-date', async () => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2345 | const getChangeDetailStub = stubRestApi('getChangeDetail').callsFake( |
| 2346 | () => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2347 | Promise.resolve({ |
| 2348 | ...createChange(), |
| 2349 | // element has latest info |
| 2350 | revisions: {rev1: createRevision()}, |
| 2351 | messages: createChangeMessages(1), |
| 2352 | current_revision: 'rev1' as CommitId, |
| 2353 | }) |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2354 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2355 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2356 | element._serverConfig = { |
| 2357 | ...createServerInfo(), |
| 2358 | change: {...createChangeConfig(), update_delay: 12345}, |
| 2359 | }; |
Ben Rohlfs | 67614c7 | 2020-09-17 08:18:04 +0200 | [diff] [blame] | 2360 | await flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2361 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2362 | assert.equal(startUpdateCheckTimerSpy.callCount, 2); |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 2363 | assert.isTrue(getChangeDetailStub.called); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2364 | assert.equal(asyncStub.lastCall.args[1], 12345 * 1000); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2365 | }); |
| 2366 | |
| 2367 | test('_startUpdateCheckTimer out-of-date shows an alert', done => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2368 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2369 | Promise.resolve({ |
| 2370 | ...createChange(), |
| 2371 | // new patchset was uploaded |
| 2372 | revisions: createRevisions(2), |
| 2373 | current_revision: getCurrentRevision(2), |
| 2374 | messages: createChangeMessages(1), |
| 2375 | }) |
| 2376 | ); |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 2377 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2378 | element.addEventListener('show-alert', e => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2379 | assert.equal(e.detail.message, 'A newer patch set has been uploaded'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2380 | done(); |
| 2381 | }); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2382 | element._serverConfig = { |
| 2383 | ...createServerInfo(), |
| 2384 | change: {...createChangeConfig(), update_delay: 12345}, |
| 2385 | }; |
Ben Rohlfs | 67614c7 | 2020-09-17 08:18:04 +0200 | [diff] [blame] | 2386 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2387 | assert.equal(startUpdateCheckTimerSpy.callCount, 1); |
Ben Rohlfs | 67614c7 | 2020-09-17 08:18:04 +0200 | [diff] [blame] | 2388 | }); |
| 2389 | |
| 2390 | test('_startUpdateCheckTimer respects _loading', async () => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2391 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2392 | Promise.resolve({ |
| 2393 | ...createChange(), |
| 2394 | // new patchset was uploaded |
| 2395 | revisions: createRevisions(2), |
| 2396 | current_revision: getCurrentRevision(2), |
| 2397 | messages: createChangeMessages(1), |
| 2398 | }) |
| 2399 | ); |
Ben Rohlfs | 67614c7 | 2020-09-17 08:18:04 +0200 | [diff] [blame] | 2400 | |
| 2401 | element._loading = true; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2402 | element._serverConfig = { |
| 2403 | ...createServerInfo(), |
| 2404 | change: {...createChangeConfig(), update_delay: 12345}, |
| 2405 | }; |
Ben Rohlfs | 67614c7 | 2020-09-17 08:18:04 +0200 | [diff] [blame] | 2406 | await flush(); |
| 2407 | |
| 2408 | // No toast, instead a second call to _startUpdateCheckTimer(). |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2409 | assert.equal(startUpdateCheckTimerSpy.callCount, 2); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2410 | }); |
| 2411 | |
| 2412 | test('_startUpdateCheckTimer new status shows an alert', done => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2413 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2414 | Promise.resolve({ |
| 2415 | ...createChange(), |
| 2416 | // element has latest info |
| 2417 | revisions: {rev1: createRevision()}, |
| 2418 | messages: createChangeMessages(1), |
| 2419 | current_revision: 'rev1' as CommitId, |
| 2420 | status: ChangeStatus.MERGED, |
| 2421 | }) |
| 2422 | ); |
Dmitrii Filippov | 77e5f7f | 2020-07-10 18:39:45 +0200 | [diff] [blame] | 2423 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2424 | element.addEventListener('show-alert', e => { |
| 2425 | assert.equal(e.detail.message, 'This change has been merged'); |
| 2426 | done(); |
| 2427 | }); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2428 | element._serverConfig = { |
| 2429 | ...createServerInfo(), |
| 2430 | change: {...createChangeConfig(), update_delay: 12345}, |
| 2431 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2432 | }); |
| 2433 | |
| 2434 | test('_startUpdateCheckTimer new messages shows an alert', done => { |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2435 | stubRestApi('getChangeDetail').callsFake(() => |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2436 | Promise.resolve({ |
| 2437 | ...createChange(), |
| 2438 | revisions: {rev1: createRevision()}, |
| 2439 | // element has new message |
| 2440 | messages: createChangeMessages(2), |
| 2441 | current_revision: 'rev1' as CommitId, |
| 2442 | }) |
| 2443 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2444 | element.addEventListener('show-alert', e => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2445 | assert.equal( |
| 2446 | e.detail.message, |
| 2447 | 'There are new messages on this change' |
| 2448 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2449 | done(); |
| 2450 | }); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2451 | element._serverConfig = { |
| 2452 | ...createServerInfo(), |
| 2453 | change: {...createChangeConfig(), update_delay: 12345}, |
| 2454 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2455 | }); |
| 2456 | }); |
| 2457 | |
| 2458 | test('canStartReview computation', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2459 | const change1: ChangeInfo = createChange(); |
| 2460 | const change2: ChangeInfo = { |
| 2461 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2462 | actions: { |
| 2463 | ready: { |
| 2464 | enabled: true, |
| 2465 | }, |
| 2466 | }, |
| 2467 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2468 | const change3: ChangeInfo = { |
| 2469 | ...createChange(), |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2470 | actions: { |
| 2471 | ready: { |
| 2472 | label: 'Ready for Review', |
| 2473 | }, |
| 2474 | }, |
| 2475 | }; |
| 2476 | assert.isFalse(element._computeCanStartReview(change1)); |
| 2477 | assert.isTrue(element._computeCanStartReview(change2)); |
| 2478 | assert.isFalse(element._computeCanStartReview(change3)); |
| 2479 | }); |
| 2480 | }); |
| 2481 | |
| 2482 | test('header class computation', () => { |
| 2483 | assert.equal(element._computeHeaderClass(), 'header'); |
| 2484 | assert.equal(element._computeHeaderClass(true), 'header editMode'); |
| 2485 | }); |
| 2486 | |
| 2487 | test('_maybeScrollToMessage', done => { |
| 2488 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2489 | const scrollStub = sinon.stub(element.messagesList!, 'scrollToMessage'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2490 | |
| 2491 | element._maybeScrollToMessage(''); |
| 2492 | assert.isFalse(scrollStub.called); |
| 2493 | element._maybeScrollToMessage('message'); |
| 2494 | assert.isFalse(scrollStub.called); |
| 2495 | element._maybeScrollToMessage('#message-TEST'); |
| 2496 | assert.isTrue(scrollStub.called); |
| 2497 | assert.equal(scrollStub.lastCall.args[0], 'TEST'); |
| 2498 | done(); |
| 2499 | }); |
| 2500 | }); |
| 2501 | |
| 2502 | test('topic update reloads related changes', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2503 | const reloadStub = sinon.stub(element.$.relatedChanges, 'reload'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2504 | element.dispatchEvent(new CustomEvent('topic-changed')); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2505 | assert.isTrue(reloadStub.calledOnce); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2506 | }); |
| 2507 | |
| 2508 | test('_computeEditMode', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2509 | const callCompute = ( |
| 2510 | range: PatchRange, |
| 2511 | params: AppElementChangeViewParams |
| 2512 | ) => |
| 2513 | element._computeEditMode( |
| 2514 | {base: range, path: '', value: range}, |
| 2515 | {base: params, path: '', value: params} |
| 2516 | ); |
| 2517 | assert.isTrue( |
| 2518 | callCompute( |
| 2519 | {basePatchNum: ParentPatchSetNum, patchNum: 1 as PatchSetNum}, |
| 2520 | {...createAppElementChangeViewParams(), edit: true} |
| 2521 | ) |
| 2522 | ); |
| 2523 | assert.isFalse( |
| 2524 | callCompute( |
| 2525 | {basePatchNum: ParentPatchSetNum, patchNum: 1 as PatchSetNum}, |
| 2526 | createAppElementChangeViewParams() |
| 2527 | ) |
| 2528 | ); |
| 2529 | assert.isFalse( |
| 2530 | callCompute( |
| 2531 | {basePatchNum: EditPatchSetNum, patchNum: 1 as PatchSetNum}, |
| 2532 | createAppElementChangeViewParams() |
| 2533 | ) |
| 2534 | ); |
| 2535 | assert.isTrue( |
| 2536 | callCompute( |
| 2537 | {basePatchNum: 1 as PatchSetNum, patchNum: EditPatchSetNum}, |
| 2538 | createAppElementChangeViewParams() |
| 2539 | ) |
| 2540 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2541 | }); |
| 2542 | |
| 2543 | test('_processEdit', () => { |
| 2544 | element._patchRange = {}; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2545 | const change: ParsedChangeInfo = { |
| 2546 | ...createChange(), |
| 2547 | current_revision: 'foo' as CommitId, |
| 2548 | revisions: { |
| 2549 | foo: {...createRevision(), actions: {cherrypick: {enabled: true}}}, |
| 2550 | }, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2551 | }; |
| 2552 | let mockChange; |
| 2553 | |
| 2554 | // With no edit, mockChange should be unmodified. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2555 | element._processEdit((mockChange = _.cloneDeep(change)), false); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2556 | assert.deepEqual(mockChange, change); |
| 2557 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2558 | const editCommit: CommitInfo = { |
| 2559 | ...createCommit(), |
| 2560 | commit: 'bar' as CommitId, |
| 2561 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2562 | // When edit is not based on the latest PS, current_revision should be |
| 2563 | // unmodified. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2564 | const edit: EditInfo = { |
| 2565 | ref: 'ref/test/abc' as GitRef, |
| 2566 | base_revision: 'abc', |
| 2567 | base_patch_set_number: 1 as PatchSetNum, |
| 2568 | commit: {...editCommit}, |
| 2569 | fetch: {}, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2570 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2571 | element._processEdit((mockChange = _.cloneDeep(change)), edit); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2572 | assert.notDeepEqual(mockChange, change); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2573 | assert.equal(mockChange.revisions.bar._number, EditPatchSetNum); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2574 | assert.equal(mockChange.current_revision, change.current_revision); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2575 | assert.deepEqual(mockChange.revisions.bar.commit, editCommit); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2576 | assert.notOk(mockChange.revisions.bar.actions); |
| 2577 | |
| 2578 | edit.base_revision = 'foo'; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2579 | element._processEdit((mockChange = _.cloneDeep(change)), edit); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2580 | assert.notDeepEqual(mockChange, change); |
| 2581 | assert.equal(mockChange.current_revision, 'bar'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2582 | assert.deepEqual( |
| 2583 | mockChange.revisions.bar.actions, |
| 2584 | mockChange.revisions.foo.actions |
| 2585 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2586 | |
| 2587 | // If _patchRange.patchNum is defined, do not load edit. |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2588 | element._patchRange.patchNum = 5 as PatchSetNum; |
| 2589 | change.current_revision = 'baz' as CommitId; |
| 2590 | element._processEdit((mockChange = _.cloneDeep(change)), edit); |
| 2591 | assert.equal(element._patchRange.patchNum, 5 as PatchSetNum); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2592 | assert.notOk(mockChange.revisions.bar.actions); |
| 2593 | }); |
| 2594 | |
| 2595 | test('file-action-tap handling', () => { |
| 2596 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2597 | basePatchNum: ParentPatchSetNum, |
| 2598 | patchNum: 1 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2599 | }; |
Milutin Kristofic | bec88f1 | 2020-10-13 16:53:28 +0200 | [diff] [blame] | 2600 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2601 | ...createChange(), |
Milutin Kristofic | bec88f1 | 2020-10-13 16:53:28 +0200 | [diff] [blame] | 2602 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2603 | const fileList = element.$.fileList; |
| 2604 | const Actions = GrEditConstants.Actions; |
Milutin Kristofic | 21b0dc9 | 2020-05-18 22:44:11 +0200 | [diff] [blame] | 2605 | element.$.fileListHeader.editMode = true; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2606 | flush(); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2607 | const controls = element.$.fileListHeader.shadowRoot!.querySelector( |
| 2608 | '#editControls' |
| 2609 | ) as GrEditControls; |
| 2610 | const openDeleteDialogStub = sinon.stub(controls, 'openDeleteDialog'); |
| 2611 | const openRenameDialogStub = sinon.stub(controls, 'openRenameDialog'); |
| 2612 | const openRestoreDialogStub = sinon.stub(controls, 'openRestoreDialog'); |
| 2613 | const getEditUrlForDiffStub = sinon.stub(GerritNav, 'getEditUrlForDiff'); |
| 2614 | const navigateToRelativeUrlStub = sinon.stub( |
| 2615 | GerritNav, |
| 2616 | 'navigateToRelativeUrl' |
| 2617 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2618 | |
| 2619 | // Delete |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2620 | fileList.dispatchEvent( |
| 2621 | new CustomEvent('file-action-tap', { |
| 2622 | detail: {action: Actions.DELETE.id, path: 'foo'}, |
| 2623 | bubbles: true, |
| 2624 | composed: true, |
| 2625 | }) |
| 2626 | ); |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2627 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2628 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2629 | assert.isTrue(openDeleteDialogStub.called); |
| 2630 | assert.equal(openDeleteDialogStub.lastCall.args[0], 'foo'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2631 | |
| 2632 | // Restore |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2633 | fileList.dispatchEvent( |
| 2634 | new CustomEvent('file-action-tap', { |
| 2635 | detail: {action: Actions.RESTORE.id, path: 'foo'}, |
| 2636 | bubbles: true, |
| 2637 | composed: true, |
| 2638 | }) |
| 2639 | ); |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2640 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2641 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2642 | assert.isTrue(openRestoreDialogStub.called); |
| 2643 | assert.equal(openRestoreDialogStub.lastCall.args[0], 'foo'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2644 | |
| 2645 | // Rename |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2646 | fileList.dispatchEvent( |
| 2647 | new CustomEvent('file-action-tap', { |
| 2648 | detail: {action: Actions.RENAME.id, path: 'foo'}, |
| 2649 | bubbles: true, |
| 2650 | composed: true, |
| 2651 | }) |
| 2652 | ); |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2653 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2654 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2655 | assert.isTrue(openRenameDialogStub.called); |
| 2656 | assert.equal(openRenameDialogStub.lastCall.args[0], 'foo'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2657 | |
| 2658 | // Open |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2659 | fileList.dispatchEvent( |
| 2660 | new CustomEvent('file-action-tap', { |
| 2661 | detail: {action: Actions.OPEN.id, path: 'foo'}, |
| 2662 | bubbles: true, |
| 2663 | composed: true, |
| 2664 | }) |
| 2665 | ); |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2666 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2667 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2668 | assert.isTrue(getEditUrlForDiffStub.called); |
| 2669 | assert.equal(getEditUrlForDiffStub.lastCall.args[1], 'foo'); |
| 2670 | assert.equal(getEditUrlForDiffStub.lastCall.args[2], 1 as PatchSetNum); |
| 2671 | assert.isTrue(navigateToRelativeUrlStub.called); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2672 | }); |
| 2673 | |
| 2674 | test('_selectedRevision updates when patchNum is changed', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2675 | const revision1: RevisionInfo = createRevision(1); |
| 2676 | const revision2: RevisionInfo = createRevision(2); |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2677 | stubRestApi('getChangeDetail').returns( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2678 | Promise.resolve({ |
| 2679 | ...createChange(), |
| 2680 | revisions: { |
| 2681 | aaa: revision1, |
| 2682 | bbb: revision2, |
| 2683 | }, |
| 2684 | labels: {}, |
| 2685 | actions: {}, |
| 2686 | current_revision: 'bbb' as CommitId, |
| 2687 | }) |
| 2688 | ); |
| 2689 | sinon.stub(element, '_getEdit').returns(Promise.resolve(false)); |
| 2690 | sinon |
| 2691 | .stub(element, '_getPreferences') |
| 2692 | .returns(Promise.resolve(createPreferences())); |
| 2693 | element._patchRange = {patchNum: 2 as PatchSetNum}; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2694 | return element._getChangeDetail().then(() => { |
| 2695 | assert.strictEqual(element._selectedRevision, revision2); |
| 2696 | |
| 2697 | element.set('_patchRange.patchNum', '1'); |
| 2698 | assert.strictEqual(element._selectedRevision, revision1); |
| 2699 | }); |
| 2700 | }); |
| 2701 | |
| 2702 | test('_selectedRevision is assigned when patchNum is edit', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2703 | const revision1 = createRevision(1); |
| 2704 | const revision2 = createRevision(2); |
| 2705 | const revision3 = createEditRevision(); |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2706 | stubRestApi('getChangeDetail').returns( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2707 | Promise.resolve({ |
| 2708 | ...createChange(), |
| 2709 | revisions: { |
| 2710 | aaa: revision1, |
| 2711 | bbb: revision2, |
| 2712 | ccc: revision3, |
| 2713 | }, |
| 2714 | labels: {}, |
| 2715 | actions: {}, |
| 2716 | current_revision: 'ccc' as CommitId, |
| 2717 | }) |
| 2718 | ); |
| 2719 | sinon.stub(element, '_getEdit').returns(Promise.resolve(undefined)); |
| 2720 | sinon |
| 2721 | .stub(element, '_getPreferences') |
| 2722 | .returns(Promise.resolve(createPreferences())); |
| 2723 | element._patchRange = {patchNum: EditPatchSetNum}; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2724 | return element._getChangeDetail().then(() => { |
| 2725 | assert.strictEqual(element._selectedRevision, revision3); |
| 2726 | }); |
| 2727 | }); |
| 2728 | |
| 2729 | test('_sendShowChangeEvent', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2730 | const change = {...createChange(), labels: {}}; |
| 2731 | element._change = {...change}; |
| 2732 | element._patchRange = {patchNum: 4 as PatchSetNum}; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2733 | element._mergeable = true; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2734 | const showStub = sinon.stub(element.$.jsAPI, 'handleEvent'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2735 | element._sendShowChangeEvent(); |
| 2736 | assert.isTrue(showStub.calledOnce); |
Ben Rohlfs | a47355d | 2020-08-30 15:56:13 +0200 | [diff] [blame] | 2737 | assert.equal(showStub.lastCall.args[0], EventType.SHOW_CHANGE); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2738 | assert.deepEqual(showStub.lastCall.args[1], { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2739 | change, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2740 | patchNum: 4, |
| 2741 | info: {mergeable: true}, |
| 2742 | }); |
| 2743 | }); |
| 2744 | |
| 2745 | suite('_handleEditTap', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2746 | let fireEdit: () => void; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2747 | |
| 2748 | setup(() => { |
| 2749 | fireEdit = () => { |
| 2750 | element.$.actions.dispatchEvent(new CustomEvent('edit-tap')); |
| 2751 | }; |
| 2752 | navigateToChangeStub.restore(); |
| 2753 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2754 | element._change = { |
| 2755 | ...createChange(), |
| 2756 | revisions: {rev1: createRevision()}, |
| 2757 | }; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2758 | }); |
| 2759 | |
| 2760 | test('edit exists in revisions', done => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2761 | sinon.stub(GerritNav, 'navigateToChange').callsFake((...args) => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2762 | assert.equal(args.length, 2); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2763 | assert.equal(args[1], EditPatchSetNum); // patchNum |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2764 | done(); |
| 2765 | }); |
| 2766 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2767 | element.set('_change.revisions.rev2', { |
| 2768 | _number: SPECIAL_PATCH_SET_NUM.EDIT, |
| 2769 | }); |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2770 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2771 | |
| 2772 | fireEdit(); |
| 2773 | }); |
| 2774 | |
| 2775 | test('no edit exists in revisions, non-latest patchset', done => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2776 | sinon.stub(GerritNav, 'navigateToChange').callsFake((...args) => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2777 | assert.equal(args.length, 4); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2778 | assert.equal(args[1], 1 as PatchSetNum); // patchNum |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2779 | assert.equal(args[3], true); // opt_isEdit |
| 2780 | done(); |
| 2781 | }); |
| 2782 | |
| 2783 | element.set('_change.revisions.rev2', {_number: 2}); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2784 | element._patchRange = {patchNum: 1 as PatchSetNum}; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2785 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2786 | |
| 2787 | fireEdit(); |
| 2788 | }); |
| 2789 | |
| 2790 | test('no edit exists in revisions, latest patchset', done => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2791 | sinon.stub(GerritNav, 'navigateToChange').callsFake((...args) => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2792 | assert.equal(args.length, 4); |
| 2793 | // No patch should be specified when patchNum == latest. |
| 2794 | assert.isNotOk(args[1]); // patchNum |
| 2795 | assert.equal(args[3], true); // opt_isEdit |
| 2796 | done(); |
| 2797 | }); |
| 2798 | |
| 2799 | element.set('_change.revisions.rev2', {_number: 2}); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2800 | element._patchRange = {patchNum: 2 as PatchSetNum}; |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2801 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2802 | |
| 2803 | fireEdit(); |
| 2804 | }); |
| 2805 | }); |
| 2806 | |
| 2807 | test('_handleStopEditTap', done => { |
Milutin Kristofic | bec88f1 | 2020-10-13 16:53:28 +0200 | [diff] [blame] | 2808 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2809 | ...createChange(), |
Milutin Kristofic | bec88f1 | 2020-10-13 16:53:28 +0200 | [diff] [blame] | 2810 | }; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2811 | sinon.stub(element.$.metadata, '_computeLabelNames'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2812 | navigateToChangeStub.restore(); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2813 | sinon.stub(GerritNav, 'navigateToChange').callsFake((...args) => { |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2814 | assert.equal(args.length, 2); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2815 | assert.equal(args[1], 1 as PatchSetNum); // patchNum |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2816 | done(); |
| 2817 | }); |
| 2818 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2819 | element._patchRange = {patchNum: 1 as PatchSetNum}; |
| 2820 | element.$.actions.dispatchEvent( |
| 2821 | new CustomEvent('stop-edit-tap', {bubbles: false}) |
| 2822 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2823 | }); |
| 2824 | |
| 2825 | suite('plugin endpoints', () => { |
| 2826 | test('endpoint params', done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2827 | element._change = {...createChange(), labels: {}}; |
| 2828 | element._selectedRevision = createRevision(); |
| 2829 | let hookEl: HTMLElement; |
| 2830 | let plugin: PluginApi; |
Dmitrii Filippov | 5f25dc0 | 2020-04-07 18:49:00 +0200 | [diff] [blame] | 2831 | pluginApi.install( |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2832 | p => { |
| 2833 | plugin = p; |
| 2834 | plugin |
| 2835 | .hook('change-view-integration') |
| 2836 | .getLastAttached() |
| 2837 | .then(el => (hookEl = el)); |
| 2838 | }, |
| 2839 | '0.1', |
| 2840 | 'http://some/plugins/url.html' |
| 2841 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2842 | flush(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2843 | assert.strictEqual((hookEl as any).plugin, plugin); |
| 2844 | assert.strictEqual((hookEl as any).change, element._change); |
| 2845 | assert.strictEqual((hookEl as any).revision, element._selectedRevision); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2846 | done(); |
| 2847 | }); |
| 2848 | }); |
| 2849 | }); |
| 2850 | |
| 2851 | suite('_getMergeability', () => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2852 | let getMergeableStub: SinonStubbedMember<RestApiService['getMergeable']>; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2853 | setup(() => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2854 | element._change = {...createChange(), labels: {}}; |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2855 | getMergeableStub = stubRestApi('getMergeable').returns( |
| 2856 | Promise.resolve({...createMergeable(), mergeable: true}) |
| 2857 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2858 | }); |
| 2859 | |
| 2860 | test('merged change', () => { |
| 2861 | element._mergeable = null; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2862 | element._change!.status = ChangeStatus.MERGED; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2863 | return element._getMergeability().then(() => { |
| 2864 | assert.isFalse(element._mergeable); |
| 2865 | assert.isFalse(getMergeableStub.called); |
| 2866 | }); |
| 2867 | }); |
| 2868 | |
| 2869 | test('abandoned change', () => { |
| 2870 | element._mergeable = null; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2871 | element._change!.status = ChangeStatus.ABANDONED; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2872 | return element._getMergeability().then(() => { |
| 2873 | assert.isFalse(element._mergeable); |
| 2874 | assert.isFalse(getMergeableStub.called); |
| 2875 | }); |
| 2876 | }); |
| 2877 | |
| 2878 | test('open change', () => { |
| 2879 | element._mergeable = null; |
| 2880 | return element._getMergeability().then(() => { |
| 2881 | assert.isTrue(element._mergeable); |
| 2882 | assert.isTrue(getMergeableStub.called); |
| 2883 | }); |
| 2884 | }); |
| 2885 | }); |
| 2886 | |
| 2887 | test('_paramsChanged sets in projectLookup', () => { |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2888 | sinon.stub(element.$.relatedChanges, 'reload'); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2889 | sinon.stub(element, '_reload').returns(Promise.resolve([])); |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2890 | const setStub = stubRestApi('setInProjectLookup'); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2891 | element._paramsChanged({ |
Dmitrii Filippov | eb8b269 | 2020-04-06 18:02:35 +0200 | [diff] [blame] | 2892 | view: GerritNav.View.CHANGE, |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2893 | changeNum: 101 as NumericChangeId, |
| 2894 | project: TEST_PROJECT_NAME, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2895 | }); |
| 2896 | assert.isTrue(setStub.calledOnce); |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2897 | assert.isTrue(setStub.calledWith(101 as never, TEST_PROJECT_NAME as never)); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2898 | }); |
| 2899 | |
| 2900 | test('_handleToggleStar called when star is tapped', () => { |
| 2901 | element._change = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2902 | ...createChange(), |
| 2903 | owner: {_account_id: 1 as AccountId}, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2904 | starred: false, |
| 2905 | }; |
| 2906 | element._loggedIn = true; |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2907 | const stub = sinon.stub(element, '_handleToggleStar'); |
Ben Rohlfs | d47eeb9 | 2020-09-25 10:29:48 +0200 | [diff] [blame] | 2908 | flush(); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2909 | |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2910 | tap(element.$.changeStar.shadowRoot!.querySelector('button')!); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2911 | assert.isTrue(stub.called); |
| 2912 | }); |
| 2913 | |
| 2914 | suite('gr-reporting tests', () => { |
| 2915 | setup(() => { |
| 2916 | element._patchRange = { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2917 | basePatchNum: ParentPatchSetNum, |
| 2918 | patchNum: 1 as PatchSetNum, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2919 | }; |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2920 | sinon.stub(element, '_getChangeDetail').returns(Promise.resolve(false)); |
Dmitrii Filippov | 7d4f2f3 | 2020-06-28 23:14:26 +0200 | [diff] [blame] | 2921 | sinon.stub(element, '_getProjectConfig').returns(Promise.resolve()); |
| 2922 | sinon.stub(element, '_reloadComments').returns(Promise.resolve()); |
| 2923 | sinon.stub(element, '_getMergeability').returns(Promise.resolve()); |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2924 | sinon.stub(element, '_getLatestCommitMessage').returns(Promise.resolve()); |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2925 | sinon |
| 2926 | .stub(element, '_reloadPatchNumDependentResources') |
Dhruv Srivastava | 09a1b5a | 2021-01-20 09:28:15 +0100 | [diff] [blame] | 2927 | .returns(Promise.resolve([undefined, undefined, undefined])); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2928 | }); |
| 2929 | |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2930 | test("don't report changeDisplayed on reply", done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2931 | const changeDisplayStub = sinon.stub( |
| 2932 | element.reporting, |
| 2933 | 'changeDisplayed' |
| 2934 | ); |
| 2935 | const changeFullyLoadedStub = sinon.stub( |
| 2936 | element.reporting, |
| 2937 | 'changeFullyLoaded' |
| 2938 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2939 | element._handleReplySent(); |
| 2940 | flush(() => { |
| 2941 | assert.isFalse(changeDisplayStub.called); |
| 2942 | assert.isFalse(changeFullyLoadedStub.called); |
| 2943 | done(); |
| 2944 | }); |
| 2945 | }); |
| 2946 | |
Ben Rohlfs | 3a6ff7e | 2021-01-18 14:08:39 +0100 | [diff] [blame] | 2947 | test('report changeDisplayed on _paramsChanged', done => { |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2948 | const changeDisplayStub = sinon.stub( |
| 2949 | element.reporting, |
| 2950 | 'changeDisplayed' |
| 2951 | ); |
| 2952 | const changeFullyLoadedStub = sinon.stub( |
| 2953 | element.reporting, |
| 2954 | 'changeFullyLoaded' |
| 2955 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2956 | element._paramsChanged({ |
Dmitrii Filippov | 78448cd | 2020-10-26 17:39:11 +0100 | [diff] [blame] | 2957 | ...createAppElementChangeViewParams(), |
| 2958 | changeNum: 101 as NumericChangeId, |
| 2959 | project: TEST_PROJECT_NAME, |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 2960 | }); |
| 2961 | flush(() => { |
| 2962 | assert.isTrue(changeDisplayStub.called); |
| 2963 | assert.isTrue(changeFullyLoadedStub.called); |
| 2964 | done(); |
| 2965 | }); |
| 2966 | }); |
| 2967 | }); |
| 2968 | }); |