f655adfbea
Migrate app code into canonical feature slices, add phone-only AI digest scheduling and review, wire local notification/background task support, and cover the flow with tests.
83 lines
2.7 KiB
Dart
83 lines
2.7 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:relationship_saver/features/local/local_models.dart';
|
|
import 'package:relationship_saver/features/share_intake/domain/share_capture_draft_suggester.dart';
|
|
|
|
void main() {
|
|
test('suggests gift idea draft from gift-oriented text', () {
|
|
final CapturedFactDraft draft =
|
|
ShareCaptureDraftSuggester.suggestForPayload(
|
|
SharedPayload(
|
|
sourceApp: 'whatsapp',
|
|
payloadType: SharedPayloadType.text,
|
|
rawText: 'Gift idea: blue scarf she mentioned last week',
|
|
createdAt: DateTime(2026, 4, 17),
|
|
receivedAt: DateTime(2026, 4, 17),
|
|
platform: 'android',
|
|
),
|
|
);
|
|
|
|
expect(draft.type, CapturedFactType.giftIdea);
|
|
expect(draft.label, 'Gift idea');
|
|
expect(draft.needsReview, isTrue);
|
|
});
|
|
|
|
test(
|
|
'suggests important date draft when birthday and explicit date are present',
|
|
() {
|
|
final CapturedFactDraft draft =
|
|
ShareCaptureDraftSuggester.suggestForPayload(
|
|
SharedPayload(
|
|
sourceApp: 'notes',
|
|
payloadType: SharedPayloadType.text,
|
|
rawText: 'Her birthday is 2026-09-14',
|
|
createdAt: DateTime(2026, 4, 17),
|
|
receivedAt: DateTime(2026, 4, 17),
|
|
platform: 'ios',
|
|
),
|
|
);
|
|
|
|
expect(draft.type, CapturedFactType.importantDate);
|
|
expect(draft.label, 'Birthday');
|
|
expect(draft.dateValue, DateTime(2026, 9, 14));
|
|
},
|
|
);
|
|
|
|
test('suggests place idea for shared maps links', () {
|
|
final CapturedFactDraft draft =
|
|
ShareCaptureDraftSuggester.suggestForPayload(
|
|
SharedPayload(
|
|
sourceApp: 'share_sheet',
|
|
payloadType: SharedPayloadType.url,
|
|
rawText: '',
|
|
url: 'https://maps.apple.com/?address=1%20Infinite%20Loop',
|
|
createdAt: DateTime(2026, 4, 17),
|
|
receivedAt: DateTime(2026, 4, 17),
|
|
platform: 'ios',
|
|
),
|
|
);
|
|
|
|
expect(draft.type, CapturedFactType.placeIdea);
|
|
expect(draft.label, 'Place idea');
|
|
});
|
|
|
|
test(
|
|
'suggests dislike when text contains strong negative preference signal',
|
|
() {
|
|
final CapturedFactDraft draft =
|
|
ShareCaptureDraftSuggester.suggestForPayload(
|
|
SharedPayload(
|
|
sourceApp: 'signal',
|
|
payloadType: SharedPayloadType.text,
|
|
rawText: "She doesn't like crowded bars",
|
|
createdAt: DateTime(2026, 4, 17),
|
|
receivedAt: DateTime(2026, 4, 17),
|
|
platform: 'android',
|
|
),
|
|
);
|
|
|
|
expect(draft.type, CapturedFactType.dislike);
|
|
expect(draft.label, 'Preference');
|
|
},
|
|
);
|
|
}
|