nested_workspaces_advanced.feature
1 Feature: Advanced Nested Workspace Features and Integration 2 As a power user of the chrome-edge-workspaces extension 3 I want advanced nested workspace capabilities 4 So that I can manage complex multi-project workflows efficiently 5 6 Background: 7 Given the chrome-edge-workspaces extension is installed 8 And nested workspace functionality is enabled 9 10 # ========================================== 11 # Bookmark Integration with Nested Structure 12 # ========================================== 13 14 Scenario: Save nested workspace hierarchy to bookmarks 15 Given "Save workspaces to bookmarks" is enabled in settings 16 And the following workspace hierarchy exists: 17 | Python Research (parent) | 18 | - asyncIO | 19 | - metaProgramming | 20 When the workspaces are saved to bookmarks 21 Then the bookmark structure should be: 22 | Other bookmarks | 23 | > Edge Workspaces (read-only) | 24 | > Python Research | 25 | > asyncIO | 26 | - [tab bookmarks] | 27 | > metaProgramming | 28 | - [tab bookmarks] | 29 30 Scenario: Parent workspace bookmark folder creation 31 Given "Save workspaces to bookmarks" is enabled 32 And a parent workspace "Python Research" with no children exists 33 When the workspace is saved to bookmarks 34 Then an empty folder "Python Research" should be created in bookmarks 35 And the folder should have metadata indicating it's a parent workspace 36 37 # ========================================== 38 # Sync Across Devices 39 # ========================================== 40 41 Scenario: Sync nested workspace structure across devices 42 Given I am logged into Chrome sync on Device A 43 And the following workspace hierarchy exists on Device A: 44 | Python Research (parent) | 45 | - asyncIO | 46 | - metaProgramming | 47 When I wait for sync to complete 48 And I open the extension on Device B logged into the same account 49 Then the complete workspace hierarchy should appear on Device B 50 And all parent-child relationships should be preserved 51 52 Scenario: Handle sync conflict with modified hierarchy 53 Given the following workspace hierarchy exists on Device A: 54 | Python Research (parent) | 55 | - asyncIO | 56 And the same hierarchy exists on Device B 57 When I add "metaProgramming" to "Python Research" on Device A 58 And I add "generatorExpressions" to "Python Research" on Device B 59 And both devices sync 60 Then the workspace hierarchy should merge to contain: 61 | Python Research (parent) | 62 | - asyncIO | 63 | - metaProgramming | 64 | - generatorExpressions | 65 66 # ========================================== 67 # Context Switching with Session Persistence 68 # ========================================== 69 70 Scenario: Restore active context after browser restart 71 Given the following workspace hierarchy exists: 72 | Python Research (parent) | 73 | - asyncIO | 74 | - metaProgramming | 75 And "Python Research" context is active with 2 open windows 76 When I close the browser completely 77 And I reopen the browser 78 And I open the extension popup 79 Then "Python Research" should still be marked as the active context 80 And the 2 workspace windows should be restored 81 82 Scenario: Remember window positions for context switch 83 Given the following workspace hierarchy exists: 84 | Python Research (parent) | 85 | - asyncIO | 86 | - metaProgramming | 87 And "asyncIO" window is positioned at coordinates (0, 0) with size 800x600 88 And "metaProgramming" window is positioned at (810, 0) with size 1000x800 89 When I switch from "Python Research" to another context 90 And I switch back to "Python Research" context 91 Then "asyncIO" should reopen at position (0, 0) with size 800x600 92 And "metaProgramming" should reopen at position (810, 0) with size 1000x800 93 94 # ========================================== 95 # Keyboard Shortcuts for Nested Workspaces 96 # ========================================== 97 98 Scenario: Assign keyboard shortcut to switch to specific parent workspace 99 Given the following parent workspaces exist: 100 | Python Research | 101 | Project Z | 102 When I assign keyboard shortcut "Ctrl+Shift+1" to "Python Research" 103 And I press "Ctrl+Shift+1" 104 Then the context should switch to "Python Research" 105 And all child workspaces should open 106 107 Scenario: Quick switch between recently used contexts 108 Given the following parent workspaces exist: 109 | Python Research | 110 | Project Z | 111 | JavaScript Work | 112 And I have recently switched through these contexts in order: 113 | Python Research | 114 | Project Z | 115 | Python Research | 116 When I press "Ctrl+Shift+Tab" (previous context shortcut) 117 Then the context should switch to "Project Z" 118 119 Scenario: Navigate parent workspace list with keyboard 120 Given the following parent workspaces exist: 121 | Python Research | 122 | Project Z | 123 | JavaScript Work | 124 And the extension popup is open 125 When I press the "Down Arrow" key 126 Then the next parent workspace should be highlighted 127 When I press "Enter" 128 Then the highlighted workspace context should open 129 130 # ========================================== 131 # Workspace Templates 132 # ========================================== 133 134 Scenario: Create parent workspace from template 135 Given a workspace template exists with structure: 136 | Development Project (parent) | 137 | - Documentation | 138 | - Code Repository | 139 | - Testing | 140 When I create a new workspace from template 141 And I name it "Mobile App Project" 142 Then a parent workspace "Mobile App Project" should be created 143 And it should contain 3 empty child workspaces: 144 | Documentation | 145 | Code Repository | 146 | Testing | 147 148 Scenario: Save current hierarchy as template 149 Given the following workspace hierarchy exists: 150 | Python Research (parent) | 151 | - asyncIO | 152 | - metaProgramming | 153 When I right-click on "Python Research" 154 And I select "Save as Template" 155 And I name the template "Python Development Template" 156 Then the template should be saved 157 And it should be available in the template list 158 159 # ========================================== 160 # Workspace Statistics and Insights 161 # ========================================== 162 163 Scenario: View parent workspace statistics 164 Given the following workspace hierarchy exists: 165 | Python Research (parent) | 166 | - asyncIO (15 tabs) | 167 | - metaProgramming (8) | 168 When I right-click on "Python Research" 169 And I select "View Statistics" 170 Then a statistics panel should display: 171 | Total child workspaces: 2 | 172 | Total tabs: 23 | 173 | Last accessed: [timestamp] | 174 | Total time in context: 5.5 hrs | 175 176 Scenario: Track context switch history 177 Given I have switched contexts multiple times: 178 | Python Research | 3 times | 179 | Project Z | 5 times | 180 When I view workspace history 181 Then the history should show: 182 | Project Z - 5 switches, Last: [timestamp] | 183 | Python Research - 3 switches, Last: [timestamp] | 184 185 # ========================================== 186 # Bulk Operations on Nested Workspaces 187 # ========================================== 188 189 Scenario: Bulk add workspaces to parent via selection 190 Given the following standalone workspaces exist: 191 | asyncIO | 192 | metaProgramming | 193 | generatorExpressions | 194 | React Tutorials | 195 When I select workspaces using checkboxes: 196 | asyncIO | 197 | metaProgramming | 198 | generatorExpressions | 199 And I click "Add to Parent" in the bulk actions menu 200 And I select parent workspace "Python Research" 201 Then all 3 selected workspaces should be added to "Python Research" 202 And "React Tutorials" should remain standalone 203 204 Scenario: Bulk remove children from parent 205 Given the following workspace hierarchy exists: 206 | Python Research (parent) | 207 | - asyncIO | 208 | - metaProgramming | 209 | - generatorExpressions | 210 When I expand "Python Research" 211 And I select children using checkboxes: 212 | asyncIO | 213 | generatorExpressions | 214 And I click "Remove from Parent" in the bulk actions menu 215 Then "asyncIO" and "generatorExpressions" should become standalone 216 And "metaProgramming" should remain under "Python Research" 217 218 # ========================================== 219 # Smart Context Suggestions 220 # ========================================== 221 222 Scenario: Suggest context based on time of day 223 Given the following workspace hierarchies exist: 224 | Work Projects (parent) | 225 | - Email | 226 | - CRM | 227 | Personal (parent) | 228 | - Social Media | 229 | - Shopping | 230 And I typically use "Work Projects" during 9 AM - 5 PM 231 And the current time is 9:30 AM 232 When I open the extension popup 233 Then "Work Projects" should be highlighted as a suggested context 234 And a notification should suggest: "Switch to Work Projects context?" 235 236 Scenario: Suggest context based on common tab domains 237 Given the following workspace hierarchies exist: 238 | Python Research (parent) | 239 | - asyncIO | 240 | JavaScript Projects | 241 | - React Tutorials | 242 And "asyncIO" commonly contains tabs from "python.org" 243 When I open a tab to "https://docs.python.org" 244 Then a notification should suggest: "Open in Python Research context?" 245 And clicking "Yes" should switch to that context 246 247 # ========================================== 248 # Integration with Tab Discarding/Suspension 249 # ========================================== 250 251 Scenario: Suspend inactive child workspaces within active context 252 Given the following workspace hierarchy exists: 253 | Python Research (parent) | 254 | - asyncIO | 255 | - metaProgramming | 256 | - generatorExpressions | 257 And "Python Research" context is active 258 And "asyncIO" window has been inactive for 30 minutes 259 When automatic tab suspension is enabled 260 Then tabs in "asyncIO" should be suspended to save memory 261 And tabs in active child workspaces should remain unsuspended 262 263 Scenario: Prevent suspension of transcendent workspaces 264 Given a transcendent workspace "Main" is open 265 And the workspace has been inactive for 30 minutes 266 When automatic tab suspension triggers 267 Then "Main" workspace tabs should not be suspended 268 And a log entry should record: "Transcendent workspace excluded from suspension" 269 270 # ========================================== 271 # Accessibility Features 272 # ========================================== 273 274 Scenario: Screen reader announces parent workspace structure 275 Given the following workspace hierarchy exists: 276 | Python Research (parent) | 277 | - asyncIO | 278 | - metaProgramming | 279 And a screen reader is active 280 When I navigate to "Python Research" in the workspace list 281 Then the screen reader should announce: 282 """ 283 Parent workspace: Python Research 284 Contains 2 child workspaces 285 Collapsed. Press Enter to expand 286 """ 287 288 Scenario: High contrast mode for nested workspace indicators 289 Given high contrast mode is enabled in browser 290 When I view the workspace list with nested workspaces 291 Then parent workspace icons should have high contrast styling 292 And child workspace indentation should be clearly visible 293 And tree connector lines should be visible in high contrast 294 295 # ========================================== 296 # Performance and Optimization 297 # ========================================== 298 299 Scenario: Efficiently load large nested workspace structures 300 Given a parent workspace with 50 child workspaces 301 And each child workspace has 20 tabs 302 When I open the extension popup 303 Then the workspace list should load within 500ms 304 And child workspaces should be lazy-loaded when expanding parent 305 306 Scenario: Optimize memory usage for inactive contexts 307 Given the following parent workspaces exist: 308 | Python Research | 309 | Project Z | 310 | JavaScript Work | 311 And only "Python Research" context is active 312 When I check memory usage 313 Then inactive context metadata should be minimal in memory 314 And full workspace data should only be loaded for active context 315 316 # ========================================== 317 # Collaboration Features 318 # ========================================== 319 320 Scenario: Share parent workspace with team member 321 Given the following workspace hierarchy exists: 322 | Team Project (parent) | 323 | - Sprint Planning | 324 | - Code Reviews | 325 | - Documentation | 326 When I right-click on "Team Project" 327 And I select "Generate Share Link" 328 Then a shareable link should be generated 329 And the link should include the complete hierarchy structure 330 331 Scenario: Import shared parent workspace hierarchy 332 Given I receive a shared workspace link for: 333 | Team Project (parent) | 334 | - Sprint Planning | 335 | - Code Reviews | 336 When I click "Import Shared Workspace" 337 And I paste the shared link 338 Then the complete hierarchy should be imported 339 And all tabs should be restored with their original URLs 340 341 # ========================================== 342 # Migration and Backward Compatibility 343 # ========================================== 344 345 Scenario: Migrate existing workspaces to nested structure 346 Given I have 10 existing standalone workspaces 347 And nested workspace feature is newly enabled 348 When I open the extension 349 Then all existing workspaces should remain functional 350 And I should see an option to "Organize into Parent Workspaces" 351 When I select that option 352 Then a migration wizard should help organize existing workspaces 353 354 Scenario: Export workspaces in legacy format without parent data 355 Given the following workspace hierarchy exists: 356 | Python Research (parent) | 357 | - asyncIO | 358 When I export workspaces 359 And I select "Legacy Format (v1.x compatible)" 360 Then the export should contain child workspaces as standalone 361 And parent-child relationships should not be included 362 And a warning should indicate structure will be flattened 363 364 # ========================================== 365 # Advanced Context Switching Rules 366 # ========================================== 367 368 Scenario: Context switch with conditional rules 369 Given the following workspace hierarchy exists: 370 | Python Research (parent) | 371 | - asyncIO | 372 | - metaProgramming | 373 And a transcendent workspace "Email" is open 374 And I set a rule: "When switching contexts, close tabs with domain 'localhost'" 375 When I have tabs open to "localhost:3000" and "github.com" 376 And I switch to "Python Research" context 377 Then the "localhost:3000" tab should be closed 378 And the "github.com" tab should remain open 379 And the "Email" workspace should remain open 380 381 Scenario: Dry run context switch 382 Given the following workspace hierarchies exist: 383 | Python Research (parent) | 384 | - asyncIO | 385 | Project Z (parent) | 386 | - Frontend | 387 And "Python Research" context is active 388 When I right-click on "Project Z" 389 And I select "Preview Context Switch" 390 Then a preview panel should show: 391 | Windows to close: 1 (asyncIO) | 392 | Windows to open: 1 (Frontend) | 393 | Transcendent windows: 0 | 394 | Estimated switch time: 2 seconds | 395 And no actual switching should occur until confirmed