| 1 | module vbugreport |
| 2 | |
| 3 | import os |
| 4 | import net.urllib |
| 5 | |
| 6 | fn sample_bug_report() BugReport { |
| 7 | return BugReport{ |
| 8 | description: 'Running `./vdbg examples/fail.v` produced a compiler error.' |
| 9 | reproduction: '```sh\n./vdbg examples/fail.v\n```\n\n```v\nfn main() {}\n```' |
| 10 | expected: 'An error message.' |
| 11 | current: '```\nbuilder error\n```' |
| 12 | solution: '_No response_' |
| 13 | context: 'Generated by `v bug`.' |
| 14 | version: 'V 0.0.0 deadbeef' |
| 15 | environment: '```\nOS: linux\n```' |
| 16 | } |
| 17 | } |
| 18 | |
| 19 | fn test_github_issue_form_uri_prefills_bug_report_fields() { |
| 20 | report := sample_bug_report() |
| 21 | uri := github_issue_form_uri(report) |
| 22 | assert uri.starts_with(github_bug_issue_form_base_uri + '&') |
| 23 | assert !uri.contains('body=') |
| 24 | |
| 25 | query := urllib.parse_query(uri.all_after('?')) or { panic(err) } |
| 26 | assert (query.get('template') or { panic(err) }) == 'bug-report.yml' |
| 27 | assert (query.get('description') or { panic(err) }) == report.description |
| 28 | assert (query.get('reproduction') or { panic(err) }) == report.reproduction |
| 29 | assert (query.get('expected') or { panic(err) }) == report.expected |
| 30 | assert (query.get('current') or { panic(err) }) == report.current |
| 31 | assert (query.get('solution') or { panic(err) }) == report.solution |
| 32 | assert (query.get('context') or { panic(err) }) == report.context |
| 33 | assert (query.get('version') or { panic(err) }) == report.version |
| 34 | assert (query.get('environment') or { panic(err) }) == report.environment |
| 35 | } |
| 36 | |
| 37 | fn test_prepare_bug_report_delivery_falls_back_to_local_report_for_large_reports() { |
| 38 | report := BugReport{ |
| 39 | description: 'Running `./vdbg examples/fail.v` produced a compiler error.' |
| 40 | reproduction: '```sh\n./vdbg examples/fail.v\n```\n\n```v\nfn main() {}\n```' |
| 41 | expected: 'An error message.' |
| 42 | current: 'X'.repeat(github_issue_form_url_soft_limit) |
| 43 | solution: '_No response_' |
| 44 | context: 'Generated by `v bug`.' |
| 45 | version: 'V 0.0.0 deadbeef' |
| 46 | environment: '```\nOS: linux\n```' |
| 47 | } |
| 48 | delivery := prepare_bug_report_delivery(report, os.join_path('examples', 'foo', 'bar.v')) |
| 49 | assert delivery.mode == .local_report |
| 50 | assert delivery.uri == github_bug_issue_form_base_uri |
| 51 | assert delivery.local_report_path == os.join_path('examples', 'foo', 'bar.bug-report.md') |
| 52 | assert delivery.local_report_body.starts_with('# V Bug Report') |
| 53 | assert delivery.local_report_body.contains('### Current Behavior') |
| 54 | assert delivery.local_report_body.contains(report.current) |
| 55 | } |
| 56 | |