Scaffold backend gateway and integration docs

This commit is contained in:
Rijad Zuzo
2026-02-14 20:10:16 +01:00
commit 577c4b33b7
166 changed files with 13382 additions and 0 deletions
@@ -0,0 +1,39 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:relationship_saver/integrations/backend/models/backend_models.dart';
void main() {
test('ChangeEnvelope roundtrip serialization', () {
final ChangeEnvelope source = ChangeEnvelope(
schemaVersion: 1,
entityType: 'person',
entityId: 'p1',
op: ChangeOperation.upsert,
modifiedAt: DateTime.utc(2026, 2, 1),
clientMutationId: 'cm-1',
payload: const <String, dynamic>{'name': 'Alex'},
);
final ChangeEnvelope decoded = ChangeEnvelope.fromJson(source.toJson());
expect(decoded, source);
});
test('SignalsFeed roundtrip serialization', () {
final SignalsFeed source = SignalsFeed(
cursor: 'c1',
items: <SignalItem>[
SignalItem(
id: 's1',
type: 'deal',
title: 'Coffee discount',
createdAt: DateTime.utc(2026, 2, 2, 10),
metadata: const <String, dynamic>{'merchant': 'Cafe'},
),
],
);
final SignalsFeed decoded = SignalsFeed.fromJson(source.toJson());
expect(decoded, source);
});
}
@@ -0,0 +1,37 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:relationship_saver/core/network/backend_exception.dart';
import 'package:relationship_saver/integrations/backend/models/backend_models.dart';
import 'package:relationship_saver/integrations/backend/sync_envelope_validator.dart';
void main() {
test('rejects delete envelopes with payload', () {
final ChangeEnvelope invalid = ChangeEnvelope(
schemaVersion: 1,
entityType: 'person',
entityId: 'p1',
op: ChangeOperation.delete,
modifiedAt: DateTime.utc(2026, 1, 1),
clientMutationId: 'cm-delete',
payload: const <String, dynamic>{'unexpected': true},
);
expect(
() => SyncEnvelopeValidator.validate(invalid),
throwsA(isA<ValidationException>()),
);
});
test('accepts valid upsert envelope', () {
final ChangeEnvelope valid = ChangeEnvelope(
schemaVersion: 1,
entityType: 'person',
entityId: 'p2',
op: ChangeOperation.upsert,
modifiedAt: DateTime.utc(2026, 1, 1),
clientMutationId: 'cm-upsert',
payload: const <String, dynamic>{'name': 'Jamie'},
);
expect(() => SyncEnvelopeValidator.validate(valid), returnsNormally);
});
}