Skip to content

Commit b8fdb0f

Browse files
barbieriwravery
authored andcommitted
Cherry-pick new unit test to pin behavior
1 parent 5fb0f42 commit b8fdb0f

File tree

11 files changed

+141
-4
lines changed

11 files changed

+141
-4
lines changed

samples/schema.today.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ type Appointment implements Node {
115115
when: DateTime
116116
subject: String
117117
isNow: Boolean!
118+
forceError: String
118119
}
119120

120121
type Task implements Node {

samples/separate/AppointmentObject.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Appointment::Appointment()
2323
"Appointment"
2424
}, {
2525
{ R"gql(__typename)gql"sv, [this](service::ResolverParams&& params) { return resolve_typename(std::move(params)); } },
26+
{ R"gql(forceError)gql"sv, [this](service::ResolverParams&& params) { return resolveForceError(std::move(params)); } },
2627
{ R"gql(id)gql"sv, [this](service::ResolverParams&& params) { return resolveId(std::move(params)); } },
2728
{ R"gql(isNow)gql"sv, [this](service::ResolverParams&& params) { return resolveIsNow(std::move(params)); } },
2829
{ R"gql(subject)gql"sv, [this](service::ResolverParams&& params) { return resolveSubject(std::move(params)); } },
@@ -87,6 +88,20 @@ std::future<response::Value> Appointment::resolveIsNow(service::ResolverParams&&
8788
return service::ModifiedResult<response::BooleanType>::convert(std::move(result), std::move(params));
8889
}
8990

91+
service::FieldResult<std::optional<response::StringType>> Appointment::getForceError(service::FieldParams&&) const
92+
{
93+
throw std::runtime_error(R"ex(Appointment::getForceError is not implemented)ex");
94+
}
95+
96+
std::future<response::Value> Appointment::resolveForceError(service::ResolverParams&& params)
97+
{
98+
std::unique_lock resolverLock(_resolverMutex);
99+
auto result = getForceError(service::FieldParams(params, std::move(params.fieldDirectives)));
100+
resolverLock.unlock();
101+
102+
return service::ModifiedResult<response::StringType>::convert<service::TypeModifier::Nullable>(std::move(result), std::move(params));
103+
}
104+
90105
std::future<response::Value> Appointment::resolve_typename(service::ResolverParams&& params)
91106
{
92107
return service::ModifiedResult<response::StringType>::convert(response::StringType{ R"gql(Appointment)gql" }, std::move(params));
@@ -103,7 +118,8 @@ void AddAppointmentDetails(std::shared_ptr<schema::ObjectType> typeAppointment,
103118
std::make_shared<schema::Field>(R"gql(id)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("ID"))),
104119
std::make_shared<schema::Field>(R"gql(when)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("DateTime")),
105120
std::make_shared<schema::Field>(R"gql(subject)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("String")),
106-
std::make_shared<schema::Field>(R"gql(isNow)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("Boolean")))
121+
std::make_shared<schema::Field>(R"gql(isNow)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("Boolean"))),
122+
std::make_shared<schema::Field>(R"gql(forceError)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("String"))
107123
});
108124
}
109125

samples/separate/AppointmentObject.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ class Appointment
2222
virtual service::FieldResult<std::optional<response::Value>> getWhen(service::FieldParams&& params) const;
2323
virtual service::FieldResult<std::optional<response::StringType>> getSubject(service::FieldParams&& params) const;
2424
virtual service::FieldResult<response::BooleanType> getIsNow(service::FieldParams&& params) const;
25+
virtual service::FieldResult<std::optional<response::StringType>> getForceError(service::FieldParams&& params) const;
2526

2627
private:
2728
std::future<response::Value> resolveId(service::ResolverParams&& params);
2829
std::future<response::Value> resolveWhen(service::ResolverParams&& params);
2930
std::future<response::Value> resolveSubject(service::ResolverParams&& params);
3031
std::future<response::Value> resolveIsNow(service::ResolverParams&& params);
32+
std::future<response::Value> resolveForceError(service::ResolverParams&& params);
3133

3234
std::future<response::Value> resolve_typename(service::ResolverParams&& params);
3335
};

samples/separate_nointrospection/AppointmentObject.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Appointment::Appointment()
2323
"Appointment"
2424
}, {
2525
{ R"gql(__typename)gql"sv, [this](service::ResolverParams&& params) { return resolve_typename(std::move(params)); } },
26+
{ R"gql(forceError)gql"sv, [this](service::ResolverParams&& params) { return resolveForceError(std::move(params)); } },
2627
{ R"gql(id)gql"sv, [this](service::ResolverParams&& params) { return resolveId(std::move(params)); } },
2728
{ R"gql(isNow)gql"sv, [this](service::ResolverParams&& params) { return resolveIsNow(std::move(params)); } },
2829
{ R"gql(subject)gql"sv, [this](service::ResolverParams&& params) { return resolveSubject(std::move(params)); } },
@@ -87,6 +88,20 @@ std::future<response::Value> Appointment::resolveIsNow(service::ResolverParams&&
8788
return service::ModifiedResult<response::BooleanType>::convert(std::move(result), std::move(params));
8889
}
8990

91+
service::FieldResult<std::optional<response::StringType>> Appointment::getForceError(service::FieldParams&&) const
92+
{
93+
throw std::runtime_error(R"ex(Appointment::getForceError is not implemented)ex");
94+
}
95+
96+
std::future<response::Value> Appointment::resolveForceError(service::ResolverParams&& params)
97+
{
98+
std::unique_lock resolverLock(_resolverMutex);
99+
auto result = getForceError(service::FieldParams(params, std::move(params.fieldDirectives)));
100+
resolverLock.unlock();
101+
102+
return service::ModifiedResult<response::StringType>::convert<service::TypeModifier::Nullable>(std::move(result), std::move(params));
103+
}
104+
90105
std::future<response::Value> Appointment::resolve_typename(service::ResolverParams&& params)
91106
{
92107
return service::ModifiedResult<response::StringType>::convert(response::StringType{ R"gql(Appointment)gql" }, std::move(params));
@@ -103,7 +118,8 @@ void AddAppointmentDetails(std::shared_ptr<schema::ObjectType> typeAppointment,
103118
std::make_shared<schema::Field>(R"gql(id)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("ID"))),
104119
std::make_shared<schema::Field>(R"gql(when)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("DateTime")),
105120
std::make_shared<schema::Field>(R"gql(subject)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("String")),
106-
std::make_shared<schema::Field>(R"gql(isNow)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("Boolean")))
121+
std::make_shared<schema::Field>(R"gql(isNow)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("Boolean"))),
122+
std::make_shared<schema::Field>(R"gql(forceError)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("String"))
107123
});
108124
}
109125

samples/separate_nointrospection/AppointmentObject.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ class Appointment
2222
virtual service::FieldResult<std::optional<response::Value>> getWhen(service::FieldParams&& params) const;
2323
virtual service::FieldResult<std::optional<response::StringType>> getSubject(service::FieldParams&& params) const;
2424
virtual service::FieldResult<response::BooleanType> getIsNow(service::FieldParams&& params) const;
25+
virtual service::FieldResult<std::optional<response::StringType>> getForceError(service::FieldParams&& params) const;
2526

2627
private:
2728
std::future<response::Value> resolveId(service::ResolverParams&& params);
2829
std::future<response::Value> resolveWhen(service::ResolverParams&& params);
2930
std::future<response::Value> resolveSubject(service::ResolverParams&& params);
3031
std::future<response::Value> resolveIsNow(service::ResolverParams&& params);
32+
std::future<response::Value> resolveForceError(service::ResolverParams&& params);
3133

3234
std::future<response::Value> resolve_typename(service::ResolverParams&& params);
3335
};

samples/today/TodayMock.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,12 @@ class Appointment : public object::Appointment
154154
return _isNow;
155155
}
156156

157+
service::FieldResult<std::optional<response::StringType>> getForceError(
158+
service::FieldParams&&) const final
159+
{
160+
throw std::runtime_error(R"ex(this error was forced)ex");
161+
}
162+
157163
private:
158164
response::IdType _id;
159165
std::string _when;

samples/unified/TodaySchema.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,7 @@ Appointment::Appointment()
760760
"Appointment"
761761
}, {
762762
{ R"gql(__typename)gql"sv, [this](service::ResolverParams&& params) { return resolve_typename(std::move(params)); } },
763+
{ R"gql(forceError)gql"sv, [this](service::ResolverParams&& params) { return resolveForceError(std::move(params)); } },
763764
{ R"gql(id)gql"sv, [this](service::ResolverParams&& params) { return resolveId(std::move(params)); } },
764765
{ R"gql(isNow)gql"sv, [this](service::ResolverParams&& params) { return resolveIsNow(std::move(params)); } },
765766
{ R"gql(subject)gql"sv, [this](service::ResolverParams&& params) { return resolveSubject(std::move(params)); } },
@@ -824,6 +825,20 @@ std::future<response::Value> Appointment::resolveIsNow(service::ResolverParams&&
824825
return service::ModifiedResult<response::BooleanType>::convert(std::move(result), std::move(params));
825826
}
826827

828+
service::FieldResult<std::optional<response::StringType>> Appointment::getForceError(service::FieldParams&&) const
829+
{
830+
throw std::runtime_error(R"ex(Appointment::getForceError is not implemented)ex");
831+
}
832+
833+
std::future<response::Value> Appointment::resolveForceError(service::ResolverParams&& params)
834+
{
835+
std::unique_lock resolverLock(_resolverMutex);
836+
auto result = getForceError(service::FieldParams(params, std::move(params.fieldDirectives)));
837+
resolverLock.unlock();
838+
839+
return service::ModifiedResult<response::StringType>::convert<service::TypeModifier::Nullable>(std::move(result), std::move(params));
840+
}
841+
827842
std::future<response::Value> Appointment::resolve_typename(service::ResolverParams&& params)
828843
{
829844
return service::ModifiedResult<response::StringType>::convert(response::StringType{ R"gql(Appointment)gql" }, std::move(params));
@@ -1194,7 +1209,8 @@ void AddTypesToSchema(const std::shared_ptr<schema::Schema>& schema)
11941209
std::make_shared<schema::Field>(R"gql(id)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("ID"))),
11951210
std::make_shared<schema::Field>(R"gql(when)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("DateTime")),
11961211
std::make_shared<schema::Field>(R"gql(subject)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("String")),
1197-
std::make_shared<schema::Field>(R"gql(isNow)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("Boolean")))
1212+
std::make_shared<schema::Field>(R"gql(isNow)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("Boolean"))),
1213+
std::make_shared<schema::Field>(R"gql(forceError)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("String"))
11981214
});
11991215
typeTask->AddInterfaces({
12001216
typeNode

samples/unified/TodaySchema.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,12 +278,14 @@ class Appointment
278278
virtual service::FieldResult<std::optional<response::Value>> getWhen(service::FieldParams&& params) const;
279279
virtual service::FieldResult<std::optional<response::StringType>> getSubject(service::FieldParams&& params) const;
280280
virtual service::FieldResult<response::BooleanType> getIsNow(service::FieldParams&& params) const;
281+
virtual service::FieldResult<std::optional<response::StringType>> getForceError(service::FieldParams&& params) const;
281282

282283
private:
283284
std::future<response::Value> resolveId(service::ResolverParams&& params);
284285
std::future<response::Value> resolveWhen(service::ResolverParams&& params);
285286
std::future<response::Value> resolveSubject(service::ResolverParams&& params);
286287
std::future<response::Value> resolveIsNow(service::ResolverParams&& params);
288+
std::future<response::Value> resolveForceError(service::ResolverParams&& params);
287289

288290
std::future<response::Value> resolve_typename(service::ResolverParams&& params);
289291
};

samples/unified_nointrospection/TodaySchema.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,7 @@ Appointment::Appointment()
743743
"Appointment"
744744
}, {
745745
{ R"gql(__typename)gql"sv, [this](service::ResolverParams&& params) { return resolve_typename(std::move(params)); } },
746+
{ R"gql(forceError)gql"sv, [this](service::ResolverParams&& params) { return resolveForceError(std::move(params)); } },
746747
{ R"gql(id)gql"sv, [this](service::ResolverParams&& params) { return resolveId(std::move(params)); } },
747748
{ R"gql(isNow)gql"sv, [this](service::ResolverParams&& params) { return resolveIsNow(std::move(params)); } },
748749
{ R"gql(subject)gql"sv, [this](service::ResolverParams&& params) { return resolveSubject(std::move(params)); } },
@@ -807,6 +808,20 @@ std::future<response::Value> Appointment::resolveIsNow(service::ResolverParams&&
807808
return service::ModifiedResult<response::BooleanType>::convert(std::move(result), std::move(params));
808809
}
809810

811+
service::FieldResult<std::optional<response::StringType>> Appointment::getForceError(service::FieldParams&&) const
812+
{
813+
throw std::runtime_error(R"ex(Appointment::getForceError is not implemented)ex");
814+
}
815+
816+
std::future<response::Value> Appointment::resolveForceError(service::ResolverParams&& params)
817+
{
818+
std::unique_lock resolverLock(_resolverMutex);
819+
auto result = getForceError(service::FieldParams(params, std::move(params.fieldDirectives)));
820+
resolverLock.unlock();
821+
822+
return service::ModifiedResult<response::StringType>::convert<service::TypeModifier::Nullable>(std::move(result), std::move(params));
823+
}
824+
810825
std::future<response::Value> Appointment::resolve_typename(service::ResolverParams&& params)
811826
{
812827
return service::ModifiedResult<response::StringType>::convert(response::StringType{ R"gql(Appointment)gql" }, std::move(params));
@@ -1177,7 +1192,8 @@ void AddTypesToSchema(const std::shared_ptr<schema::Schema>& schema)
11771192
std::make_shared<schema::Field>(R"gql(id)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("ID"))),
11781193
std::make_shared<schema::Field>(R"gql(when)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("DateTime")),
11791194
std::make_shared<schema::Field>(R"gql(subject)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("String")),
1180-
std::make_shared<schema::Field>(R"gql(isNow)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("Boolean")))
1195+
std::make_shared<schema::Field>(R"gql(isNow)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType("Boolean"))),
1196+
std::make_shared<schema::Field>(R"gql(forceError)gql"sv, R"md()md"sv, std::nullopt, std::vector<std::shared_ptr<schema::InputValue>>(), schema->LookupType("String"))
11811197
});
11821198
typeTask->AddInterfaces({
11831199
typeNode

samples/unified_nointrospection/TodaySchema.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,12 +274,14 @@ class Appointment
274274
virtual service::FieldResult<std::optional<response::Value>> getWhen(service::FieldParams&& params) const;
275275
virtual service::FieldResult<std::optional<response::StringType>> getSubject(service::FieldParams&& params) const;
276276
virtual service::FieldResult<response::BooleanType> getIsNow(service::FieldParams&& params) const;
277+
virtual service::FieldResult<std::optional<response::StringType>> getForceError(service::FieldParams&& params) const;
277278

278279
private:
279280
std::future<response::Value> resolveId(service::ResolverParams&& params);
280281
std::future<response::Value> resolveWhen(service::ResolverParams&& params);
281282
std::future<response::Value> resolveSubject(service::ResolverParams&& params);
282283
std::future<response::Value> resolveIsNow(service::ResolverParams&& params);
284+
std::future<response::Value> resolveForceError(service::ResolverParams&& params);
283285

284286
std::future<response::Value> resolve_typename(service::ResolverParams&& params);
285287
};

0 commit comments

Comments
 (0)