diff --git a/lib/features/composer/presentation/manager/composer_manager.dart b/lib/features/composer/presentation/manager/composer_manager.dart index 08debeafe..ee2e276c7 100644 --- a/lib/features/composer/presentation/manager/composer_manager.dart +++ b/lib/features/composer/presentation/manager/composer_manager.dart @@ -48,7 +48,7 @@ class ComposerManager extends GetxController { composerIdsQueue.add(composerId); } - _syncQueueIfNeeded(); + _arrangeComposerIfNeeded(); } void removeComposer(String id) { diff --git a/test/features/composer/presentation/manager/composer_manager_test.dart b/test/features/composer/presentation/manager/composer_manager_test.dart index 9170b6498..515d5fdc7 100644 --- a/test/features/composer/presentation/manager/composer_manager_test.dart +++ b/test/features/composer/presentation/manager/composer_manager_test.dart @@ -65,9 +65,10 @@ void main() { Get.reset(); }); + // Only test for desktop with minWidth = 1200 group('ComposerManager::arrangeComposerWhenComposerQueueChanged::', () { - test('Should persist display all hidden composers on a large screen (2500px)', () { - const screenWidth = 2500.0; // Total width for 3 normal composers: 1978px < 2500px + test('Should keep all hidden composers unchanged when screen width changes', () { + const screenWidth = 2500.0; screenDisplayMode1.value = ScreenDisplayMode.hidden; screenDisplayMode2.value = ScreenDisplayMode.hidden; @@ -80,22 +81,8 @@ void main() { expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); }); - test('Should keep all normal composers unchanged on a medium screen that fits perfectly (1978px)', () { - const screenWidth = 1978.0; // Exactly fits 3 normal composers: 3 * 600 + 130 + 16*2 + 8*2 - - screenDisplayMode1.value = ScreenDisplayMode.normal; - screenDisplayMode2.value = ScreenDisplayMode.normal; - screenDisplayMode3.value = ScreenDisplayMode.normal; - - composerManager.arrangeComposerWhenComposerQueueChanged(screenWidth: screenWidth); - - expect(screenDisplayMode1.value, ScreenDisplayMode.normal); - expect(screenDisplayMode2.value, ScreenDisplayMode.normal); - expect(screenDisplayMode3.value, ScreenDisplayMode.normal); - }); - - test('Should minimize and hide composers on a small screen when total width exceeds available space (1000px)', () { - const screenWidth = 1000.0; // Less than space needed for 3 normal composers (1800px) + test('Should rearrange composers when the screen width (1200px) is insufficient for all to remain normal', () { + const screenWidth = 1200.0; screenDisplayMode1.value = ScreenDisplayMode.normal; screenDisplayMode2.value = ScreenDisplayMode.normal; @@ -104,28 +91,42 @@ void main() { composerManager.arrangeComposerWhenComposerQueueChanged(screenWidth: screenWidth); expect(screenDisplayMode1.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode2.value, ScreenDisplayMode.hidden); + expect(screenDisplayMode2.value, ScreenDisplayMode.minimize); expect(screenDisplayMode3.value, ScreenDisplayMode.normal); }); - test('Should adjust composers on a tablet screen when one is hidden and space is sufficient (1500px)', () { - const screenWidth = 1500.0; // Fits 2 normal composers: 1370px < 1500px + test('Should keep all composers in normal mode when the screen width (1978px) is sufficient', () { + const screenWidth = 1978.0; screenDisplayMode1.value = ScreenDisplayMode.normal; screenDisplayMode2.value = ScreenDisplayMode.normal; - screenDisplayMode3.value = ScreenDisplayMode.hidden; + screenDisplayMode3.value = ScreenDisplayMode.normal; composerManager.arrangeComposerWhenComposerQueueChanged(screenWidth: screenWidth); expect(screenDisplayMode1.value, ScreenDisplayMode.normal); expect(screenDisplayMode2.value, ScreenDisplayMode.normal); - expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); + expect(screenDisplayMode3.value, ScreenDisplayMode.normal); }); - test('Should handle mixed states on a very small screen by minimizing and hiding composers (600px)', () { - const screenWidth = 600.0; // Less than space for 1 normal + 1 minimized (1000px) + test('Should adjust composers when the screen width (1200px) is insufficient for all to remain minimized', () { + const screenWidth = 1200.0; - screenDisplayMode1.value = ScreenDisplayMode.normal; + screenDisplayMode1.value = ScreenDisplayMode.minimize; + screenDisplayMode2.value = ScreenDisplayMode.minimize; + screenDisplayMode3.value = ScreenDisplayMode.minimize; + + composerManager.arrangeComposerWhenComposerQueueChanged(screenWidth: screenWidth); + + expect(screenDisplayMode1.value, ScreenDisplayMode.hidden); + expect(screenDisplayMode2.value, ScreenDisplayMode.minimize); + expect(screenDisplayMode3.value, ScreenDisplayMode.minimize); + }); + + test('Should keep hidden composers unchanged and retain minimized composer when screen width is 1200px', () { + const screenWidth = 1200.0; + + screenDisplayMode1.value = ScreenDisplayMode.hidden; screenDisplayMode2.value = ScreenDisplayMode.minimize; screenDisplayMode3.value = ScreenDisplayMode.hidden; @@ -135,41 +136,14 @@ void main() { expect(screenDisplayMode2.value, ScreenDisplayMode.minimize); expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); }); - - test('Should persist display all hidden composers on an extra large screen (4000px)', () { - const screenWidth = 4000.0; // Plenty of space for 3 normal composers (1978px < 4000px) - - screenDisplayMode1.value = ScreenDisplayMode.hidden; - screenDisplayMode2.value = ScreenDisplayMode.hidden; - screenDisplayMode3.value = ScreenDisplayMode.hidden; - - composerManager.arrangeComposerWhenComposerQueueChanged(screenWidth: screenWidth); - - expect(screenDisplayMode1.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode2.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); - }); - - test('Should hide all composers on a very narrow screen when space is extremely limited (200px)', () { - const screenWidth = 200.0; // Less than space for even 1 minimized composer (400px) - - screenDisplayMode1.value = ScreenDisplayMode.normal; - screenDisplayMode2.value = ScreenDisplayMode.normal; - screenDisplayMode3.value = ScreenDisplayMode.normal; - - composerManager.arrangeComposerWhenComposerQueueChanged(screenWidth: screenWidth); - - expect(screenDisplayMode1.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode2.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); - }); }); + // Only test for desktop with minWidth = 1200 group('ComposerManager::arrangeComposerWhenComposerDisplayModeChanged::', () { - test('Should do nothing when the composer queue is empty', () { + test('Should do nothing if the composer queue is empty', () { composerManager.composerIdsQueue.clear(); composerManager.arrangeComposerWhenComposerDisplayModeChanged( - screenWidth: 1000.0, + screenWidth: 1200.0, updatedComposerId: '1', newDisplayMode: ScreenDisplayMode.normal, ); @@ -179,28 +153,10 @@ void main() { expect(screenDisplayMode3.value, ScreenDisplayMode.normal); }); - test('Should refresh without changing states when new display mode is hidden (1000px)', () { - const screenWidth = 1000.0; + test('Should keep hidden composers unchanged when setting one composer to normal on a large screen (2500px)', () { + const screenWidth = 2500.0; screenDisplayMode1.value = ScreenDisplayMode.normal; - screenDisplayMode2.value = ScreenDisplayMode.normal; - screenDisplayMode3.value = ScreenDisplayMode.normal; - - composerManager.arrangeComposerWhenComposerDisplayModeChanged( - screenWidth: screenWidth, - updatedComposerId: '1', - newDisplayMode: ScreenDisplayMode.hidden, - ); - - expect(screenDisplayMode1.value, ScreenDisplayMode.normal); - expect(screenDisplayMode2.value, ScreenDisplayMode.normal); - expect(screenDisplayMode3.value, ScreenDisplayMode.normal); - }); - - test('Should persist show other hidden composers on a large screen when one changes to normal (2500px)', () { - const screenWidth = 2500.0; // Plenty of space for 3 normal composers - - screenDisplayMode1.value = ScreenDisplayMode.hidden; screenDisplayMode2.value = ScreenDisplayMode.hidden; screenDisplayMode3.value = ScreenDisplayMode.hidden; @@ -210,34 +166,16 @@ void main() { newDisplayMode: ScreenDisplayMode.normal, ); - expect(screenDisplayMode1.value, ScreenDisplayMode.hidden); + expect(screenDisplayMode1.value, ScreenDisplayMode.normal); expect(screenDisplayMode2.value, ScreenDisplayMode.hidden); expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); }); - test('Should hide one minimized composer on a small screen when one changes to normal (1000px)', () { - const screenWidth = 1000.0; // Not enough for 2 normal composers - - screenDisplayMode1.value = ScreenDisplayMode.minimize; - screenDisplayMode2.value = ScreenDisplayMode.minimize; - screenDisplayMode3.value = ScreenDisplayMode.minimize; - - composerManager.arrangeComposerWhenComposerDisplayModeChanged( - screenWidth: screenWidth, - updatedComposerId: '1', - newDisplayMode: ScreenDisplayMode.normal, - ); - - expect(screenDisplayMode1.value, ScreenDisplayMode.minimize); // Not changed directly - expect(screenDisplayMode2.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode3.value, ScreenDisplayMode.minimize); - }); - - test('Should minimize one normal composer on a medium screen when one changes to minimize (1500px)', () { - const screenWidth = 1500.0; // Fits 2 normal composers (1370px < 1500px) + test('Should retain layout when a minimized composer remains minimized on a medium screen (1500px)', () { + const screenWidth = 1500.0; screenDisplayMode1.value = ScreenDisplayMode.normal; - screenDisplayMode2.value = ScreenDisplayMode.normal; + screenDisplayMode2.value = ScreenDisplayMode.minimize; screenDisplayMode3.value = ScreenDisplayMode.hidden; composerManager.arrangeComposerWhenComposerDisplayModeChanged( @@ -247,32 +185,32 @@ void main() { ); expect(screenDisplayMode1.value, ScreenDisplayMode.normal); - expect(screenDisplayMode2.value, ScreenDisplayMode.normal); + expect(screenDisplayMode2.value, ScreenDisplayMode.minimize); expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); }); - test('Should hide one minimized composer on a very small screen when one changes to normal (600px)', () { - const screenWidth = 600.0; // Less than space for 1 normal + 1 minimized + test('Should keep all composers in normal mode when screen width (1978px) is sufficient', () { + const screenWidth = 1978.0; - screenDisplayMode1.value = ScreenDisplayMode.minimize; - screenDisplayMode2.value = ScreenDisplayMode.minimize; - screenDisplayMode3.value = ScreenDisplayMode.hidden; + screenDisplayMode1.value = ScreenDisplayMode.normal; + screenDisplayMode2.value = ScreenDisplayMode.normal; + screenDisplayMode3.value = ScreenDisplayMode.normal; composerManager.arrangeComposerWhenComposerDisplayModeChanged( screenWidth: screenWidth, - updatedComposerId: '1', + updatedComposerId: '2', newDisplayMode: ScreenDisplayMode.normal, ); - expect(screenDisplayMode1.value, ScreenDisplayMode.minimize); // Not changed directly - expect(screenDisplayMode2.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); + expect(screenDisplayMode1.value, ScreenDisplayMode.normal); + expect(screenDisplayMode2.value, ScreenDisplayMode.normal); + expect(screenDisplayMode3.value, ScreenDisplayMode.normal); }); - test('Should show other hidden composers as minimized on an extra large screen when one changes to minimize (4000px)', () { - const screenWidth = 4000.0; // Plenty of space for 3 normal composers + test('Should maintain hidden composers when one is minimized on an extra-large screen (4000px)', () { + const screenWidth = 4000.0; - screenDisplayMode1.value = ScreenDisplayMode.hidden; + screenDisplayMode1.value = ScreenDisplayMode.minimize; screenDisplayMode2.value = ScreenDisplayMode.hidden; screenDisplayMode3.value = ScreenDisplayMode.hidden; @@ -282,25 +220,7 @@ void main() { newDisplayMode: ScreenDisplayMode.minimize, ); - expect(screenDisplayMode1.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode2.value, ScreenDisplayMode.hidden); - expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); - }); - - test('Should hide other minimized composers on a very narrow screen when one changes to normal (200px)', () { - const screenWidth = 200.0; // Less than space for 1 minimized composer - - screenDisplayMode1.value = ScreenDisplayMode.minimize; - screenDisplayMode2.value = ScreenDisplayMode.minimize; - screenDisplayMode3.value = ScreenDisplayMode.minimize; - - composerManager.arrangeComposerWhenComposerDisplayModeChanged( - screenWidth: screenWidth, - updatedComposerId: '1', - newDisplayMode: ScreenDisplayMode.normal, - ); - - expect(screenDisplayMode1.value, ScreenDisplayMode.minimize); // Not changed directly + expect(screenDisplayMode1.value, ScreenDisplayMode.minimize); expect(screenDisplayMode2.value, ScreenDisplayMode.hidden); expect(screenDisplayMode3.value, ScreenDisplayMode.hidden); });