Skip to content

Commit 7d8eacc

Browse files
authored
[cpp-qt-client] New makeOperationsVirtual option (#19613)
* Implementation of new `makeOperationsVirtual` option * Make new parameter `true` by default * Fix default value set and regenerate samples
1 parent 78f2f70 commit 7d8eacc

File tree

11 files changed

+60
-47
lines changed

11 files changed

+60
-47
lines changed

docs/generators/cpp-qt-client.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
2626
|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true|
2727
|enumUnknownDefaultCase|If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response.With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the server sends an enum case that is not known by the client/spec, they can safely fallback to this case.|<dl><dt>**false**</dt><dd>No changes to the enum's are made, this is the default option.</dd><dt>**true**</dt><dd>With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the enum case sent by the server is not known by the client/spec, can safely be decoded to this case.</dd></dl>|false|
2828
|legacyDiscriminatorBehavior|Set to false for generators with better support for discriminators. (Python, Java, Go, PowerShell, C# have this enabled by default).|<dl><dt>**true**</dt><dd>The mapping in the discriminator includes descendent schemas that allOf inherit from self and the discriminator mapping schemas in the OAS document.</dd><dt>**false**</dt><dd>The mapping in the discriminator includes any descendent schemas that allOf inherit from self, any oneOf schemas, any anyOf schemas, any x-discriminator-values, and the discriminator mapping schemas in the OAS document AND Codegen validates that oneOf and anyOf schemas contain the required discriminator and throws an error if the discriminator is missing.</dd></dl>|true|
29+
|makeOperationsVirtual|Make all operations methods virtual. This makes it easy to mock the generated API class for testing purposes.| |true|
2930
|modelNamePrefix|Prefix that will be prepended to all model names.| |OAI|
3031
|optionalProjectFile|Generate client.pri.| |true|
3132
|packageName|C++ package (library) name.| |QtOpenAPIClient|

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtClientCodegen.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,16 @@
3636
public class CppQtClientCodegen extends CppQtAbstractCodegen implements CodegenConfig {
3737
public static final String OPTIONAL_PROJECT_FILE_DESC = "Generate client.pri.";
3838
public static final String DEFAULT_PACKAGE_NAME = "QtOpenAPIClient";
39+
public static final String MAKE_OPERATIONS_VIRTUAL_NAME = "makeOperationsVirtual";
40+
public static final String MAKE_OPERATIONS_VIRTUAL_DESC =
41+
"Make all operations methods virtual. " +
42+
"This makes it easy to mock the generated API class for testing purposes.";
3943
protected String packageName = "";
4044
// source folder where to write the files
4145
protected String sourceFolder = "client";
4246
@Setter protected boolean optionalProjectFileFlag = true;
4347
@Setter protected boolean addDownloadProgress = false;
48+
@Setter protected boolean makeOperationsVirtual = true;
4449

4550
public CppQtClientCodegen() {
4651
super();
@@ -100,6 +105,7 @@ public CppQtClientCodegen() {
100105
addOption(CodegenConstants.PACKAGE_NAME, "C++ package (library) name.", DEFAULT_PACKAGE_NAME);
101106
addSwitch(CodegenConstants.OPTIONAL_PROJECT_FILE, OPTIONAL_PROJECT_FILE_DESC, this.optionalProjectFileFlag);
102107
addSwitch("addDownloadProgress", "Add support for Qt download progress", this.addDownloadProgress);
108+
addSwitch(MAKE_OPERATIONS_VIRTUAL_NAME, MAKE_OPERATIONS_VIRTUAL_DESC, this.makeOperationsVirtual);
103109

104110
supportingFiles.add(new SupportingFile("helpers-header.mustache", sourceFolder, PREFIX + "Helpers.h"));
105111
supportingFiles.add(new SupportingFile("helpers-body.mustache", sourceFolder, PREFIX + "Helpers.cpp"));
@@ -140,6 +146,12 @@ public void processOpts() {
140146
additionalProperties.put(CodegenConstants.OPTIONAL_PROJECT_FILE, optionalProjectFileFlag);
141147
}
142148

149+
if (additionalProperties.containsKey(MAKE_OPERATIONS_VIRTUAL_NAME)) {
150+
setMakeOperationsVirtual(convertPropertyToBooleanAndWriteBack(MAKE_OPERATIONS_VIRTUAL_NAME));
151+
} else {
152+
additionalProperties.put(MAKE_OPERATIONS_VIRTUAL_NAME, makeOperationsVirtual);
153+
}
154+
143155
additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName);
144156

145157
if (additionalProperties.containsKey("modelNamePrefix")) {

modules/openapi-generator/src/main/resources/cpp-qt-client/api-header.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public:
5858
{{/required}}
5959
{{/allParams}}
6060
*/{{/hasParams}}
61-
{{#isDeprecated}}Q_DECL_DEPRECATED {{/isDeprecated}}void {{nickname}}({{#allParams}}{{#required}}const {{{dataType}}} &{{/required}}{{^required}}const ::{{cppNamespace}}::OptionalParam<{{{dataType}}}> &{{/required}}{{paramName}}{{^required}} = ::{{cppNamespace}}::OptionalParam<{{{dataType}}}>(){{/required}}{{^-last}}, {{/-last}}{{/allParams}});
61+
{{#isDeprecated}}Q_DECL_DEPRECATED {{/isDeprecated}}{{#makeOperationsVirtual}}virtual {{/makeOperationsVirtual}}void {{nickname}}({{#allParams}}{{#required}}const {{{dataType}}} &{{/required}}{{^required}}const ::{{cppNamespace}}::OptionalParam<{{{dataType}}}> &{{/required}}{{paramName}}{{^required}} = ::{{cppNamespace}}::OptionalParam<{{{dataType}}}>(){{/required}}{{^-last}}, {{/-last}}{{/allParams}});
6262
{{/operation}}{{/operations}}
6363

6464
private:

samples/client/petstore/cpp-qt-addDownloadProgress/client/PFXPetApi.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,50 +62,50 @@ class PFXPetApi : public QObject {
6262
/**
6363
* @param[in] pfx_pet PFXPet [required]
6464
*/
65-
void addPet(const PFXPet &pfx_pet);
65+
virtual void addPet(const PFXPet &pfx_pet);
6666

6767

68-
void allPets();
68+
virtual void allPets();
6969

7070
/**
7171
* @param[in] pet_id qint64 [required]
7272
* @param[in] api_key QString [optional]
7373
*/
74-
void deletePet(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &api_key = ::test_namespace::OptionalParam<QString>());
74+
virtual void deletePet(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &api_key = ::test_namespace::OptionalParam<QString>());
7575

7676
/**
7777
* @param[in] status QList<QString> [required]
7878
*/
79-
void findPetsByStatus(const QList<QString> &status);
79+
virtual void findPetsByStatus(const QList<QString> &status);
8080

8181
/**
8282
* @param[in] tags QList<QString> [required]
8383
*/
84-
Q_DECL_DEPRECATED void findPetsByTags(const QList<QString> &tags);
84+
Q_DECL_DEPRECATED virtual void findPetsByTags(const QList<QString> &tags);
8585

8686
/**
8787
* @param[in] pet_id qint64 [required]
8888
*/
89-
void getPetById(const qint64 &pet_id);
89+
virtual void getPetById(const qint64 &pet_id);
9090

9191
/**
9292
* @param[in] pfx_pet PFXPet [required]
9393
*/
94-
void updatePet(const PFXPet &pfx_pet);
94+
virtual void updatePet(const PFXPet &pfx_pet);
9595

9696
/**
9797
* @param[in] pet_id qint64 [required]
9898
* @param[in] name QString [optional]
9999
* @param[in] status QString [optional]
100100
*/
101-
void updatePetWithForm(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &name = ::test_namespace::OptionalParam<QString>(), const ::test_namespace::OptionalParam<QString> &status = ::test_namespace::OptionalParam<QString>());
101+
virtual void updatePetWithForm(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &name = ::test_namespace::OptionalParam<QString>(), const ::test_namespace::OptionalParam<QString> &status = ::test_namespace::OptionalParam<QString>());
102102

103103
/**
104104
* @param[in] pet_id qint64 [required]
105105
* @param[in] additional_metadata QString [optional]
106106
* @param[in] file PFXHttpFileElement [optional]
107107
*/
108-
void uploadFile(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &additional_metadata = ::test_namespace::OptionalParam<QString>(), const ::test_namespace::OptionalParam<PFXHttpFileElement> &file = ::test_namespace::OptionalParam<PFXHttpFileElement>());
108+
virtual void uploadFile(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &additional_metadata = ::test_namespace::OptionalParam<QString>(), const ::test_namespace::OptionalParam<PFXHttpFileElement> &file = ::test_namespace::OptionalParam<PFXHttpFileElement>());
109109

110110

111111
private:

samples/client/petstore/cpp-qt-addDownloadProgress/client/PFXPrimitivesApi.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ class PFXPrimitivesApi : public QObject {
5858
/**
5959
* @param[in] body qint32 [optional]
6060
*/
61-
void primitivesIntegerPost(const ::test_namespace::OptionalParam<qint32> &body = ::test_namespace::OptionalParam<qint32>());
61+
virtual void primitivesIntegerPost(const ::test_namespace::OptionalParam<qint32> &body = ::test_namespace::OptionalParam<qint32>());
6262

6363
/**
6464
* @param[in] body double [optional]
6565
*/
66-
void primitivesNumberPut(const ::test_namespace::OptionalParam<double> &body = ::test_namespace::OptionalParam<double>());
66+
virtual void primitivesNumberPut(const ::test_namespace::OptionalParam<double> &body = ::test_namespace::OptionalParam<double>());
6767

6868

6969
private:

samples/client/petstore/cpp-qt-addDownloadProgress/client/PFXStoreApi.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,20 @@ class PFXStoreApi : public QObject {
6060
/**
6161
* @param[in] order_id QString [required]
6262
*/
63-
void deleteOrder(const QString &order_id);
63+
virtual void deleteOrder(const QString &order_id);
6464

6565

66-
void getInventory();
66+
virtual void getInventory();
6767

6868
/**
6969
* @param[in] order_id qint64 [required]
7070
*/
71-
void getOrderById(const qint64 &order_id);
71+
virtual void getOrderById(const qint64 &order_id);
7272

7373
/**
7474
* @param[in] pfx_order PFXOrder [required]
7575
*/
76-
void placeOrder(const PFXOrder &pfx_order);
76+
virtual void placeOrder(const PFXOrder &pfx_order);
7777

7878

7979
private:

samples/client/petstore/cpp-qt-addDownloadProgress/client/PFXUserApi.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,42 +59,42 @@ class PFXUserApi : public QObject {
5959
/**
6060
* @param[in] pfx_user PFXUser [required]
6161
*/
62-
void createUser(const PFXUser &pfx_user);
62+
virtual void createUser(const PFXUser &pfx_user);
6363

6464
/**
6565
* @param[in] pfx_user QList<PFXUser> [required]
6666
*/
67-
void createUsersWithArrayInput(const QList<PFXUser> &pfx_user);
67+
virtual void createUsersWithArrayInput(const QList<PFXUser> &pfx_user);
6868

6969
/**
7070
* @param[in] pfx_user QList<PFXUser> [required]
7171
*/
72-
void createUsersWithListInput(const QList<PFXUser> &pfx_user);
72+
virtual void createUsersWithListInput(const QList<PFXUser> &pfx_user);
7373

7474
/**
7575
* @param[in] username QString [required]
7676
*/
77-
void deleteUser(const QString &username);
77+
virtual void deleteUser(const QString &username);
7878

7979
/**
8080
* @param[in] username QString [required]
8181
*/
82-
void getUserByName(const QString &username);
82+
virtual void getUserByName(const QString &username);
8383

8484
/**
8585
* @param[in] username QString [required]
8686
* @param[in] password QString [required]
8787
*/
88-
void loginUser(const QString &username, const QString &password);
88+
virtual void loginUser(const QString &username, const QString &password);
8989

9090

91-
void logoutUser();
91+
virtual void logoutUser();
9292

9393
/**
9494
* @param[in] username QString [required]
9595
* @param[in] pfx_user PFXUser [required]
9696
*/
97-
void updateUser(const QString &username, const PFXUser &pfx_user);
97+
virtual void updateUser(const QString &username, const PFXUser &pfx_user);
9898

9999

100100
private:

samples/client/petstore/cpp-qt/client/PFXPetApi.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,50 +62,50 @@ class PFXPetApi : public QObject {
6262
/**
6363
* @param[in] pfx_pet PFXPet [required]
6464
*/
65-
void addPet(const PFXPet &pfx_pet);
65+
virtual void addPet(const PFXPet &pfx_pet);
6666

6767

68-
void allPets();
68+
virtual void allPets();
6969

7070
/**
7171
* @param[in] pet_id qint64 [required]
7272
* @param[in] api_key QString [optional]
7373
*/
74-
void deletePet(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &api_key = ::test_namespace::OptionalParam<QString>());
74+
virtual void deletePet(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &api_key = ::test_namespace::OptionalParam<QString>());
7575

7676
/**
7777
* @param[in] status QList<QString> [required]
7878
*/
79-
void findPetsByStatus(const QList<QString> &status);
79+
virtual void findPetsByStatus(const QList<QString> &status);
8080

8181
/**
8282
* @param[in] tags QList<QString> [required]
8383
*/
84-
Q_DECL_DEPRECATED void findPetsByTags(const QList<QString> &tags);
84+
Q_DECL_DEPRECATED virtual void findPetsByTags(const QList<QString> &tags);
8585

8686
/**
8787
* @param[in] pet_id qint64 [required]
8888
*/
89-
void getPetById(const qint64 &pet_id);
89+
virtual void getPetById(const qint64 &pet_id);
9090

9191
/**
9292
* @param[in] pfx_pet PFXPet [required]
9393
*/
94-
void updatePet(const PFXPet &pfx_pet);
94+
virtual void updatePet(const PFXPet &pfx_pet);
9595

9696
/**
9797
* @param[in] pet_id qint64 [required]
9898
* @param[in] name QString [optional]
9999
* @param[in] status QString [optional]
100100
*/
101-
void updatePetWithForm(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &name = ::test_namespace::OptionalParam<QString>(), const ::test_namespace::OptionalParam<QString> &status = ::test_namespace::OptionalParam<QString>());
101+
virtual void updatePetWithForm(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &name = ::test_namespace::OptionalParam<QString>(), const ::test_namespace::OptionalParam<QString> &status = ::test_namespace::OptionalParam<QString>());
102102

103103
/**
104104
* @param[in] pet_id qint64 [required]
105105
* @param[in] additional_metadata QString [optional]
106106
* @param[in] file PFXHttpFileElement [optional]
107107
*/
108-
void uploadFile(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &additional_metadata = ::test_namespace::OptionalParam<QString>(), const ::test_namespace::OptionalParam<PFXHttpFileElement> &file = ::test_namespace::OptionalParam<PFXHttpFileElement>());
108+
virtual void uploadFile(const qint64 &pet_id, const ::test_namespace::OptionalParam<QString> &additional_metadata = ::test_namespace::OptionalParam<QString>(), const ::test_namespace::OptionalParam<PFXHttpFileElement> &file = ::test_namespace::OptionalParam<PFXHttpFileElement>());
109109

110110

111111
private:

samples/client/petstore/cpp-qt/client/PFXPrimitivesApi.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ class PFXPrimitivesApi : public QObject {
5858
/**
5959
* @param[in] body qint32 [optional]
6060
*/
61-
void primitivesIntegerPost(const ::test_namespace::OptionalParam<qint32> &body = ::test_namespace::OptionalParam<qint32>());
61+
virtual void primitivesIntegerPost(const ::test_namespace::OptionalParam<qint32> &body = ::test_namespace::OptionalParam<qint32>());
6262

6363
/**
6464
* @param[in] body double [optional]
6565
*/
66-
void primitivesNumberPut(const ::test_namespace::OptionalParam<double> &body = ::test_namespace::OptionalParam<double>());
66+
virtual void primitivesNumberPut(const ::test_namespace::OptionalParam<double> &body = ::test_namespace::OptionalParam<double>());
6767

6868

6969
private:

samples/client/petstore/cpp-qt/client/PFXStoreApi.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,20 @@ class PFXStoreApi : public QObject {
6060
/**
6161
* @param[in] order_id QString [required]
6262
*/
63-
void deleteOrder(const QString &order_id);
63+
virtual void deleteOrder(const QString &order_id);
6464

6565

66-
void getInventory();
66+
virtual void getInventory();
6767

6868
/**
6969
* @param[in] order_id qint64 [required]
7070
*/
71-
void getOrderById(const qint64 &order_id);
71+
virtual void getOrderById(const qint64 &order_id);
7272

7373
/**
7474
* @param[in] pfx_order PFXOrder [required]
7575
*/
76-
void placeOrder(const PFXOrder &pfx_order);
76+
virtual void placeOrder(const PFXOrder &pfx_order);
7777

7878

7979
private:

samples/client/petstore/cpp-qt/client/PFXUserApi.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,42 +59,42 @@ class PFXUserApi : public QObject {
5959
/**
6060
* @param[in] pfx_user PFXUser [required]
6161
*/
62-
void createUser(const PFXUser &pfx_user);
62+
virtual void createUser(const PFXUser &pfx_user);
6363

6464
/**
6565
* @param[in] pfx_user QList<PFXUser> [required]
6666
*/
67-
void createUsersWithArrayInput(const QList<PFXUser> &pfx_user);
67+
virtual void createUsersWithArrayInput(const QList<PFXUser> &pfx_user);
6868

6969
/**
7070
* @param[in] pfx_user QList<PFXUser> [required]
7171
*/
72-
void createUsersWithListInput(const QList<PFXUser> &pfx_user);
72+
virtual void createUsersWithListInput(const QList<PFXUser> &pfx_user);
7373

7474
/**
7575
* @param[in] username QString [required]
7676
*/
77-
void deleteUser(const QString &username);
77+
virtual void deleteUser(const QString &username);
7878

7979
/**
8080
* @param[in] username QString [required]
8181
*/
82-
void getUserByName(const QString &username);
82+
virtual void getUserByName(const QString &username);
8383

8484
/**
8585
* @param[in] username QString [required]
8686
* @param[in] password QString [required]
8787
*/
88-
void loginUser(const QString &username, const QString &password);
88+
virtual void loginUser(const QString &username, const QString &password);
8989

9090

91-
void logoutUser();
91+
virtual void logoutUser();
9292

9393
/**
9494
* @param[in] username QString [required]
9595
* @param[in] pfx_user PFXUser [required]
9696
*/
97-
void updateUser(const QString &username, const PFXUser &pfx_user);
97+
virtual void updateUser(const QString &username, const PFXUser &pfx_user);
9898

9999

100100
private:

0 commit comments

Comments
 (0)