Add local preference signal scaffolding
This commit is contained in:
@@ -80,6 +80,84 @@ void main() {
|
||||
expect(afterDelete.moments.length, beforeCount);
|
||||
});
|
||||
|
||||
test('upserts inferred preference signals and updates status', () async {
|
||||
final ProviderContainer container = _createContainer();
|
||||
addTearDown(container.dispose);
|
||||
|
||||
final LocalDataState state = await container.read(
|
||||
localRepositoryProvider.future,
|
||||
);
|
||||
final String personId = state.people.first.id;
|
||||
|
||||
final PersonPreferenceSignal first = await container
|
||||
.read(localRepositoryProvider.notifier)
|
||||
.upsertInferredPreferenceSignalObservation(
|
||||
personId: personId,
|
||||
key: 'drink:tea',
|
||||
label: 'Tea',
|
||||
category: 'drink',
|
||||
polarity: PreferenceSignalPolarity.like,
|
||||
confidence: 0.7,
|
||||
sourceApp: 'whatsapp',
|
||||
evidenceMessageId: 'sm-1',
|
||||
evidenceSnippet: 'I prefer tea over coffee in the evening.',
|
||||
);
|
||||
|
||||
final PersonPreferenceSignal second = await container
|
||||
.read(localRepositoryProvider.notifier)
|
||||
.upsertInferredPreferenceSignalObservation(
|
||||
personId: personId,
|
||||
key: 'drink:tea',
|
||||
label: 'Tea',
|
||||
category: 'drink',
|
||||
polarity: PreferenceSignalPolarity.like,
|
||||
confidence: 0.9,
|
||||
sourceApp: 'imessage',
|
||||
evidenceMessageId: 'sm-2',
|
||||
evidenceSnippet: 'Tea sounds perfect after dinner.',
|
||||
);
|
||||
|
||||
final LocalDataState afterUpsert = await container.read(
|
||||
localRepositoryProvider.future,
|
||||
);
|
||||
final PersonPreferenceSignal signal = afterUpsert.preferenceSignals
|
||||
.firstWhere((PersonPreferenceSignal item) => item.id == first.id);
|
||||
|
||||
expect(first.id, second.id);
|
||||
expect(signal.personId, personId);
|
||||
expect(signal.occurrenceCount, 2);
|
||||
expect(signal.status, PreferenceSignalStatus.inferred);
|
||||
expect(signal.confidence, closeTo(0.8, 0.001));
|
||||
expect(signal.sourceApps, containsAll(<String>['whatsapp', 'imessage']));
|
||||
expect(signal.evidenceMessageIds, containsAll(<String>['sm-1', 'sm-2']));
|
||||
|
||||
await container
|
||||
.read(localRepositoryProvider.notifier)
|
||||
.confirmPreferenceSignal(signal.id);
|
||||
final LocalDataState afterConfirm = await container.read(
|
||||
localRepositoryProvider.future,
|
||||
);
|
||||
expect(
|
||||
afterConfirm.preferenceSignals
|
||||
.firstWhere((PersonPreferenceSignal item) => item.id == signal.id)
|
||||
.status,
|
||||
PreferenceSignalStatus.confirmed,
|
||||
);
|
||||
|
||||
await container
|
||||
.read(localRepositoryProvider.notifier)
|
||||
.dismissPreferenceSignal(signal.id);
|
||||
final LocalDataState afterDismiss = await container.read(
|
||||
localRepositoryProvider.future,
|
||||
);
|
||||
expect(
|
||||
afterDismiss.preferenceSignals
|
||||
.firstWhere((PersonPreferenceSignal item) => item.id == signal.id)
|
||||
.status,
|
||||
PreferenceSignalStatus.dismissed,
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'ingestSharedMessage auto-creates profile and reuses source link for follow-up messages',
|
||||
() async {
|
||||
|
||||
Reference in New Issue
Block a user