TF-3480 Fix logic ComposerManager unit test

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-03-12 16:41:41 +07:00
committed by Dat H. Pham
parent cfc72a6f4f
commit 73c97f15ba
2 changed files with 51 additions and 131 deletions
@@ -48,7 +48,7 @@ class ComposerManager extends GetxController {
composerIdsQueue.add(composerId);
}
_syncQueueIfNeeded();
_arrangeComposerIfNeeded();
}
void removeComposer(String id) {
@@ -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);
});