Skip to content

Commit

Permalink
test: Add additional tests to modules and test tools (serverpod#2873)
Browse files Browse the repository at this point in the history
  • Loading branch information
hampuslavin authored Oct 16, 2024
1 parent 9272481 commit 22d2540
Show file tree
Hide file tree
Showing 12 changed files with 163 additions and 0 deletions.
10 changes: 10 additions & 0 deletions tests/serverpod_test_client/lib/src/protocol/client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2248,6 +2248,16 @@ class EndpointTestTools extends _i1.EndpointRef {
{'numbers': numbers},
);

_i2.Stream<_i10.SimpleData> returnsSimpleDataStreamFromInputStream(
_i2.Stream<_i10.SimpleData> simpleDatas) =>
caller.callStreamingServerEndpoint<_i2.Stream<_i10.SimpleData>,
_i10.SimpleData>(
'testTools',
'returnsSimpleDataStreamFromInputStream',
{},
{'simpleDatas': simpleDatas},
);

_i2.Future<void> postNumberToSharedStream(int number) =>
caller.callServerEndpoint<void>(
'testTools',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,14 @@ class EndpointStreaming extends _i1.EndpointRef {
{},
{'stream': stream},
);

_i2.Future<int> simpleInputReturnStream(_i2.Stream<int> stream) =>
caller.callStreamingServerEndpoint<_i2.Future<int>, int>(
'serverpod_test_module.streaming',
'simpleInputReturnStream',
{},
{'stream': stream},
);
}

class Caller extends _i1.ModuleEndpointCaller {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,11 @@ class StreamingEndpoint extends Endpoint {
yield value;
}
}

Future<int> simpleInputReturnStream(
Session session,
Stream<int> stream,
) async {
return stream.first;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,27 @@ class Endpoints extends _i1.EndpointDispatch {
streamParams['stream']!.cast<int>(),
),
),
'simpleInputReturnStream': _i1.MethodStreamConnector(
name: 'simpleInputReturnStream',
params: {},
streamParams: {
'stream': _i1.StreamParameterDescription<int>(
name: 'stream',
nullable: false,
)
},
returnType: _i1.MethodStreamReturnType.futureType,
call: (
_i1.Session session,
Map<String, dynamic> params,
Map<String, Stream> streamParams,
) =>
(endpoints['streaming'] as _i3.StreamingEndpoint)
.simpleInputReturnStream(
session,
streamParams['stream']!.cast<int>(),
),
),
},
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ streaming:
- wasStreamOpenCalled:
- wasStreamClosedCalled:
- intEchoStream:
- simpleInputReturnStream:
Original file line number Diff line number Diff line change
Expand Up @@ -222,4 +222,34 @@ class _StreamingEndpoint {
);
return _localTestStreamManager.outputStreamController.stream;
}

_i3.Future<int> simpleInputReturnStream(
_i1.TestSessionBuilder sessionBuilder,
_i3.Stream<int> stream,
) async {
var _localTestStreamManager = _i1.TestStreamManager<int>();
return _i1
.callAwaitableFunctionWithStreamInputAndHandleExceptions(() async {
var _localUniqueSession =
(sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild(
endpoint: 'streaming',
method: 'simpleInputReturnStream',
);
var _localCallContext =
await _endpointDispatch.getMethodStreamCallContext(
createSessionCallback: (_) => _localUniqueSession,
endpointPath: 'streaming',
methodName: 'simpleInputReturnStream',
arguments: {},
requestedInputStreams: ['stream'],
serializationManager: _serializationManager,
);
await _localTestStreamManager.callStreamMethod(
_localCallContext,
_localUniqueSession,
{'stream': stream},
);
return _localTestStreamManager.outputStreamController.stream;
});
}
}
7 changes: 7 additions & 0 deletions tests/serverpod_test_server/lib/src/endpoints/test_tools.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ class TestToolsEndpoint extends Endpoint {
}
}

Stream<SimpleData> returnsSimpleDataStreamFromInputStream(
Session session, Stream<SimpleData> simpleDatas) async* {
await for (var simpleData in simpleDatas) {
yield simpleData;
}
}

static const sharedStreamName = 'shared-stream';
Future<void> postNumberToSharedStream(Session session, int number) async {
await session.messages
Expand Down
21 changes: 21 additions & 0 deletions tests/serverpod_test_server/lib/src/generated/endpoints.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4939,6 +4939,27 @@ class Endpoints extends _i1.EndpointDispatch {
streamParams['numbers']!.cast<int>(),
),
),
'returnsSimpleDataStreamFromInputStream': _i1.MethodStreamConnector(
name: 'returnsSimpleDataStreamFromInputStream',
params: {},
streamParams: {
'simpleDatas': _i1.StreamParameterDescription<_i42.SimpleData>(
name: 'simpleDatas',
nullable: false,
)
},
returnType: _i1.MethodStreamReturnType.streamType,
call: (
_i1.Session session,
Map<String, dynamic> params,
Map<String, Stream> streamParams,
) =>
(endpoints['testTools'] as _i36.TestToolsEndpoint)
.returnsSimpleDataStreamFromInputStream(
session,
streamParams['simpleDatas']!.cast<_i42.SimpleData>(),
),
),
'postNumberToSharedStreamAndReturnStream': _i1.MethodStreamConnector(
name: 'postNumberToSharedStreamAndReturnStream',
params: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,7 @@ testTools:
- returnsListFromInputStream:
- returnsSimpleDataListFromInputStream:
- returnsStreamFromInputStream:
- returnsSimpleDataStreamFromInputStream:
- postNumberToSharedStream:
- postNumberToSharedStreamAndReturnStream:
- listenForNumbersOnSharedStream:
Expand Down
10 changes: 10 additions & 0 deletions tests/serverpod_test_server/test_e2e/module_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,16 @@ void main() {
await streamComplete.future;
expect(received, numberGenerator);
});

test(
'when calling future-returning method that takes stream as a parameter '
'then should return a future value', () async {
var inputStream = Stream<int>.fromIterable([1]);
var value = await client.modules.module.streaming
.simpleInputReturnStream(inputStream);

expect(value, 1);
});
});

group('Nested modules classes.', () {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,21 @@ void main() {
await expectLater(result, emitsInOrder([1, 2, 3, 4, 5]));
});

test(
'when calling returnsSimpleDataStreamFromInputStream then echoes the input stream back',
() async {
final stream = Stream<SimpleData>.fromIterable([
SimpleData(num: 1),
SimpleData(num: 2),
SimpleData(num: 3),
]);

final result = await endpoints.testTools
.returnsSimpleDataStreamFromInputStream(sessionBuilder, stream)
.toList();
expect(result.map((s) => s.num), [1, 2, 3]);
});

test(
'when calling postNumberToSharedStream and listenForNumbersOnSharedStream with different sessions then number should be echoed',
() async {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7105,6 +7105,38 @@ class _TestToolsEndpoint {
return _localTestStreamManager.outputStreamController.stream;
}

_i3.Stream<_i11.SimpleData> returnsSimpleDataStreamFromInputStream(
_i1.TestSessionBuilder sessionBuilder,
_i3.Stream<_i11.SimpleData> simpleDatas,
) {
var _localTestStreamManager = _i1.TestStreamManager<_i11.SimpleData>();
_i1.callStreamFunctionAndHandleExceptions(
() async {
var _localUniqueSession =
(sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild(
endpoint: 'testTools',
method: 'returnsSimpleDataStreamFromInputStream',
);
var _localCallContext =
await _endpointDispatch.getMethodStreamCallContext(
createSessionCallback: (_) => _localUniqueSession,
endpointPath: 'testTools',
methodName: 'returnsSimpleDataStreamFromInputStream',
arguments: {},
requestedInputStreams: ['simpleDatas'],
serializationManager: _serializationManager,
);
await _localTestStreamManager.callStreamMethod(
_localCallContext,
_localUniqueSession,
{'simpleDatas': simpleDatas},
);
},
_localTestStreamManager.outputStreamController,
);
return _localTestStreamManager.outputStreamController.stream;
}

_i3.Future<void> postNumberToSharedStream(
_i1.TestSessionBuilder sessionBuilder,
int number,
Expand Down

0 comments on commit 22d2540

Please sign in to comment.