diff --git a/backend/plugins/bitbucket/e2e/comment_test.go b/backend/plugins/bitbucket/e2e/comment_test.go index 79e44df0e4a..e68525aee35 100644 --- a/backend/plugins/bitbucket/e2e/comment_test.go +++ b/backend/plugins/bitbucket/e2e/comment_test.go @@ -98,6 +98,8 @@ func TestCommentDataFlow(t *testing.T) { ) // verify comment conversion + // the issue comment convertor joins _tool_bitbucket_issues + dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_bitbucket_issues.csv", &models.BitbucketIssue{}) dataflowTester.FlushTabler(&ticket.IssueComment{}) dataflowTester.FlushTabler(&code.PullRequestComment{}) dataflowTester.Subtask(tasks.ConvertIssueCommentsMeta, taskData) diff --git a/backend/plugins/customize/e2e/import_issue_changelogs_test.go b/backend/plugins/customize/e2e/import_issue_changelogs_test.go index 2f47b53590c..3e64147eb96 100644 --- a/backend/plugins/customize/e2e/import_issue_changelogs_test.go +++ b/backend/plugins/customize/e2e/import_issue_changelogs_test.go @@ -35,6 +35,7 @@ func TestImportIssueChangelogDataFlow(t *testing.T) { // 清空表 dataflowTester.FlushTabler(&ticket.IssueChangelogs{}) dataflowTester.FlushTabler(&crossdomain.Account{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) // 初始化服务 svc := service.NewService(dataflowTester.Dal) diff --git a/backend/plugins/customize/e2e/import_issue_commits_test.go b/backend/plugins/customize/e2e/import_issue_commits_test.go index b6700e1c0eb..c12a2bc9347 100644 --- a/backend/plugins/customize/e2e/import_issue_commits_test.go +++ b/backend/plugins/customize/e2e/import_issue_commits_test.go @@ -22,6 +22,7 @@ import ( "testing" "github.com/apache/devlake/core/models/domainlayer/crossdomain" + "github.com/apache/devlake/core/models/domainlayer/ticket" "github.com/apache/devlake/helpers/e2ehelper" "github.com/apache/devlake/plugins/customize/impl" "github.com/apache/devlake/plugins/customize/service" @@ -33,6 +34,7 @@ func TestImportIssueCommitDataFlow(t *testing.T) { // create table `issue_commits` dataflowTester.FlushTabler(&crossdomain.IssueCommit{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) svc := service.NewService(dataflowTester.Dal) f, err1 := os.Open("raw_tables/issues_commits.csv") diff --git a/backend/plugins/customize/e2e/import_issue_worklogs_test.go b/backend/plugins/customize/e2e/import_issue_worklogs_test.go index 5d2b2b4fa5a..85363b99500 100644 --- a/backend/plugins/customize/e2e/import_issue_worklogs_test.go +++ b/backend/plugins/customize/e2e/import_issue_worklogs_test.go @@ -35,6 +35,7 @@ func TestImportIssueWorklogDataFlow(t *testing.T) { // 清空表 dataflowTester.FlushTabler(&ticket.IssueWorklog{}) dataflowTester.FlushTabler(&crossdomain.Account{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) // 初始化服务 svc := service.NewService(dataflowTester.Dal) diff --git a/backend/plugins/dora/e2e/calculate_change_lead_time_test.go b/backend/plugins/dora/e2e/calculate_change_lead_time_test.go index 1c591108a32..626929c7817 100644 --- a/backend/plugins/dora/e2e/calculate_change_lead_time_test.go +++ b/backend/plugins/dora/e2e/calculate_change_lead_time_test.go @@ -50,6 +50,8 @@ func TestCalculateCLTimeDataFlow(t *testing.T) { dataflowTester.ImportNullableCsvIntoTabler("./change_lead_time/commits_diffs.csv", &code.CommitsDiff{}) dataflowTester.ImportCsvIntoTabler("./change_lead_time/pull_request_comments.csv", &code.PullRequestComment{}) dataflowTester.ImportCsvIntoTabler("./change_lead_time/pull_request_commits.csv", &code.PullRequestCommit{}) + // bot1 comments on pr1 before the first human review; it must not be counted as the first review + dataflowTester.ImportCsvIntoTabler("./change_lead_time/accounts.csv", &crossdomain.Account{}) // verify converter dataflowTester.FlushTabler(&crossdomain.ProjectPrMetric{}) diff --git a/backend/plugins/dora/e2e/change_lead_time/accounts.csv b/backend/plugins/dora/e2e/change_lead_time/accounts.csv new file mode 100644 index 00000000000..dcbc9c7bc27 --- /dev/null +++ b/backend/plugins/dora/e2e/change_lead_time/accounts.csv @@ -0,0 +1,3 @@ +id,user_name,is_bot +b,reviewer-b,0 +bot1,ci-bot,1 diff --git a/backend/plugins/dora/e2e/change_lead_time/pull_request_comments.csv b/backend/plugins/dora/e2e/change_lead_time/pull_request_comments.csv index 513e617b060..cc8d062c8f4 100644 --- a/backend/plugins/dora/e2e/change_lead_time/pull_request_comments.csv +++ b/backend/plugins/dora/e2e/change_lead_time/pull_request_comments.csv @@ -1,5 +1,6 @@ id,pull_request_id,created_date,account_id comment00,pr0,2022-1-11 8:51:47,a +comment01_bot,pr1,2023-4-11 4:52:47,bot1 comment01,pr1,2023-4-11 4:53:47,a comment02,pr1,2023-4-11 4:56:47,b comment03,pr1,2023-4-11 4:59:47,c diff --git a/backend/plugins/github/e2e/milestone_test.go b/backend/plugins/github/e2e/milestone_test.go index 83d7783ff54..c810590f287 100644 --- a/backend/plugins/github/e2e/milestone_test.go +++ b/backend/plugins/github/e2e/milestone_test.go @@ -52,6 +52,9 @@ func TestMilestoneDataFlow(t *testing.T) { dataflowTester.FlushTabler(&models.GithubMilestone{}) dataflowTester.FlushTabler(&models.GithubIssue{}) + dataflowTester.FlushTabler(&models.GithubIssueLabel{}) + dataflowTester.FlushTabler(&models.GithubRepoAccount{}) + dataflowTester.FlushTabler(&models.GithubIssueAssignee{}) // import raw data table dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_github_api_milestones.csv", "_raw_"+tasks.RAW_MILESTONE_TABLE) diff --git a/backend/plugins/github/e2e/pr_review_test.go b/backend/plugins/github/e2e/pr_review_test.go index 2cbc30cc548..e72ef9c3b50 100644 --- a/backend/plugins/github/e2e/pr_review_test.go +++ b/backend/plugins/github/e2e/pr_review_test.go @@ -48,6 +48,7 @@ func TestPrReviewDataFlow(t *testing.T) { // verify extraction dataflowTester.FlushTabler(&models.GithubReviewer{}) dataflowTester.FlushTabler(&models.GithubPrReview{}) + dataflowTester.FlushTabler(&models.GithubRepoAccount{}) dataflowTester.Subtask(tasks.ExtractApiPullRequestReviewsMeta, taskData) dataflowTester.VerifyTable( models.GithubPrReview{}, diff --git a/backend/plugins/gitlab/e2e/issues_test.go b/backend/plugins/gitlab/e2e/issues_test.go index 33a1d3d9043..24f0f9a0897 100644 --- a/backend/plugins/gitlab/e2e/issues_test.go +++ b/backend/plugins/gitlab/e2e/issues_test.go @@ -92,6 +92,8 @@ func TestGitlabIssueDataFlow(t *testing.T) { // verify conversion dataflowTester.FlushTabler(&ticket.Issue{}) dataflowTester.FlushTabler(&ticket.BoardIssue{}) + dataflowTester.FlushTabler(&ticket.IssueLabel{}) + dataflowTester.FlushTabler(&ticket.IssueAssignee{}) dataflowTester.Subtask(tasks.ConvertIssuesMeta, taskData) dataflowTester.VerifyTable( ticket.Issue{}, diff --git a/backend/plugins/gitlab/e2e/mr_detail_test.go b/backend/plugins/gitlab/e2e/mr_detail_test.go index 85900c26109..959ba7a24b4 100644 --- a/backend/plugins/gitlab/e2e/mr_detail_test.go +++ b/backend/plugins/gitlab/e2e/mr_detail_test.go @@ -49,6 +49,8 @@ func TestGitlabMrDetailDataFlow(t *testing.T) { // verify extraction dataflowTester.FlushTabler(&models.GitlabMergeRequest{}) dataflowTester.FlushTabler(&models.GitlabMrLabel{}) + dataflowTester.FlushTabler(&models.GitlabReviewer{}) + dataflowTester.FlushTabler(&models.GitlabAssignee{}) dataflowTester.Subtask(tasks.ExtractApiMergeRequestDetailsMeta, taskData) dataflowTester.VerifyTableWithOptions(&models.GitlabMergeRequest{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/_tool_gitlab_merge_request_details.csv", @@ -61,6 +63,7 @@ func TestGitlabMrDetailDataFlow(t *testing.T) { // verify conversion dataflowTester.FlushTabler(&code.PullRequest{}) + dataflowTester.FlushTabler(&code.PullRequestLabel{}) dataflowTester.Subtask(tasks.ConvertApiMergeRequestsMeta, taskData) dataflowTester.VerifyTableWithOptions(&code.PullRequest{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/pull_requests.csv", diff --git a/backend/plugins/gitlab/e2e/mr_notes_test.go b/backend/plugins/gitlab/e2e/mr_notes_test.go index 66567818b7e..45ec5c9f7f4 100644 --- a/backend/plugins/gitlab/e2e/mr_notes_test.go +++ b/backend/plugins/gitlab/e2e/mr_notes_test.go @@ -46,6 +46,8 @@ func TestGitlabMrNoteDataFlow(t *testing.T) { // verify extraction dataflowTester.FlushTabler(&models.GitlabMergeRequest{}) dataflowTester.FlushTabler(&models.GitlabMrLabel{}) + dataflowTester.FlushTabler(&models.GitlabReviewer{}) + dataflowTester.FlushTabler(&models.GitlabAssignee{}) dataflowTester.Subtask(tasks.ExtractApiMergeRequestsMeta, taskData) dataflowTester.VerifyTable( models.GitlabMergeRequest{}, diff --git a/backend/plugins/gitlab/e2e/mr_test.go b/backend/plugins/gitlab/e2e/mr_test.go index a1789eeb40d..fe6fb267190 100644 --- a/backend/plugins/gitlab/e2e/mr_test.go +++ b/backend/plugins/gitlab/e2e/mr_test.go @@ -47,6 +47,8 @@ func TestGitlabMrDataFlow(t *testing.T) { // verify extraction dataflowTester.FlushTabler(&models.GitlabMergeRequest{}) dataflowTester.FlushTabler(&models.GitlabMrLabel{}) + dataflowTester.FlushTabler(&models.GitlabReviewer{}) + dataflowTester.FlushTabler(&models.GitlabAssignee{}) dataflowTester.Subtask(tasks.ExtractApiMergeRequestsMeta, taskData) dataflowTester.VerifyTableWithOptions(&models.GitlabMergeRequest{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/_tool_gitlab_merge_requests.csv", @@ -59,6 +61,9 @@ func TestGitlabMrDataFlow(t *testing.T) { // verify conversion dataflowTester.FlushTabler(&code.PullRequest{}) + dataflowTester.FlushTabler(&code.PullRequestAssignee{}) + dataflowTester.FlushTabler(&code.PullRequestReviewer{}) + dataflowTester.FlushTabler(&code.PullRequestLabel{}) dataflowTester.Subtask(tasks.ConvertApiMergeRequestsMeta, taskData) dataflowTester.VerifyTableWithOptions(&code.PullRequest{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/pull_requests.csv", diff --git a/backend/plugins/jira/e2e/epic_test.go b/backend/plugins/jira/e2e/epic_test.go index 49f89e93619..0cfeed16ba8 100644 --- a/backend/plugins/jira/e2e/epic_test.go +++ b/backend/plugins/jira/e2e/epic_test.go @@ -53,6 +53,8 @@ func TestEpicDataflow(t *testing.T) { dataflowTester.FlushTabler(&models.JiraAccount{}) dataflowTester.FlushTabler(&models.JiraIssueType{}) dataflowTester.FlushTabler(&models.JiraIssueComment{}) + dataflowTester.FlushTabler(&models.JiraIssueLabel{}) + dataflowTester.FlushTabler(&models.JiraIssueField{}) ctx := dataflowTester.SubtaskContext(taskData) diff --git a/backend/plugins/jira/e2e/issue_relationship_test.go b/backend/plugins/jira/e2e/issue_relationship_test.go index 0634deed80a..a87039b3c70 100644 --- a/backend/plugins/jira/e2e/issue_relationship_test.go +++ b/backend/plugins/jira/e2e/issue_relationship_test.go @@ -54,6 +54,7 @@ func TestIssueRelationshipDataFlow(t *testing.T) { dataflowTester.FlushTabler(&models.JiraAccount{}) dataflowTester.FlushTabler(&models.JiraIssueType{}) dataflowTester.FlushTabler(&models.JiraIssueLabel{}) + dataflowTester.FlushTabler(&models.JiraIssueField{}) dataflowTester.Subtask(tasks.ExtractIssuesMeta, taskData) dataflowTester.VerifyTableWithOptions(&models.JiraIssueRelationship{}, e2ehelper.TableOptions{ diff --git a/backend/plugins/jira/e2e/issue_test.go b/backend/plugins/jira/e2e/issue_test.go index 99512768dfb..ffc58642c52 100644 --- a/backend/plugins/jira/e2e/issue_test.go +++ b/backend/plugins/jira/e2e/issue_test.go @@ -281,10 +281,23 @@ func TestIssueSubtaskWithoutMapping(t *testing.T) { dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jira_api_issues.csv", "_raw_jira_api_issues") dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jira_api_issue_types.csv", "_raw_jira_api_issue_types") + dataflowTester.FlushTabler(&models.JiraIssue{}) + dataflowTester.FlushTabler(&models.JiraBoardIssue{}) + dataflowTester.FlushTabler(&models.JiraSprintIssue{}) + dataflowTester.FlushTabler(&models.JiraIssueComment{}) + dataflowTester.FlushTabler(&models.JiraIssueChangelogs{}) + dataflowTester.FlushTabler(&models.JiraIssueChangelogItems{}) + dataflowTester.FlushTabler(&models.JiraWorklog{}) + dataflowTester.FlushTabler(&models.JiraAccount{}) + dataflowTester.FlushTabler(&models.JiraIssueType{}) + dataflowTester.FlushTabler(&models.JiraIssueLabel{}) + dataflowTester.FlushTabler(&models.JiraIssueField{}) dataflowTester.Subtask(tasks.ExtractIssueTypesMeta, taskData) dataflowTester.Subtask(tasks.ExtractIssuesMeta, taskData) dataflowTester.FlushTabler(&ticket.Issue{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) + dataflowTester.FlushTabler(&ticket.IssueAssignee{}) dataflowTester.Subtask(tasks.ConvertIssuesMeta, taskData) dataflowTester.VerifyTable( diff --git a/backend/plugins/linear/e2e/issue_history_test.go b/backend/plugins/linear/e2e/issue_history_test.go index 165f8626a56..dfc00928093 100644 --- a/backend/plugins/linear/e2e/issue_history_test.go +++ b/backend/plugins/linear/e2e/issue_history_test.go @@ -56,6 +56,8 @@ func TestLinearIssueHistoryDataFlow(t *testing.T) { // verify conversion: tool layer -> domain layer dataflowTester.FlushTabler(&ticket.IssueChangelogs{}) + // the convertor also updates issues.lead_time_minutes + dataflowTester.FlushTabler(&ticket.Issue{}) dataflowTester.Subtask(tasks.ConvertIssueHistoryMeta, taskData) dataflowTester.VerifyTableWithOptions(ticket.IssueChangelogs{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/issue_changelogs.csv", diff --git a/backend/plugins/opsgenie/e2e/incident_test.go b/backend/plugins/opsgenie/e2e/incident_test.go index 4ac7a741a54..e1d51d8e811 100644 --- a/backend/plugins/opsgenie/e2e/incident_test.go +++ b/backend/plugins/opsgenie/e2e/incident_test.go @@ -119,6 +119,7 @@ func TestIncidentDataFlow(t *testing.T) { ) dataflowTester.FlushTabler(&ticket.Issue{}) dataflowTester.FlushTabler(&ticket.IssueAssignee{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) dataflowTester.Subtask(tasks.ConvertIncidentsMeta, taskData) dataflowTester.VerifyTableWithOptions( ticket.Issue{}, diff --git a/backend/plugins/pagerduty/e2e/incident_test.go b/backend/plugins/pagerduty/e2e/incident_test.go index 28b28f97542..41f15d7f42d 100644 --- a/backend/plugins/pagerduty/e2e/incident_test.go +++ b/backend/plugins/pagerduty/e2e/incident_test.go @@ -87,6 +87,7 @@ func TestIncidentDataFlow(t *testing.T) { ) dataflowTester.FlushTabler(&ticket.Issue{}) dataflowTester.FlushTabler(&ticket.IssueAssignee{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) dataflowTester.Subtask(tasks.ConvertIncidentsMeta, taskData) dataflowTester.VerifyTableWithOptions( ticket.Issue{}, diff --git a/backend/plugins/tapd/e2e/bugs_test.go b/backend/plugins/tapd/e2e/bugs_test.go index 3fd6043e502..27bd9432441 100644 --- a/backend/plugins/tapd/e2e/bugs_test.go +++ b/backend/plugins/tapd/e2e/bugs_test.go @@ -188,7 +188,11 @@ func TestTapdBugCustomizeDueDate(t *testing.T) { }, } + dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_tapd_bug_statuses.csv", &models.TapdBugStatus{}) dataflowTester.FlushTabler(&models.TapdBug{}) + dataflowTester.FlushTabler(&models.TapdWorkSpaceBug{}) + dataflowTester.FlushTabler(&models.TapdIterationBug{}) + dataflowTester.FlushTabler(&models.TapdBugLabel{}) // import raw data table dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_tapd_api_bugs_for_due_date.csv", "_raw_tapd_api_bugs") dataflowTester.Subtask(tasks.ExtractBugMeta, taskData) @@ -198,6 +202,9 @@ func TestTapdBugCustomizeDueDate(t *testing.T) { }) dataflowTester.FlushTabler(&ticket.Issue{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) + dataflowTester.FlushTabler(&ticket.SprintIssue{}) + dataflowTester.FlushTabler(&ticket.IssueAssignee{}) dataflowTester.Subtask(tasks.ConvertBugMeta, taskData) dataflowTester.VerifyTable( ticket.Issue{}, diff --git a/backend/plugins/tapd/e2e/stories_test.go b/backend/plugins/tapd/e2e/stories_test.go index f3ade915ae4..7f87a9df22e 100644 --- a/backend/plugins/tapd/e2e/stories_test.go +++ b/backend/plugins/tapd/e2e/stories_test.go @@ -159,10 +159,15 @@ func TestTapdStoryCustomizeDueDate(t *testing.T) { }, }, } + dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_tapd_workitem_types.csv", &models.TapdWorkitemType{}) + dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_tapd_story_statuses.csv", &models.TapdStoryStatus{}) // import raw data table dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_tapd_api_stories_for_due_date.csv", "_raw_tapd_api_stories") dataflowTester.FlushTabler(&models.TapdStory{}) + dataflowTester.FlushTabler(&models.TapdWorkSpaceStory{}) + dataflowTester.FlushTabler(&models.TapdIterationStory{}) + dataflowTester.FlushTabler(&models.TapdStoryLabel{}) dataflowTester.Subtask(tasks.ExtractStoryMeta, taskData) dataflowTester.VerifyTableWithOptions(&models.TapdStory{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/_tool_tapd_stories_for_due_date.csv", @@ -170,6 +175,9 @@ func TestTapdStoryCustomizeDueDate(t *testing.T) { }) dataflowTester.FlushTabler(&ticket.Issue{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) + dataflowTester.FlushTabler(&ticket.SprintIssue{}) + dataflowTester.FlushTabler(&ticket.IssueAssignee{}) dataflowTester.Subtask(tasks.ConvertStoryMeta, taskData) dataflowTester.VerifyTableWithOptions(&ticket.Issue{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/issues_story_for_due_date.csv", diff --git a/backend/plugins/tapd/e2e/tasks_test.go b/backend/plugins/tapd/e2e/tasks_test.go index 2c1eb43de1d..9ecc92f3185 100644 --- a/backend/plugins/tapd/e2e/tasks_test.go +++ b/backend/plugins/tapd/e2e/tasks_test.go @@ -154,6 +154,9 @@ func TestTapdTaskCustomizeDueDate(t *testing.T) { // verify extraction dataflowTester.FlushTabler(&models.TapdTask{}) + dataflowTester.FlushTabler(&models.TapdWorkSpaceTask{}) + dataflowTester.FlushTabler(&models.TapdIterationTask{}) + dataflowTester.FlushTabler(&models.TapdTaskLabel{}) dataflowTester.Subtask(tasks.ExtractTaskMeta, taskData) dataflowTester.VerifyTableWithOptions(&models.TapdTask{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/_tool_tapd_tasks_for_due_date.csv", @@ -161,6 +164,9 @@ func TestTapdTaskCustomizeDueDate(t *testing.T) { }) dataflowTester.FlushTabler(&ticket.Issue{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) + dataflowTester.FlushTabler(&ticket.SprintIssue{}) + dataflowTester.FlushTabler(&ticket.IssueAssignee{}) dataflowTester.Subtask(tasks.ConvertTaskMeta, taskData) dataflowTester.VerifyTableWithOptions(&ticket.Issue{}, e2ehelper.TableOptions{ CSVRelPath: "./snapshot_tables/issues_task_for_due_date.csv", diff --git a/backend/plugins/teambition/e2e/sprint_test.go b/backend/plugins/teambition/e2e/sprint_test.go index 32dffe0dffc..5459e931dd6 100644 --- a/backend/plugins/teambition/e2e/sprint_test.go +++ b/backend/plugins/teambition/e2e/sprint_test.go @@ -57,6 +57,7 @@ func TestTeambitionSprints(t *testing.T) { ) dataflowTester.FlushTabler(&ticket.Sprint{}) + dataflowTester.FlushTabler(&ticket.BoardSprint{}) dataflowTester.Subtask(tasks.ConvertSprintsMeta, taskData) dataflowTester.VerifyTableWithOptions( ticket.Sprint{}, diff --git a/backend/plugins/teambition/e2e/task_test.go b/backend/plugins/teambition/e2e/task_test.go index c242c56a466..9aadbba060c 100644 --- a/backend/plugins/teambition/e2e/task_test.go +++ b/backend/plugins/teambition/e2e/task_test.go @@ -89,6 +89,8 @@ func TestTeambitionTask(t *testing.T) { dataflowTester.FlushTabler(&ticket.IssueAssignee{}) dataflowTester.FlushTabler(&ticket.Issue{}) + dataflowTester.FlushTabler(&ticket.BoardIssue{}) + dataflowTester.FlushTabler(&ticket.SprintIssue{}) dataflowTester.Subtask(tasks.ConvertTasksMeta, taskData) dataflowTester.VerifyTableWithOptions( ticket.Issue{},