Skip to content

Commit d974e8a

Browse files
authored
fix: Support record parameters named something other than "record" (serverpod#3411)
1 parent 5c1e8f4 commit d974e8a

File tree

7 files changed

+94
-1
lines changed

7 files changed

+94
-1
lines changed

tests/serverpod_test_client/lib/src/protocol/client.dart

+13
Original file line numberDiff line numberDiff line change
@@ -2528,6 +2528,19 @@ class EndpointRecordParameters extends _i1.EndpointRef {
25282528
{'initialValue': initialValue},
25292529
{'values': values},
25302530
);
2531+
2532+
_i2.Future<int> recordParametersWithCustomNames(
2533+
(int,) positionalRecord, {
2534+
required (int,) namedRecord,
2535+
}) =>
2536+
caller.callServerEndpoint<int>(
2537+
'recordParameters',
2538+
'recordParametersWithCustomNames',
2539+
{
2540+
'positionalRecord': _i19.mapRecordToJson(positionalRecord),
2541+
'namedRecord': _i19.mapRecordToJson(namedRecord),
2542+
},
2543+
);
25312544
}
25322545

25332546
/// {@category Endpoint}

tests/serverpod_test_server/lib/src/endpoints/record_parameters.dart

+10
Original file line numberDiff line numberDiff line change
@@ -316,4 +316,14 @@ class RecordParametersEndpoint extends Endpoint {
316316
}
317317
}
318318
// #endregion
319+
320+
// #region Record parameter with custom name
321+
Future<int> recordParametersWithCustomNames(
322+
Session session,
323+
(int,) positionalRecord, {
324+
required (int,) namedRecord,
325+
}) async {
326+
return positionalRecord.$1 + namedRecord.$1;
327+
}
328+
// #endregion
319329
}

tests/serverpod_test_server/lib/src/generated/endpoints.dart

+25
Original file line numberDiff line numberDiff line change
@@ -5546,6 +5546,31 @@ class Endpoints extends _i1.EndpointDispatch {
55465546
params['value'],
55475547
),
55485548
),
5549+
'recordParametersWithCustomNames': _i1.MethodConnector(
5550+
name: 'recordParametersWithCustomNames',
5551+
params: {
5552+
'positionalRecord': _i1.ParameterDescription(
5553+
name: 'positionalRecord',
5554+
type: _i1.getType<(int,)>(),
5555+
nullable: false,
5556+
),
5557+
'namedRecord': _i1.ParameterDescription(
5558+
name: 'namedRecord',
5559+
type: _i1.getType<(int,)>(),
5560+
nullable: false,
5561+
),
5562+
},
5563+
call: (
5564+
_i1.Session session,
5565+
Map<String, dynamic> params,
5566+
) async =>
5567+
(endpoints['recordParameters'] as _i29.RecordParametersEndpoint)
5568+
.recordParametersWithCustomNames(
5569+
session,
5570+
params['positionalRecord'],
5571+
namedRecord: params['namedRecord'],
5572+
),
5573+
),
55495574
'streamNullableRecordOfNullableInt': _i1.MethodStreamConnector(
55505575
name: 'streamNullableRecordOfNullableInt',
55515576
params: {},

tests/serverpod_test_server/lib/src/generated/protocol.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ recordParameters:
299299
- streamOfModelClassWithRecordField:
300300
- streamOfNullableModelClassWithRecordField:
301301
- streamOfNullableModelClassWithRecordFieldFromExternalModule:
302+
- recordParametersWithCustomNames:
302303
redis:
303304
- setSimpleData:
304305
- setSimpleDataWithLifetime:

tests/serverpod_test_server/test_e2e/record_types_test.dart

+11
Original file line numberDiff line numberDiff line change
@@ -807,4 +807,15 @@ void main() {
807807
),
808808
);
809809
});
810+
811+
test(
812+
'Given the test server, when calling the `recordParametersWithCustomNames`, then the sum of both input values is returned',
813+
() async {
814+
var result = await client.recordParameters.recordParametersWithCustomNames(
815+
(1,),
816+
namedRecord: (2,),
817+
);
818+
819+
expect(result, 3);
820+
});
810821
}

tests/serverpod_test_server/test_integration/test_tools/serverpod_test_tools.dart

+33
Original file line numberDiff line numberDiff line change
@@ -8904,6 +8904,39 @@ class _RecordParametersEndpoint {
89048904
);
89058905
return _localTestStreamManager.outputStreamController.stream;
89068906
}
8907+
8908+
_i3.Future<int> recordParametersWithCustomNames(
8909+
_i1.TestSessionBuilder sessionBuilder,
8910+
(int,) positionalRecord, {
8911+
required (int,) namedRecord,
8912+
}) async {
8913+
return _i1.callAwaitableFunctionAndHandleExceptions(() async {
8914+
var _localUniqueSession =
8915+
(sessionBuilder as _i1.InternalTestSessionBuilder).internalBuild(
8916+
endpoint: 'recordParameters',
8917+
method: 'recordParametersWithCustomNames',
8918+
);
8919+
try {
8920+
var _localCallContext = await _endpointDispatch.getMethodCallContext(
8921+
createSessionCallback: (_) => _localUniqueSession,
8922+
endpointPath: 'recordParameters',
8923+
methodName: 'recordParametersWithCustomNames',
8924+
parameters: _i1.testObjectToJson({
8925+
'positionalRecord': _i20.mapRecordToJson(positionalRecord),
8926+
'namedRecord': _i20.mapRecordToJson(namedRecord),
8927+
}),
8928+
serializationManager: _serializationManager,
8929+
);
8930+
var _localReturnValue = await (_localCallContext.method.call(
8931+
_localUniqueSession,
8932+
_localCallContext.arguments,
8933+
) as _i3.Future<int>);
8934+
return _localReturnValue;
8935+
} finally {
8936+
await _localUniqueSession.close();
8937+
}
8938+
});
8939+
}
89078940
}
89088941

89098942
class _RedisEndpoint {

tools/serverpod_cli/lib/src/generator/dart/library_generators/library_generator.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ class LibraryGenerator {
790790
// The generated classes implement `ProtocolSerialization` and get handle by `serverpod_serialization` later
791791
// For the records we need to transform them into a map that can be handled by the shared (non-project specific) serialization code
792792
literalString(parameterDef.name): parameterDef.type.isRecordType
793-
? mapRecordToJsonRef.call([refer('record')]).code
793+
? mapRecordToJsonRef.call([refer(parameterDef.name)]).code
794794
: (parameterDef.type.returnsRecordInContainer
795795
? Block.of([
796796
if (parameterDef.type.nullable)

0 commit comments

Comments
 (0)