Files
buzz/mobile/test/features/profile/camera_disposal_barrier_test.dart
klopez4212 9aa332af03 Add inline profile camera capture (#6680)
## Summary

- add inline profile photo capture with smooth avatar-to-viewfinder
transitions
- add close, flip, shutter, retry, and use-photo states with haptics and
front-camera mirroring
- polish iOS liquid-glass controls and avatar editor motion

### Related issue

Follow-up to #6583.

### Testing

- just mobile-check
- just mobile-test (1,743 tests)
- built, installed, and launched on Pixel 10 and iPhone Air

---------

Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: Code Reviewer <037593536284cf40e221c96c931e9877d4166d54f6bb84e5341a86d7fd5d05a4@buzz.block.builderlab.xyz>
Signed-off-by: Perci <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@buzz.block.builderlab.xyz>
Signed-off-by: Max <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@buzz.block.builderlab.xyz>
Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Signed-off-by: Meli <5aaa86bce934fc3445fc254aab560a40923f10252f92107e665073dede0e04d3@buzz.block.builderlab.xyz>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Co-authored-by: Code Reviewer <037593536284cf40e221c96c931e9877d4166d54f6bb84e5341a86d7fd5d05a4@buzz.block.builderlab.xyz>
Co-authored-by: Tyler <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Perci <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@buzz.block.builderlab.xyz>
Co-authored-by: Max <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@buzz.block.builderlab.xyz>
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Co-authored-by: Meli <5aaa86bce934fc3445fc254aab560a40923f10252f92107e665073dede0e04d3@buzz.block.builderlab.xyz>
Co-authored-by: morgmart <98432065+morgmart@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-08-25 14:58:55 +01:00

59 lines
1.6 KiB
Dart

import 'dart:async';
import 'package:buzz/features/profile/camera_disposal_barrier.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('failed disposal settles before a replacement camera release', () async {
final barrier = CameraDisposalBarrier();
final firstDispose = Completer<void>();
final secondDispose = Completer<void>();
var secondStarted = false;
final first = barrier.release(() => firstDispose.future);
final second = barrier.release(() {
secondStarted = true;
return secondDispose.future;
});
expect(secondStarted, isFalse);
firstDispose.completeError(StateError('native camera teardown failed'));
await first;
await Future<void>.delayed(Duration.zero);
expect(secondStarted, isTrue);
secondDispose.complete();
await second;
await barrier.settled;
});
test(
'serializes replacement releases without overlapping ownership',
() async {
final barrier = CameraDisposalBarrier();
final firstDispose = Completer<void>();
var activeDisposals = 0;
var overlapped = false;
final first = barrier.release(() async {
activeDisposals++;
if (activeDisposals > 1) overlapped = true;
await firstDispose.future;
activeDisposals--;
});
final second = barrier.release(() async {
activeDisposals++;
if (activeDisposals > 1) overlapped = true;
activeDisposals--;
});
await Future<void>.delayed(Duration.zero);
expect(activeDisposals, 1);
firstDispose.complete();
await Future.wait([first, second]);
expect(overlapped, isFalse);
},
);
}