[Go] Verify content of Go server generated files (samples) - #19504

Merged
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests
Sep 16, 2024
Merged

[Go] Verify content of Go server generated files (samples)#19504
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests

Conversation

@gcatanese

Copy link
Copy Markdown
Contributor

Update CI pipeline to verify the go-server generated output is correct. Python tests have been created to check the content of the Go files

@wing328 Similarly done as for the postman-collection generator

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.6.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@wing328

Copy link
Copy Markdown
Member

instead of writing the test in python in the output folder, have you considered adding java unit tests similar to https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/java/org/openapitools/codegen/goginserver/GoGinServerCodegenTest.java ?

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Yes, that works but I thought that using Python (or Node) tests allows to better verify the output of the generated code:

  • tests verify the official samples
  • when writing/running tests the generated samples are available (making a lot easier to debug errors)
  • Python tests are lighter and more readable

After introducing this in the postman-collection generator I thought it would be the preferred approach for validating the output. Don't you think we could adopt this going forward?

@wing328

Copy link
Copy Markdown
Member

I don't think go contributors need to learn python/node in order to write tests for the go (client/server) generators (even though python/node is not hard to learn)

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

I understand your concern, but for example when working on #19550 I find a lot more challenging to create the Java tests, looking at temporary files created (disabling the File::deleteOnExit) to look at the output. At each test execution I have to look into a different (randomly generated) folder to see the new output.

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.
Additionally, the samples become richer, including more examples as new tests are created.

Why not allowing both approaches?

@wing328

wing328 commented Sep 13, 2024

Copy link
Copy Markdown
Member

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.

My question is more on why not writing these tests in Go instead of Python (or other languages) given that the output that needs to be verified are Go code anyway?

I still think writing these tests in Go make other Go contributors life easier as they may not even have Python installed locally in their environment to run the tests.

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Ah ok, I see it, I think it is a good idea. I will try it out and update the PR

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

@wing328 I have replaced the Python tests with Go tests, please have a look

@wing328
wing328 merged commit 2f179fe into OpenAPITools:masterSep 16, 2024
@wing328

Copy link
Copy Markdown
Member

Appreciate the PR to add more tests 👍

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gcatanese@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[Go] Verify content of Go server generated files (samples) - #19504

Merged
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests
Sep 16, 2024
Merged

[Go] Verify content of Go server generated files (samples)#19504
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests

Conversation

@gcatanese

Copy link
Copy Markdown
Contributor

Update CI pipeline to verify the go-server generated output is correct. Python tests have been created to check the content of the Go files

@wing328 Similarly done as for the postman-collection generator

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.6.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@wing328

Copy link
Copy Markdown
Member

instead of writing the test in python in the output folder, have you considered adding java unit tests similar to https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/java/org/openapitools/codegen/goginserver/GoGinServerCodegenTest.java ?

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Yes, that works but I thought that using Python (or Node) tests allows to better verify the output of the generated code:

  • tests verify the official samples
  • when writing/running tests the generated samples are available (making a lot easier to debug errors)
  • Python tests are lighter and more readable

After introducing this in the postman-collection generator I thought it would be the preferred approach for validating the output. Don't you think we could adopt this going forward?

@wing328

Copy link
Copy Markdown
Member

I don't think go contributors need to learn python/node in order to write tests for the go (client/server) generators (even though python/node is not hard to learn)

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

I understand your concern, but for example when working on #19550 I find a lot more challenging to create the Java tests, looking at temporary files created (disabling the File::deleteOnExit) to look at the output. At each test execution I have to look into a different (randomly generated) folder to see the new output.

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.
Additionally, the samples become richer, including more examples as new tests are created.

Why not allowing both approaches?

@wing328

wing328 commented Sep 13, 2024

Copy link
Copy Markdown
Member

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.

My question is more on why not writing these tests in Go instead of Python (or other languages) given that the output that needs to be verified are Go code anyway?

I still think writing these tests in Go make other Go contributors life easier as they may not even have Python installed locally in their environment to run the tests.

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Ah ok, I see it, I think it is a good idea. I will try it out and update the PR

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

@wing328 I have replaced the Python tests with Go tests, please have a look

@wing328
wing328 merged commit 2f179fe into OpenAPITools:masterSep 16, 2024
@wing328

Copy link
Copy Markdown
Member

Appreciate the PR to add more tests 👍

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gcatanese@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[Go] Verify content of Go server generated files (samples) - #19504

Merged
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests
Sep 16, 2024
Merged

[Go] Verify content of Go server generated files (samples)#19504
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests

Conversation

@gcatanese

Copy link
Copy Markdown
Contributor

Update CI pipeline to verify the go-server generated output is correct. Python tests have been created to check the content of the Go files

@wing328 Similarly done as for the postman-collection generator

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.6.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@wing328

Copy link
Copy Markdown
Member

instead of writing the test in python in the output folder, have you considered adding java unit tests similar to https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/java/org/openapitools/codegen/goginserver/GoGinServerCodegenTest.java ?

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Yes, that works but I thought that using Python (or Node) tests allows to better verify the output of the generated code:

  • tests verify the official samples
  • when writing/running tests the generated samples are available (making a lot easier to debug errors)
  • Python tests are lighter and more readable

After introducing this in the postman-collection generator I thought it would be the preferred approach for validating the output. Don't you think we could adopt this going forward?

@wing328

Copy link
Copy Markdown
Member

I don't think go contributors need to learn python/node in order to write tests for the go (client/server) generators (even though python/node is not hard to learn)

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

I understand your concern, but for example when working on #19550 I find a lot more challenging to create the Java tests, looking at temporary files created (disabling the File::deleteOnExit) to look at the output. At each test execution I have to look into a different (randomly generated) folder to see the new output.

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.
Additionally, the samples become richer, including more examples as new tests are created.

Why not allowing both approaches?

@wing328

wing328 commented Sep 13, 2024

Copy link
Copy Markdown
Member

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.

My question is more on why not writing these tests in Go instead of Python (or other languages) given that the output that needs to be verified are Go code anyway?

I still think writing these tests in Go make other Go contributors life easier as they may not even have Python installed locally in their environment to run the tests.

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Ah ok, I see it, I think it is a good idea. I will try it out and update the PR

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

@wing328 I have replaced the Python tests with Go tests, please have a look

@wing328
wing328 merged commit 2f179fe into OpenAPITools:masterSep 16, 2024
@wing328

Copy link
Copy Markdown
Member

Appreciate the PR to add more tests 👍

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gcatanese@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[Go] Verify content of Go server generated files (samples) - #19504

Merged
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests
Sep 16, 2024
Merged

[Go] Verify content of Go server generated files (samples)#19504
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests

Conversation

@gcatanese

Copy link
Copy Markdown
Contributor

Update CI pipeline to verify the go-server generated output is correct. Python tests have been created to check the content of the Go files

@wing328 Similarly done as for the postman-collection generator

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.6.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@wing328

Copy link
Copy Markdown
Member

instead of writing the test in python in the output folder, have you considered adding java unit tests similar to https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/java/org/openapitools/codegen/goginserver/GoGinServerCodegenTest.java ?

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Yes, that works but I thought that using Python (or Node) tests allows to better verify the output of the generated code:

  • tests verify the official samples
  • when writing/running tests the generated samples are available (making a lot easier to debug errors)
  • Python tests are lighter and more readable

After introducing this in the postman-collection generator I thought it would be the preferred approach for validating the output. Don't you think we could adopt this going forward?

@wing328

Copy link
Copy Markdown
Member

I don't think go contributors need to learn python/node in order to write tests for the go (client/server) generators (even though python/node is not hard to learn)

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

I understand your concern, but for example when working on #19550 I find a lot more challenging to create the Java tests, looking at temporary files created (disabling the File::deleteOnExit) to look at the output. At each test execution I have to look into a different (randomly generated) folder to see the new output.

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.
Additionally, the samples become richer, including more examples as new tests are created.

Why not allowing both approaches?

@wing328

wing328 commented Sep 13, 2024

Copy link
Copy Markdown
Member

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.

My question is more on why not writing these tests in Go instead of Python (or other languages) given that the output that needs to be verified are Go code anyway?

I still think writing these tests in Go make other Go contributors life easier as they may not even have Python installed locally in their environment to run the tests.

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Ah ok, I see it, I think it is a good idea. I will try it out and update the PR

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

@wing328 I have replaced the Python tests with Go tests, please have a look

@wing328
wing328 merged commit 2f179fe into OpenAPITools:masterSep 16, 2024
@wing328

Copy link
Copy Markdown
Member

Appreciate the PR to add more tests 👍

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gcatanese@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[Go] Verify content of Go server generated files (samples) - #19504

Merged
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests
Sep 16, 2024
Merged

[Go] Verify content of Go server generated files (samples)#19504
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests

Conversation

@gcatanese

Copy link
Copy Markdown
Contributor

Update CI pipeline to verify the go-server generated output is correct. Python tests have been created to check the content of the Go files

@wing328 Similarly done as for the postman-collection generator

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.6.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@wing328

Copy link
Copy Markdown
Member

instead of writing the test in python in the output folder, have you considered adding java unit tests similar to https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/java/org/openapitools/codegen/goginserver/GoGinServerCodegenTest.java ?

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Yes, that works but I thought that using Python (or Node) tests allows to better verify the output of the generated code:

  • tests verify the official samples
  • when writing/running tests the generated samples are available (making a lot easier to debug errors)
  • Python tests are lighter and more readable

After introducing this in the postman-collection generator I thought it would be the preferred approach for validating the output. Don't you think we could adopt this going forward?

@wing328

Copy link
Copy Markdown
Member

I don't think go contributors need to learn python/node in order to write tests for the go (client/server) generators (even though python/node is not hard to learn)

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

I understand your concern, but for example when working on #19550 I find a lot more challenging to create the Java tests, looking at temporary files created (disabling the File::deleteOnExit) to look at the output. At each test execution I have to look into a different (randomly generated) folder to see the new output.

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.
Additionally, the samples become richer, including more examples as new tests are created.

Why not allowing both approaches?

@wing328

wing328 commented Sep 13, 2024

Copy link
Copy Markdown
Member

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.

My question is more on why not writing these tests in Go instead of Python (or other languages) given that the output that needs to be verified are Go code anyway?

I still think writing these tests in Go make other Go contributors life easier as they may not even have Python installed locally in their environment to run the tests.

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Ah ok, I see it, I think it is a good idea. I will try it out and update the PR

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

@wing328 I have replaced the Python tests with Go tests, please have a look

@wing328
wing328 merged commit 2f179fe into OpenAPITools:masterSep 16, 2024
@wing328

Copy link
Copy Markdown
Member

Appreciate the PR to add more tests 👍

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gcatanese@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[Go] Verify content of Go server generated files (samples) - #19504

Merged
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests
Sep 16, 2024
Merged

[Go] Verify content of Go server generated files (samples)#19504
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests

Conversation

@gcatanese

Copy link
Copy Markdown
Contributor

Update CI pipeline to verify the go-server generated output is correct. Python tests have been created to check the content of the Go files

@wing328 Similarly done as for the postman-collection generator

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.6.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@wing328

Copy link
Copy Markdown
Member

instead of writing the test in python in the output folder, have you considered adding java unit tests similar to https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/java/org/openapitools/codegen/goginserver/GoGinServerCodegenTest.java ?

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Yes, that works but I thought that using Python (or Node) tests allows to better verify the output of the generated code:

  • tests verify the official samples
  • when writing/running tests the generated samples are available (making a lot easier to debug errors)
  • Python tests are lighter and more readable

After introducing this in the postman-collection generator I thought it would be the preferred approach for validating the output. Don't you think we could adopt this going forward?

@wing328

Copy link
Copy Markdown
Member

I don't think go contributors need to learn python/node in order to write tests for the go (client/server) generators (even though python/node is not hard to learn)

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

I understand your concern, but for example when working on #19550 I find a lot more challenging to create the Java tests, looking at temporary files created (disabling the File::deleteOnExit) to look at the output. At each test execution I have to look into a different (randomly generated) folder to see the new output.

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.
Additionally, the samples become richer, including more examples as new tests are created.

Why not allowing both approaches?

@wing328

wing328 commented Sep 13, 2024

Copy link
Copy Markdown
Member

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.

My question is more on why not writing these tests in Go instead of Python (or other languages) given that the output that needs to be verified are Go code anyway?

I still think writing these tests in Go make other Go contributors life easier as they may not even have Python installed locally in their environment to run the tests.

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Ah ok, I see it, I think it is a good idea. I will try it out and update the PR

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

@wing328 I have replaced the Python tests with Go tests, please have a look

@wing328
wing328 merged commit 2f179fe into OpenAPITools:masterSep 16, 2024
@wing328

Copy link
Copy Markdown
Member

Appreciate the PR to add more tests 👍

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gcatanese@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[Go] Verify content of Go server generated files (samples) - #19504

Merged
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests
Sep 16, 2024
Merged

[Go] Verify content of Go server generated files (samples)#19504
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests

Conversation

@gcatanese

Copy link
Copy Markdown
Contributor

Update CI pipeline to verify the go-server generated output is correct. Python tests have been created to check the content of the Go files

@wing328 Similarly done as for the postman-collection generator

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.6.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@wing328

Copy link
Copy Markdown
Member

instead of writing the test in python in the output folder, have you considered adding java unit tests similar to https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/java/org/openapitools/codegen/goginserver/GoGinServerCodegenTest.java ?

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Yes, that works but I thought that using Python (or Node) tests allows to better verify the output of the generated code:

  • tests verify the official samples
  • when writing/running tests the generated samples are available (making a lot easier to debug errors)
  • Python tests are lighter and more readable

After introducing this in the postman-collection generator I thought it would be the preferred approach for validating the output. Don't you think we could adopt this going forward?

@wing328

Copy link
Copy Markdown
Member

I don't think go contributors need to learn python/node in order to write tests for the go (client/server) generators (even though python/node is not hard to learn)

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

I understand your concern, but for example when working on #19550 I find a lot more challenging to create the Java tests, looking at temporary files created (disabling the File::deleteOnExit) to look at the output. At each test execution I have to look into a different (randomly generated) folder to see the new output.

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.
Additionally, the samples become richer, including more examples as new tests are created.

Why not allowing both approaches?

@wing328

wing328 commented Sep 13, 2024

Copy link
Copy Markdown
Member

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.

My question is more on why not writing these tests in Go instead of Python (or other languages) given that the output that needs to be verified are Go code anyway?

I still think writing these tests in Go make other Go contributors life easier as they may not even have Python installed locally in their environment to run the tests.

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Ah ok, I see it, I think it is a good idea. I will try it out and update the PR

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

@wing328 I have replaced the Python tests with Go tests, please have a look

@wing328
wing328 merged commit 2f179fe into OpenAPITools:masterSep 16, 2024
@wing328

Copy link
Copy Markdown
Member

Appreciate the PR to add more tests 👍

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gcatanese@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[Go] Verify content of Go server generated files (samples) - #19504

Merged
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests
Sep 16, 2024
Merged

[Go] Verify content of Go server generated files (samples)#19504
wing328 merged 5 commits into
OpenAPITools:masterfrom
gcatanese:go-server-samples-tests

Conversation

@gcatanese

Copy link
Copy Markdown
Contributor

Update CI pipeline to verify the go-server generated output is correct. Python tests have been created to check the content of the Go files

@wing328 Similarly done as for the postman-collection generator

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.6.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@wing328

Copy link
Copy Markdown
Member

instead of writing the test in python in the output folder, have you considered adding java unit tests similar to https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/java/org/openapitools/codegen/goginserver/GoGinServerCodegenTest.java ?

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Yes, that works but I thought that using Python (or Node) tests allows to better verify the output of the generated code:

  • tests verify the official samples
  • when writing/running tests the generated samples are available (making a lot easier to debug errors)
  • Python tests are lighter and more readable

After introducing this in the postman-collection generator I thought it would be the preferred approach for validating the output. Don't you think we could adopt this going forward?

@wing328

Copy link
Copy Markdown
Member

I don't think go contributors need to learn python/node in order to write tests for the go (client/server) generators (even though python/node is not hard to learn)

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

I understand your concern, but for example when working on #19550 I find a lot more challenging to create the Java tests, looking at temporary files created (disabling the File::deleteOnExit) to look at the output. At each test execution I have to look into a different (randomly generated) folder to see the new output.

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.
Additionally, the samples become richer, including more examples as new tests are created.

Why not allowing both approaches?

@wing328

wing328 commented Sep 13, 2024

Copy link
Copy Markdown
Member

When verifying the samples (with Python) the generated output is in front of me, and I only have to work/check those files.

My question is more on why not writing these tests in Go instead of Python (or other languages) given that the output that needs to be verified are Go code anyway?

I still think writing these tests in Go make other Go contributors life easier as they may not even have Python installed locally in their environment to run the tests.

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

Ah ok, I see it, I think it is a good idea. I will try it out and update the PR

@gcatanese

Copy link
Copy Markdown
ContributorAuthor

@wing328 I have replaced the Python tests with Go tests, please have a look

@wing328
wing328 merged commit 2f179fe into OpenAPITools:masterSep 16, 2024
@wing328

Copy link
Copy Markdown
Member

Appreciate the PR to add more tests 👍

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gcatanese@wing328