test: removed unused *.feature files
This commit is contained in:
parent
8507dcf6f5
commit
0a21045761
|
@ -233,11 +233,15 @@ class SignatureController extends StateNotifier<SignatureState> {
|
||||||
state = SignatureState.initial();
|
state = SignatureState.initial();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@visibleForTesting
|
||||||
void placeDefaultRect() {
|
void placeDefaultRect() {
|
||||||
final w = 120.0, h = 60.0;
|
final w = 120.0, h = 60.0;
|
||||||
state = state.copyWith(
|
state = state.copyWith(
|
||||||
rect: Rect.fromCenter(
|
rect: Rect.fromCenter(
|
||||||
center: Offset(pageSize.width / 2, pageSize.height * 0.75),
|
center: Offset(
|
||||||
|
(pageSize.width / 2) * Random().nextDouble() * 2 + 1,
|
||||||
|
(pageSize.height / 2) * Random().nextDouble() * 2 + 1,
|
||||||
|
),
|
||||||
width: w,
|
width: w,
|
||||||
height: h,
|
height: h,
|
||||||
),
|
),
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
Feature: PDF state logic
|
|
||||||
|
|
||||||
Scenario: openPicked loads document and initializes state
|
|
||||||
Given a new provider container
|
|
||||||
When I openPicked with path {'test.pdf'} and pageCount {7}
|
|
||||||
Then pdf state is loaded {true}
|
|
||||||
And pdf picked path is {'test.pdf'}
|
|
||||||
And pdf page count is {7}
|
|
||||||
And pdf current page is {1}
|
|
||||||
And pdf marked for signing is {false}
|
|
||||||
|
|
||||||
Scenario: jumpTo clamps within page boundaries
|
|
||||||
Given a new provider container
|
|
||||||
And a pdf is open with path {'test.pdf'} and pageCount {5}
|
|
||||||
When I jumpTo {10}
|
|
||||||
Then pdf current page is {5}
|
|
||||||
When I jumpTo {0}
|
|
||||||
Then pdf current page is {1}
|
|
||||||
When I jumpTo {3}
|
|
||||||
Then pdf current page is {3}
|
|
||||||
|
|
||||||
Scenario: setPageCount updates count without toggling other flags
|
|
||||||
Given a new provider container
|
|
||||||
And a pdf is open with path {'test.pdf'} and pageCount {2}
|
|
||||||
When I toggle mark
|
|
||||||
And I set page count {9}
|
|
||||||
Then pdf page count is {9}
|
|
||||||
And pdf state is loaded {true}
|
|
||||||
And pdf marked for signing is {true}
|
|
|
@ -1,35 +0,0 @@
|
||||||
Feature: Signature state logic
|
|
||||||
|
|
||||||
Scenario: placeDefaultRect centers a reasonable default rect
|
|
||||||
Given a new provider container
|
|
||||||
Then signature rect is null
|
|
||||||
When I place default signature rect
|
|
||||||
Then signature rect left >= {0}
|
|
||||||
And signature rect top >= {0}
|
|
||||||
And signature rect right <= {400}
|
|
||||||
And signature rect bottom <= {560}
|
|
||||||
And signature rect width > {50}
|
|
||||||
And signature rect height > {20}
|
|
||||||
|
|
||||||
Scenario: drag clamps to canvas bounds
|
|
||||||
Given a new provider container
|
|
||||||
And a default signature rect is placed
|
|
||||||
When I drag signature by {Offset(10000, -10000)}
|
|
||||||
Then signature rect left >= {0}
|
|
||||||
And signature rect top >= {0}
|
|
||||||
And signature rect right <= {400}
|
|
||||||
And signature rect bottom <= {560}
|
|
||||||
And signature rect moved from center
|
|
||||||
|
|
||||||
Scenario: resize respects aspect lock and clamps
|
|
||||||
Given a new provider container
|
|
||||||
And a default signature rect is placed
|
|
||||||
And aspect lock is {true}
|
|
||||||
When I resize signature by {Offset(1000, 1000)}
|
|
||||||
Then signature aspect ratio is preserved within {0.05}
|
|
||||||
And signature rect left >= {0}
|
|
||||||
And signature rect top >= {0}
|
|
||||||
And signature rect right <= {400}
|
|
||||||
And signature rect bottom <= {560}
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: a default signature rect is placed
|
|
||||||
Future<void> aDefaultSignatureRectIsPlaced(WidgetTester tester) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
c.read(signatureProvider.notifier).placeDefaultRect();
|
|
||||||
// remember center for movement checks
|
|
||||||
TestWorld.prevCenter = c.read(signatureProvider).rect!.center;
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: a new provider container
|
|
||||||
Future<void> aNewProviderContainer(WidgetTester tester) async {
|
|
||||||
// Ensure a fresh world per scenario
|
|
||||||
TestWorld.container?.dispose();
|
|
||||||
TestWorld.reset();
|
|
||||||
TestWorld.container = ProviderContainer();
|
|
||||||
addTearDown(() {
|
|
||||||
TestWorld.container?.dispose();
|
|
||||||
TestWorld.container = null;
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: a pdf is open with path {'test.pdf'} and pageCount {5}
|
|
||||||
Future<void> aPdfIsOpenWithPathAndPagecount(
|
|
||||||
WidgetTester tester,
|
|
||||||
String path,
|
|
||||||
int pageCount,
|
|
||||||
) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
c.read(pdfProvider.notifier).openPicked(path: path, pageCount: pageCount);
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: aspect lock is {true}
|
|
||||||
Future<void> aspectLockIs(WidgetTester tester, bool value) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
// snapshot current aspect for later validation
|
|
||||||
final r = c.read(signatureProvider).rect;
|
|
||||||
if (r != null) {
|
|
||||||
TestWorld.prevAspect = r.width / r.height;
|
|
||||||
}
|
|
||||||
c.read(signatureProvider.notifier).toggleAspect(value);
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: I drag signature by {Offset(10000, -10000)}
|
|
||||||
Future<void> iDragSignatureBy(WidgetTester tester, Offset delta) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
c.read(signatureProvider.notifier).drag(delta);
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: I jumpTo {10}
|
|
||||||
Future<void> iJumpto(WidgetTester tester, int page) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
c.read(pdfProvider.notifier).jumpTo(page);
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: I openPicked with path {'test.pdf'} and pageCount {7}
|
|
||||||
Future<void> iOpenpickedWithPathAndPagecount(
|
|
||||||
WidgetTester tester,
|
|
||||||
String path,
|
|
||||||
int pageCount,
|
|
||||||
) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
c.read(pdfProvider.notifier).openPicked(path: path, pageCount: pageCount);
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: I place default signature rect
|
|
||||||
Future<void> iPlaceDefaultSignatureRect(WidgetTester tester) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
c.read(signatureProvider.notifier).placeDefaultRect();
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: I resize signature by {Offset(1000, 1000)}
|
|
||||||
Future<void> iResizeSignatureBy(WidgetTester tester, Offset delta) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
c.read(signatureProvider.notifier).resize(delta);
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: I set page count {9}
|
|
||||||
Future<void> iSetPageCount(WidgetTester tester, int count) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
c.read(pdfProvider.notifier).setPageCount(count);
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: I toggle mark
|
|
||||||
Future<void> iToggleMark(WidgetTester tester) async {
|
|
||||||
final container = TestWorld.container ?? ProviderContainer();
|
|
||||||
TestWorld.container = container;
|
|
||||||
final state = container.read(pdfProvider);
|
|
||||||
final notifier = container.read(pdfProvider.notifier);
|
|
||||||
if (state.signedPage == null) {
|
|
||||||
notifier.setSignedPage(state.currentPage);
|
|
||||||
} else {
|
|
||||||
notifier.setSignedPage(null);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: pdf current page is {1}
|
|
||||||
Future<void> pdfCurrentPageIs(WidgetTester tester, int expected) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
expect(c.read(pdfProvider).currentPage, expected);
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: pdf marked for signing is {false}
|
|
||||||
Future<void> pdfMarkedForSigningIs(WidgetTester tester, bool expected) async {
|
|
||||||
final container = TestWorld.container ?? ProviderContainer();
|
|
||||||
final signed = container.read(pdfProvider).signedPage != null;
|
|
||||||
expect(signed, expected);
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: pdf page count is {7}
|
|
||||||
Future<void> pdfPageCountIs(WidgetTester tester, int expected) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
expect(c.read(pdfProvider).pageCount, expected);
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: pdf picked path is {'test.pdf'}
|
|
||||||
Future<void> pdfPickedPathIs(WidgetTester tester, String expected) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final s = c.read(pdfProvider);
|
|
||||||
expect(s.pickedPdfPath, expected);
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: pdf state is loaded {true}
|
|
||||||
Future<void> pdfStateIsLoaded(WidgetTester tester, bool expected) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
expect(c.read(pdfProvider).loaded, expected);
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature aspect ratio is preserved within {0.05}
|
|
||||||
Future<void> signatureAspectRatioIsPreservedWithin(
|
|
||||||
WidgetTester tester,
|
|
||||||
num tolerance,
|
|
||||||
) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final r = c.read(signatureProvider).rect!;
|
|
||||||
final before = TestWorld.prevAspect;
|
|
||||||
if (before == null) {
|
|
||||||
// save and pass
|
|
||||||
TestWorld.prevAspect = r.width / r.height;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final after = r.width / r.height;
|
|
||||||
expect((after - before).abs(), lessThanOrEqualTo(tolerance.toDouble()));
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature rect bottom <= {560}
|
|
||||||
Future<void> signatureRectBottom(WidgetTester tester, num maxBottom) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final r = c.read(signatureProvider).rect!;
|
|
||||||
expect(r.bottom, lessThanOrEqualTo(maxBottom.toDouble()));
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature rect height > {20}
|
|
||||||
Future<void> signatureRectHeight(WidgetTester tester, num minHeight) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final r = c.read(signatureProvider).rect!;
|
|
||||||
expect(r.height, greaterThan(minHeight.toDouble()));
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature rect is null
|
|
||||||
Future<void> signatureRectIsNull(WidgetTester tester) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
expect(c.read(signatureProvider).rect, isNull);
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature rect left >= {0}
|
|
||||||
Future<void> signatureRectLeft(WidgetTester tester, num minLeft) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final r = c.read(signatureProvider).rect!;
|
|
||||||
expect(r.left, greaterThanOrEqualTo(minLeft.toDouble()));
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature rect moved from center
|
|
||||||
Future<void> signatureRectMovedFromCenter(WidgetTester tester) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final prev = TestWorld.prevCenter;
|
|
||||||
final now = c.read(signatureProvider).rect!.center;
|
|
||||||
expect(prev, isNotNull);
|
|
||||||
expect(now, isNot(equals(prev)));
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature rect right <= {400}
|
|
||||||
Future<void> signatureRectRight(WidgetTester tester, num maxRight) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final r = c.read(signatureProvider).rect!;
|
|
||||||
expect(r.right, lessThanOrEqualTo(maxRight.toDouble()));
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature rect top >= {0}
|
|
||||||
Future<void> signatureRectTop(WidgetTester tester, num minTop) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final r = c.read(signatureProvider).rect!;
|
|
||||||
expect(r.top, greaterThanOrEqualTo(minTop.toDouble()));
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
|
||||||
import '_world.dart';
|
|
||||||
|
|
||||||
/// Usage: signature rect width > {50}
|
|
||||||
Future<void> signatureRectWidth(WidgetTester tester, num minWidth) async {
|
|
||||||
final c = TestWorld.container!;
|
|
||||||
final r = c.read(signatureProvider).rect!;
|
|
||||||
expect(r.width, greaterThan(minWidth.toDouble()));
|
|
||||||
}
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
import 'dart:ui' as ui;
|
||||||
|
import 'package:flutter/gestures.dart' show kSecondaryMouseButton;
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
|
import 'helpers.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
Future<void> _confirmActiveOverlay(WidgetTester tester) async {
|
||||||
|
final overlay = find.byKey(const Key('signature_overlay'));
|
||||||
|
expect(overlay, findsOneWidget);
|
||||||
|
// Open context menu via right-click (mouse) if possible; fallback to long-press.
|
||||||
|
final center = tester.getCenter(overlay);
|
||||||
|
final TestGesture mouse = await tester.createGesture(
|
||||||
|
kind: ui.PointerDeviceKind.mouse,
|
||||||
|
buttons: kSecondaryMouseButton,
|
||||||
|
);
|
||||||
|
await mouse.addPointer(location: center);
|
||||||
|
addTearDown(mouse.removePointer);
|
||||||
|
await tester.pump();
|
||||||
|
await mouse.down(center);
|
||||||
|
await tester.pump(const Duration(milliseconds: 30));
|
||||||
|
await mouse.up();
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
// If menu didn't appear, try long-press
|
||||||
|
if (find.byKey(const Key('ctx_active_confirm')).evaluate().isEmpty) {
|
||||||
|
await tester.longPress(overlay);
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
}
|
||||||
|
await tester.tap(find.byKey(const Key('ctx_active_confirm')));
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
}
|
||||||
|
|
||||||
|
testWidgets('Confirming causes placed signature to shrink to upper-left', (
|
||||||
|
tester,
|
||||||
|
) async {
|
||||||
|
await pumpWithOpenPdfAndSig(tester);
|
||||||
|
|
||||||
|
final overlay = find.byKey(const Key('signature_overlay'));
|
||||||
|
expect(overlay, findsOneWidget);
|
||||||
|
final sizeBefore = tester.getSize(overlay);
|
||||||
|
final topLeftBefore = tester.getTopLeft(overlay);
|
||||||
|
|
||||||
|
await _confirmActiveOverlay(tester);
|
||||||
|
|
||||||
|
final placed = find.byKey(const Key('placed_signature_0'));
|
||||||
|
expect(placed, findsOneWidget);
|
||||||
|
final sizeAfter = tester.getSize(placed);
|
||||||
|
final topLeftAfter = tester.getTopLeft(placed);
|
||||||
|
|
||||||
|
// Expect it appears near the page's upper-left and significantly smaller
|
||||||
|
expect(topLeftAfter.dx <= topLeftBefore.dx + 10, isTrue);
|
||||||
|
expect(topLeftAfter.dy <= topLeftBefore.dy + 10, isTrue);
|
||||||
|
expect(sizeAfter.width < sizeBefore.width * 0.5, isTrue);
|
||||||
|
expect(sizeAfter.height < sizeBefore.height * 0.5, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
testWidgets('Placing a new signature makes the previous one disappear', (
|
||||||
|
tester,
|
||||||
|
) async {
|
||||||
|
await pumpWithOpenPdfAndSig(tester);
|
||||||
|
|
||||||
|
// Place first
|
||||||
|
await _confirmActiveOverlay(tester);
|
||||||
|
expect(find.byKey(const Key('placed_signature_0')), findsOneWidget);
|
||||||
|
|
||||||
|
// Activate a new overlay by tapping the first signature card in the sidebar
|
||||||
|
final cardTapTarget = find.byKey(const Key('gd_signature_card_area')).first;
|
||||||
|
expect(cardTapTarget, findsOneWidget);
|
||||||
|
await tester.tap(cardTapTarget);
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
|
||||||
|
// Optionally move a bit to avoid exact overlap
|
||||||
|
final active = find.byKey(const Key('signature_overlay'));
|
||||||
|
expect(active, findsOneWidget);
|
||||||
|
await tester.drag(active, const Offset(20, 10));
|
||||||
|
await tester.pump();
|
||||||
|
|
||||||
|
// Confirm again
|
||||||
|
await _confirmActiveOverlay(tester);
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
|
||||||
|
// Expect only one placed signature remains visible (old one disappeared)
|
||||||
|
final placedAll = find.byWidgetPredicate(
|
||||||
|
(w) => w.key?.toString().contains('placed_signature_') == true,
|
||||||
|
);
|
||||||
|
expect(placedAll.evaluate().length, 1);
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue