nomadcode/apps/client/test/integrations/proto_socket_envelope_test.dart
toki 88674917de feat: proto socket infrastructure communication rail implementation
- Add proto socket client and envelope implementations
- Add proto socket lifecycle integration tests
- Add task service PLAN and CODE_REVIEW documents
- Add workspace integration PLAN and CODE_REVIEW documents
- Update bootstrap with proto socket integration
- Update pubspec dependencies and lock file
- Update Flutter core API candidates documentation
- Update workflow core milestone tracking
2026-05-30 21:12:37 +09:00

69 lines
2.3 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:nomadcode_app/src/integrations/proto_socket/proto_socket_envelope.dart';
void main() {
test('ProtoSocketEnvelope round-trips through google.protobuf.Struct', () {
const envelope = ProtoSocketEnvelope(
id: 'msg-1',
correlationId: 'corr-1',
type: 'request',
channel: 'task',
action: 'task.list',
actor: {'kind': 'client', 'id': 'apps/client'},
auth: {'scheme': 'basic', 'token_ref': 'runtime-secret-ref'},
payload: {
'limit': 20,
'include_archived': false,
'tags': ['core', 'client'],
'filter': {'source': 'manual', 'empty': null},
},
meta: {'connection_id': 'conn-1'},
);
final roundTrip = ProtoSocketEnvelope.fromStruct(envelope.toStruct());
expect(roundTrip.protocolVersion, equals(protoSocketProtocolVersion));
expect(roundTrip.id, equals('msg-1'));
expect(roundTrip.correlationId, equals('corr-1'));
expect(roundTrip.type, equals('request'));
expect(roundTrip.channel, equals('task'));
expect(roundTrip.action, equals('task.list'));
expect(roundTrip.actor, equals(envelope.actor));
expect(roundTrip.auth, equals(envelope.auth));
expect(roundTrip.payload['limit'], equals(20.0));
expect(roundTrip.payload['include_archived'], isFalse);
expect(roundTrip.payload['tags'], equals(['core', 'client']));
expect(
roundTrip.payload['filter'],
equals({'source': 'manual', 'empty': null}),
);
expect(roundTrip.meta, equals(envelope.meta));
});
test('error envelope preserves retryable and details', () {
const envelope = ProtoSocketEnvelope(
id: 'err-1',
correlationId: 'req-1',
type: 'error',
channel: 'task',
action: 'task.get',
error: ProtoSocketEnvelopeError(
code: 'task.not_found',
message: 'task not found',
retryable: false,
details: {'id': 'task-404', 'attempts': 2},
),
);
final roundTrip = ProtoSocketEnvelope.fromStruct(envelope.toStruct());
expect(roundTrip.error, isNotNull);
expect(roundTrip.error!.code, equals('task.not_found'));
expect(roundTrip.error!.message, equals('task not found'));
expect(roundTrip.error!.retryable, isFalse);
expect(
roundTrip.error!.details,
equals({'id': 'task-404', 'attempts': 2.0}),
);
});
}