This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 120cd95f test: jira e2e (#2349)
120cd95f is described below

commit 120cd95f0b4629746d696be200ee189de88c80e6
Author: mindlesscloud <[email protected]>
AuthorDate: Mon Jun 27 15:05:40 2022 +0800

    test: jira e2e (#2349)
    
    * test: jira e2e
    
    * fix: fix some comments from GitHub
    
    * refactor: move config into JiraOptions.TransformationRules
    
    * refactor: remove the field JiraTaskData.Connection
    
    * fix: VerifyTable does not need pk fields
---
 plugins/jira/e2e/changelog_test.go                 | 105 +++++++++++++++++++++
 .../e2e/raw_tables/_raw_jira_api_changelogs.csv    |  31 ++++++
 .../e2e/raw_tables/_raw_jira_api_remotelinks.csv   |  31 ++++++
 .../jira/e2e/raw_tables/_raw_jira_api_sprints.csv  |  31 ++++++
 .../jira/e2e/raw_tables/_raw_jira_api_users.csv    |  31 ++++++
 .../jira/e2e/raw_tables/_raw_jira_api_worklogs.csv |  31 ++++++
 plugins/jira/e2e/remotelink_test.go                |  79 ++++++++++++++++
 .../_tool_jira_board_issues_for_changelog.csv      |  31 ++++++
 .../_tool_jira_board_issues_for_worklog.csv        |  31 ++++++
 .../snapshot_tables/_tool_jira_board_sprints.csv   |  31 ++++++
 .../snapshot_tables/_tool_jira_changelog_items.csv |  31 ++++++
 .../e2e/snapshot_tables/_tool_jira_changelogs.csv  |  31 ++++++
 .../snapshot_tables/_tool_jira_issue_commits.csv   |  10 ++
 .../e2e/snapshot_tables/_tool_jira_remotelinks.csv |  31 ++++++
 .../e2e/snapshot_tables/_tool_jira_sprints.csv     |  31 ++++++
 .../e2e/snapshot_tables/_tool_jira_worklogs.csv    |  31 ++++++
 plugins/jira/e2e/snapshot_tables/board_sprints.csv |  31 ++++++
 plugins/jira/e2e/snapshot_tables/changelogs.csv    |  31 ++++++
 plugins/jira/e2e/snapshot_tables/sprints.csv       |  31 ++++++
 plugins/jira/e2e/snapshot_tables/worklogs.csv      |   7 ++
 plugins/jira/e2e/sprint_test.go                    |  97 +++++++++++++++++++
 plugins/jira/e2e/worklog_test.go                   |  85 +++++++++++++++++
 plugins/jira/impl/impl.go                          |   1 -
 plugins/jira/tasks/issue_extractor.go              |  10 +-
 plugins/jira/tasks/remotelink_extractor.go         |   2 +-
 plugins/jira/tasks/sprint_convertor.go             |   3 +-
 plugins/jira/tasks/task_data.go                    |  26 ++---
 27 files changed, 901 insertions(+), 20 deletions(-)

diff --git a/plugins/jira/e2e/changelog_test.go 
b/plugins/jira/e2e/changelog_test.go
new file mode 100644
index 00000000..8dcaec25
--- /dev/null
+++ b/plugins/jira/e2e/changelog_test.go
@@ -0,0 +1,105 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package e2e
+
+import (
+       "testing"
+
+       "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       "github.com/apache/incubator-devlake/models/domainlayer/ticket"
+       "github.com/apache/incubator-devlake/plugins/jira/impl"
+       "github.com/apache/incubator-devlake/plugins/jira/models"
+       "github.com/apache/incubator-devlake/plugins/jira/tasks"
+)
+
+func TestChangelogDataFlow(t *testing.T) {
+       var plugin impl.Jira
+       dataflowTester := e2ehelper.NewDataFlowTester(t, "jira", plugin)
+
+       taskData := &tasks.JiraTaskData{
+               Options: &tasks.JiraOptions{
+                       ConnectionId: 2,
+                       BoardId:      8,
+               },
+       }
+
+       // import raw data table
+       
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jira_api_changelogs.csv",
 "_raw_jira_api_changelogs")
+
+       // verify changelog extraction
+       dataflowTester.FlushTabler(&models.JiraChangelog{})
+       dataflowTester.FlushTabler(&models.JiraChangelogItem{})
+       dataflowTester.FlushTabler(&models.JiraUser{})
+       dataflowTester.Subtask(tasks.ExtractChangelogsMeta, taskData)
+       dataflowTester.VerifyTable(
+               models.JiraChangelog{},
+               "./snapshot_tables/_tool_jira_changelogs.csv",
+               []string{
+                       "connection_id",
+                       "changelog_id",
+                       "issue_id",
+                       "author_account_id",
+                       "author_display_name",
+                       "author_active",
+                       "created",
+                       "issue_updated",
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+
+       dataflowTester.VerifyTable(
+               models.JiraChangelogItem{},
+               "./snapshot_tables/_tool_jira_changelog_items.csv",
+               []string{
+                       "connection_id",
+                       "changelog_id",
+                       "field",
+                       "field_type",
+                       "field_id",
+                       "from_value",
+                       "from_string",
+                       "to_value",
+                       "to_string",
+               },
+       )
+
+       // verify changelog conversion
+       
dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_jira_board_issues_for_changelog.csv",
 &models.JiraBoardIssue{})
+       dataflowTester.FlushTabler(&ticket.Changelog{})
+       dataflowTester.Subtask(tasks.ConvertChangelogsMeta, taskData)
+       dataflowTester.VerifyTable(
+               ticket.Changelog{},
+               "./snapshot_tables/changelogs.csv",
+               []string{
+                       "id",
+                       "issue_id",
+                       "author_id",
+                       "author_name",
+                       "field_id",
+                       "field_name",
+                       "original_from_value",
+                       "original_to_value",
+                       "from_value",
+                       "to_value",
+                       "created_date",
+               },
+       )
+}
diff --git a/plugins/jira/e2e/raw_tables/_raw_jira_api_changelogs.csv 
b/plugins/jira/e2e/raw_tables/_raw_jira_api_changelogs.csv
new file mode 100644
index 00000000..73431e2c
--- /dev/null
+++ b/plugins/jira/e2e/raw_tables/_raw_jira_api_changelogs.csv
@@ -0,0 +1,31 @@
+"id","params","data","url","input","created_at"
+986053,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""11646"", ""items"": 
[{""to"": ""5ecfbd0ba04d9c0c220c18d8"", ""from"": null, ""field"": 
""assignee"", ""fieldId"": ""assignee"", ""toString"": ""yanghui"", 
""fieldtype"": ""jira"", ""fromString"": null, ""tmpToAccountId"": 
""5ecfbd0ba04d9c0c220c18d8"", ""tmpFromAccountId"": null}], ""author"": 
{""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5ecfbd0ba04d9c0c220c18d8"";,
 ""active"": true, ""timeZone"": ""Asia/Shangha [...]
+986054,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""11648"", ""items"": 
[{""to"": ""5ecfbd0c2490cf0c09e2e598"", ""from"": ""5ecfbd0ba04d9c0c220c18d8"", 
""field"": ""assignee"", ""fieldId"": ""assignee"", ""toString"": ""Gerile 
Tu"", ""fieldtype"": ""jira"", ""fromString"": ""yanghui"", ""tmpToAccountId"": 
""5ecfbd0c2490cf0c09e2e598"", ""tmpFromAccountId"": 
""5ecfbd0ba04d9c0c220c18d8""}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0 [...]
+986055,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""11677"", ""items"": 
[{""to"": null, ""from"": null, ""field"": ""summary"", ""fieldId"": 
""summary"", ""toString"": ""[Industry Metrics]"", ""fieldtype"": ""jira"", 
""fromString"": ""[Industry Metrics]""}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5ecfbd0ba04d9c0c220c18d8"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0ba04d9c0c220c18d8"", ""avatarUrls"": {""16x16" [...]
+986056,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""11798"", ""items"": 
[{""to"": null, ""from"": null, ""field"": ""summary"", ""fieldId"": 
""summary"", ""toString"": ""[Industry Metrics] "", ""fieldtype"": ""jira"", 
""fromString"": ""[Industry Metrics]""}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5ecfbd0c2490cf0c09e2e598"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0c2490cf0c09e2e598"", ""avatarUrls"": {""16x16 [...]
+986057,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""11913"", ""items"": 
[{""to"": ""10003"", ""from"": null, ""field"": ""Component"", ""fieldId"": 
""components"", ""toString"": ""Industry Metrics"", ""fieldtype"": ""jira"", 
""fromString"": null}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5ecfbd0c2490cf0c09e2e598"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0c2490cf0c09e2e598"", ""avatarUrls"": {""16x16"": ""https [...]
+986058,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""11915"", ""items"": 
[{""to"": ""10004"", ""from"": null, ""field"": ""Component"", ""fieldId"": 
""components"", ""toString"": ""Charts"", ""fieldtype"": ""jira"", 
""fromString"": null}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5ecfbd0c2490cf0c09e2e598"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0c2490cf0c09e2e598"", ""avatarUrls"": {""16x16"": ""https://secure. 
[...]
+986059,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""11935"", ""items"": 
[{""to"": null, ""from"": ""10003"", ""field"": ""Component"", ""fieldId"": 
""components"", ""toString"": null, ""fieldtype"": ""jira"", ""fromString"": 
""Industry Metrics""}, {""to"": null, ""from"": ""10004"", ""field"": 
""Component"", ""fieldId"": ""components"", ""toString"": null, ""fieldtype"": 
""jira"", ""fromString"": ""Charts""}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?acco [...]
+986060,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""11993"", ""items"": 
[{""to"": """", ""from"": """", ""field"": ""Rank"", ""fieldId"": 
""customfield_10019"", ""toString"": ""Ranked higher"", ""fieldtype"": 
""custom"", ""fromString"": """"}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", ""avatarUrls"": {""16x16"": ""https://s [...]
+986061,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""12011"", ""items"": 
[{""to"": ""10084"", ""from"": null, ""field"": ""Epic Link"", ""fieldId"": 
""customfield_10014"", ""toString"": ""EE-22"", ""fieldtype"": ""custom"", 
""fromString"": null}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", ""avatarUrls"": {""16x16"": ""https:/ [...]
+986062,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""12016"", ""items"": 
[{""to"": null, ""from"": null, ""field"": ""summary"", ""fieldId"": 
""summary"", ""toString"": """", ""fieldtype"": ""jira"", ""fromString"": 
""[Industry Metrics] ""}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", ""avatarUrls"": {""16x16"": ""https://secu [...]
+986063,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""12058"", ""items"": 
[{""to"": """", ""from"": """", ""field"": ""Rank"", ""fieldId"": 
""customfield_10019"", ""toString"": ""Ranked higher"", ""fieldtype"": 
""custom"", ""fromString"": """"}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", ""avatarUrls"": {""16x16"": ""https://s [...]
+986064,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""12766"", ""items"": 
[{""to"": ""10111"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add industry unittest 
(Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": null}], ""author"": 
{""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", [...]
+986065,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13012"", ""items"": 
[{""to"": ""10131"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add IndustryQuery 
(getEfficiencyMetric) (Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": 
null}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": ""5e9711ba3 
[...]
+986066,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13181"", ""items"": 
[{""to"": ""10144"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add 
IndustryQuery.test.ts (Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": 
null}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d [...]
+986067,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13187"", ""items"": 
[{""to"": ""10145"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectEfficiency (which has a developer bug) 
(Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": null}], ""author"": 
{""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asi [...]
+986068,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13189"", ""items"": 
[{""to"": ""10146"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add IndustryQuery 
(getEfficiencyMetric) (Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": 
null}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": ""5e9711ba3 
[...]
+986069,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13190"", ""items"": 
[{""to"": ""10147"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add Industry model (Web 
Link)\"""", ""fieldtype"": ""jira"", ""fromString"": null}], ""author"": 
{""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", "" [...]
+986070,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13192"", ""items"": 
[{""to"": ""10148"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 rename (Web Link)\"""", 
""fieldtype"": ""jira"", ""fromString"": null}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", ""avatarUrls"" [...]
+986071,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13193"", ""items"": 
[{""to"": ""10149"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add industry unittest 
(Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": null}], ""author"": 
{""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", [...]
+986072,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13194"", ""items"": 
[{""to"": ""10150"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add getQualityMetric 
(Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": null}], ""author"": 
{""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"",  [...]
+986073,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""13257"", ""items"": 
[{""to"": ""10154"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\"""", ""fieldtype"": 
""jira"", ""fromString"": null}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": "" [...]
+986074,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15273"", ""items"": 
[{""to"": ""10154"", ""from"": ""10154"", ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\"""", ""fieldtype"": 
""jira"", ""fromString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\""""}], ""author"": 
{""self"": ""https://merico.atlassian.net/rest/api/3/user [...]
+986075,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15274"", ""items"": 
[{""to"": ""10145"", ""from"": ""10145"", ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectEfficiency (which has a developer bug) 
(Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": ""This issue links to 
\""Commit - #EE-160 add IndustryController.getIndustryProjectEfficiency (which 
has a developer bug) (Web Link)\""""}], ""autho [...]
+986076,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15305"", ""items"": 
[{""to"": ""10250"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add group industy data 
(Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": null}], ""author"": 
{""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"" [...]
+986077,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15310"", ""items"": 
[{""to"": ""10251"", ""from"": null, ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 fix group industry 
data's bug (Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": null}], 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fb [...]
+986078,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15351"", ""items"": 
[{""to"": ""10154"", ""from"": ""10154"", ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\"""", ""fieldtype"": 
""jira"", ""fromString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\""""}], ""author"": 
{""self"": ""https://merico.atlassian.net/rest/api/3/user [...]
+986079,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15357"", ""items"": 
[{""to"": ""10251"", ""from"": ""10251"", ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 fix group industry 
data's bug (Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": ""This 
issue links to \""Commit - #EE-160 fix group industry data's bug (Web 
Link)\""""}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 [...]
+986080,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15397"", ""items"": 
[{""to"": ""10154"", ""from"": ""10154"", ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\"""", ""fieldtype"": 
""jira"", ""fromString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\""""}], ""author"": 
{""self"": ""https://merico.atlassian.net/rest/api/3/user [...]
+986081,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15400"", ""items"": 
[{""to"": ""10251"", ""from"": ""10251"", ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 fix group industry 
data's bug (Web Link)\"""", ""fieldtype"": ""jira"", ""fromString"": ""This 
issue links to \""Commit - #EE-160 fix group industry data's bug (Web 
Link)\""""}], ""author"": {""self"": 
""https://merico.atlassian.net/rest/api/3/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 [...]
+986082,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""15536"", ""items"": 
[{""to"": ""10154"", ""from"": ""10154"", ""field"": ""RemoteIssueLink"", 
""toString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\"""", ""fieldtype"": 
""jira"", ""fromString"": ""This issue links to \""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)\""""}], ""author"": 
{""self"": ""https://merico.atlassian.net/rest/api/3/user [...]
diff --git a/plugins/jira/e2e/raw_tables/_raw_jira_api_remotelinks.csv 
b/plugins/jira/e2e/raw_tables/_raw_jira_api_remotelinks.csv
new file mode 100644
index 00000000..aac90434
--- /dev/null
+++ b/plugins/jira/e2e/raw_tables/_raw_jira_api_remotelinks.csv
@@ -0,0 +1,31 @@
+"id","params","data","url","input","created_at"
+101041,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10042, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-1/remotelink/10042"";, 
""object"": {""url"": 
""https://example.com/-/commit/8748a066cbaf67b15e86f2c636f9931347e987cf"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - Feat(EE-1): add modularity metric chart"", ""status"": 
{""icon"": {}, "" [...]
+101042,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10035, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-3/remotelink/10035"";, 
""object"": {""url"": 
""https://example.com/-/commit/8f91020bcf684c6ad07adfafa3d8a2f826686c42"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - Feat(EE-3): add issues grouped chart at quality report 
page"", ""status" [...]
+101043,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10032, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-2/remotelink/10032"";, 
""object"": {""url"": 
""https://example.com/-/commit/abc0892edaee00dd7ee268dbee71620407a29bca"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - Feat(EE-2): add issues stacked chart at quality report 
page"", ""status" [...]
+101044,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10033, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-2/remotelink/10033"";, 
""object"": {""url"": 
""https://example.com/-/commit/e6bde456807818c5c78d7b265964d6d48b653af6"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - Feat(EE-2): add issues stacked chart at quality report 
page"", ""status" [...]
+101045,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10036, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-4/remotelink/10036"";, 
""object"": {""url"": 
""https://example.com/-/commit/0dfe2e9ed88ad4e27f825d9b67d4d56ac983c5ef"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - Feat(EE-4): preliminarily add issues distribution chart 
at quality repor [...]
+101046,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10009, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-23/remotelink/10009"";, 
""object"": {""url"": ""https://example.com/-/issues/2313"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10085/remotelink","{""issue_id"":
 10085, ""update_time"": ""2021-03-28T08:05:57.095Z""}","2022-06 [...]
+101047,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10053, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-57/remotelink/10053"";, 
""object"": {""url"": ""https://example.com/-/issues/2288"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": 
""https://example.com/-/issues/2288"";, ""status"": {""icon"": {}}}, 
""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10119/remotelink","{""issue_id"":
 10119, ""update_time"": ""2021-03-28T08:07 [...]
+101048,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10010, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-64/remotelink/10010"";, 
""object"": {""url"": ""https://example.com/-/issues/2296"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10126/remotelink","{""issue_id"":
 10126, ""update_time"": ""2021-03-28T08:05:57.002Z""}","2022-06 [...]
+101049,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10011, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-65/remotelink/10011"";, 
""object"": {""url"": ""https://example.com/-/issues/2283"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10127/remotelink","{""issue_id"":
 10127, ""update_time"": ""2021-03-28T08:05:54.768Z""}","2022-06 [...]
+101050,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10012, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-66/remotelink/10012"";, 
""object"": {""url"": ""https://example.com/-/issues/2281"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10128/remotelink","{""issue_id"":
 10128, ""update_time"": ""2021-03-28T08:05:54.816Z""}","2022-06 [...]
+101051,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10067, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-69/remotelink/10067"";, 
""object"": {""url"": 
""https://merico.atlassian.net/wiki/pages/viewpage.action?pageId=11304962"";, 
""icon"": {}, ""title"": ""Wiki Page"", ""status"": {""icon"": {}}}, 
""globalId"": ""appId=14a8b58c-61f0-3220-b8b4-22481b2fda95&pageId=11304962"", 
""application"": {""name"": ""System Confluence"", ""type"": 
""com.atlassian.confluence""}, ""relatio [...]
+101052,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10324, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-69/remotelink/10324"";, 
""object"": {""url"": ""https://example.com/-/merge_requests/1195"";, ""icon"": 
{""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Merge request - feat: EE-69 - Teams tree list view for 2.7"", 
""status"": {""icon"": {}, ""resolved"": false [...]
+101053,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10325, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-69/remotelink/10325"";, 
""object"": {""url"": 
""https://example.com/-/commit/8993c04249e9d549e8950daec86717548c53c423"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - Merge branch 'release/2.7-teams' into 'release/2.7'"", 
""status"": {""i [...]
+101054,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10005, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-71/remotelink/10005"";, 
""object"": {""url"": ""https://example.com/-/issues/2282"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10141/remotelink","{""issue_id"":
 10141, ""update_time"": ""2021-03-28T08:05:57.636Z""}","2022-06 [...]
+101055,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10006, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-72/remotelink/10006"";, 
""object"": {""url"": ""https://example.com/-/issues/2293"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10142/remotelink","{""issue_id"":
 10142, ""update_time"": ""2021-03-28T08:05:57.68Z""}","2022-06- [...]
+101056,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10007, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-73/remotelink/10007"";, 
""object"": {""url"": ""https://example.com/-/issues/2323"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10143/remotelink","{""issue_id"":
 10143, ""update_time"": ""2021-03-28T08:05:59.967Z""}","2022-06 [...]
+101057,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10008, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-74/remotelink/10008"";, 
""object"": {""url"": ""https://example.com/-/issues/2322"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10144/remotelink","{""issue_id"":
 10144, ""update_time"": ""2021-03-28T08:05:59.772Z""}","2022-06 [...]
+101058,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10013, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-75/remotelink/10013"";, 
""object"": {""url"": ""https://example.com/-/issues/2112"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10145/remotelink","{""issue_id"":
 10145, ""update_time"": ""2021-03-28T08:06:22.874Z""}","2022-06 [...]
+101059,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10037, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-75/remotelink/10037"";, 
""object"": {""url"": 
""https://example.com/-/commit/07aa2ebed68e286dc51a7e0082031196a6135f74"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - EE-75. Fix #2112. Allow skip SMTP config"", ""status"": 
{""icon"": {},  [...]
+101060,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10038, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-75/remotelink/10038"";, 
""object"": {""url"": 
""https://example.com/-/commit/d70d6687e06304d9b6e0cb32b3f8c0f0928400f7"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - EE-75. Fix #2112. Allow skip SMTP config"", ""status"": 
{""icon"": {},  [...]
+101061,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10039, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-75/remotelink/10039"";, 
""object"": {""url"": 
""https://example.com/-/commit/ef5ab26111744f65f5191b247767a473c70d6c95"";, 
""icon"": {""title"": ""GitLab"", ""url16x16"": 
""https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png""},
 ""title"": ""Commit - EE-75. Fix #2112. Allow skip SMTP config"", ""status"": 
{""icon"": {},  [...]
+101062,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10014, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-76/remotelink/10014"";, 
""object"": {""url"": ""https://example.com/-/issues/2277"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10146/remotelink","{""issue_id"":
 10146, ""update_time"": ""2021-03-28T08:06:12.833Z""}","2022-06 [...]
+101063,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10027, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-77/remotelink/10027"";, 
""object"": {""url"": ""https://example.com/-/issues/2318"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10147/remotelink","{""issue_id"":
 10147, ""update_time"": ""2021-03-28T08:05:57.439Z""}","2022-06 [...]
+101064,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10026, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-78/remotelink/10026"";, 
""object"": {""url"": ""https://example.com/-/issues/2330"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10148/remotelink","{""issue_id"":
 10148, ""update_time"": ""2021-03-28T08:05:57.538Z""}","2022-06 [...]
+101065,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10025, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-79/remotelink/10025"";, 
""object"": {""url"": ""https://example.com/-/issues/2324"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10149/remotelink","{""issue_id"":
 10149, ""update_time"": ""2021-03-28T08:05:57.587Z""}","2022-06 [...]
+101066,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10024, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-80/remotelink/10024"";, 
""object"": {""url"": ""https://example.com/-/issues/2341"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10150/remotelink","{""issue_id"":
 10150, ""update_time"": ""2021-03-28T08:06:07.546Z""}","2022-06 [...]
+101067,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10023, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-81/remotelink/10023"";, 
""object"": {""url"": ""https://example.com/-/issues/2312"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10151/remotelink","{""issue_id"":
 10151, ""update_time"": ""2021-03-28T08:05:57.876Z""}","2022-06 [...]
+101068,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10022, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-82/remotelink/10022"";, 
""object"": {""url"": ""https://example.com/-/issues/2305"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10152/remotelink","{""issue_id"":
 10152, ""update_time"": ""2021-03-28T08:05:58.414Z""}","2022-06 [...]
+101069,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10021, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-83/remotelink/10021"";, 
""object"": {""url"": ""https://example.com/-/issues/2306"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10153/remotelink","{""issue_id"":
 10153, ""update_time"": ""2021-03-28T08:05:58.464Z""}","2022-06 [...]
+101070,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 10020, ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/EE-84/remotelink/10020"";, 
""object"": {""url"": ""https://example.com/-/issues/2307"";, ""icon"": 
{""url16x16"": ""https://gitlab.com/favicon.ico""}, ""title"": ""GitLab 
Issue"", ""status"": {""icon"": {}}}, ""application"": 
{}}","https://merico.atlassian.net/rest/api/2/issue/10154/remotelink","{""issue_id"":
 10154, ""update_time"": ""2021-03-28T08:05:58.319Z""}","2022-06 [...]
diff --git a/plugins/jira/e2e/raw_tables/_raw_jira_api_sprints.csv 
b/plugins/jira/e2e/raw_tables/_raw_jira_api_sprints.csv
new file mode 100644
index 00000000..c351f21d
--- /dev/null
+++ b/plugins/jira/e2e/raw_tables/_raw_jira_api_sprints.csv
@@ -0,0 +1,31 @@
+"id","params","data","url","input","created_at"
+1220,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 7, ""goal"": """", 
""name"": ""EE Sprint 7"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/7"";, ""state"": 
""closed"", ""endDate"": ""2020-06-26T00:38:00.000Z"", ""startDate"": 
""2020-06-12T00:38:51.882Z"", ""completeDate"": ""2020-06-22T05:59:58.980Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1221,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 9, ""goal"": """", 
""name"": ""EE Sprint 8"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/9"";, ""state"": 
""closed"", ""endDate"": ""2020-07-10T06:00:00.000Z"", ""startDate"": 
""2020-06-22T06:00:33.769Z"", ""completeDate"": ""2020-07-13T01:21:57.062Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1222,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 15, ""goal"": """", 
""name"": ""Emma Sprint 1"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/15"";, ""state"": 
""closed"", ""endDate"": ""2020-07-06T01:32:52.000Z"", ""startDate"": 
""2020-06-22T01:32:04.664Z"", ""completeDate"": ""2020-06-29T02:50:44.043Z"", 
""originBoardId"": 
13}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1223,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 17, ""goal"": """", 
""name"": ""EE Sprint 9"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/17"";, ""state"": 
""closed"", ""endDate"": ""2020-07-27T01:22:00.000Z"", ""startDate"": 
""2020-07-13T01:22:22.745Z"", ""completeDate"": ""2020-07-27T01:23:43.083Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1224,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 18, ""goal"": """", 
""name"": ""EE Sprint 10"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/18"";, ""state"": 
""closed"", ""endDate"": ""2020-08-10T01:26:00.000Z"", ""startDate"": 
""2020-07-27T01:26:13.465Z"", ""completeDate"": ""2020-08-10T02:29:10.811Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1225,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 19, ""goal"": """", 
""name"": ""EE Sprint 11"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/19"";, ""state"": 
""closed"", ""endDate"": ""2020-08-21T01:15:00.000Z"", ""startDate"": 
""2020-08-09T01:15:11.205Z"", ""completeDate"": ""2020-08-31T01:34:04.666Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1226,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 20, ""goal"": """", 
""name"": ""EE Sprint 14"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/20"";, ""state"": 
""closed"", ""endDate"": ""2020-09-07T01:35:00.000Z"", ""startDate"": 
""2020-08-31T01:35:38.626Z"", ""completeDate"": ""2020-11-05T07:46:55.346Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1227,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 21, ""goal"": """", 
""name"": ""EE Sprint 15"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/21"";, ""state"": 
""closed"", ""endDate"": ""2020-11-16T08:29:00.000Z"", ""startDate"": 
""2020-11-09T08:29:00.529Z"", ""completeDate"": ""2020-11-16T23:07:33.015Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1228,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 25, ""goal"": """", 
""name"": ""EE Sprint 16"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/25"";, ""state"": 
""closed"", ""endDate"": ""2020-11-23T23:14:00.000Z"", ""startDate"": 
""2020-11-16T23:14:57.590Z"", ""completeDate"": ""2020-11-24T03:56:42.281Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1229,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 26, ""goal"": """", 
""name"": ""EE Sprint 17"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/26"";, ""state"": 
""closed"", ""endDate"": ""2020-11-27T03:56:00.000Z"", ""startDate"": 
""2020-11-20T03:56:12.414Z"", ""completeDate"": ""2020-11-30T02:48:49.378Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1230,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 27, ""goal"": """", 
""name"": ""EE Sprint 18"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/27"";, ""state"": 
""closed"", ""endDate"": ""2020-12-07T02:49:00.000Z"", ""startDate"": 
""2020-11-30T02:49:24.536Z"", ""completeDate"": ""2020-12-07T01:41:17.786Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1231,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 28, ""goal"": """", 
""name"": ""EE Sprint 19"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/28"";, ""state"": 
""closed"", ""endDate"": ""2020-12-14T01:41:00.000Z"", ""startDate"": 
""2020-12-07T01:41:40.676Z"", ""completeDate"": ""2020-12-14T01:00:22.218Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1232,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 30, ""goal"": """", 
""name"": ""EE Sprint 20"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/30"";, ""state"": 
""closed"", ""endDate"": ""2020-12-28T01:54:00.000Z"", ""startDate"": 
""2020-12-14T01:54:34.826Z"", ""completeDate"": ""2020-12-28T06:11:27.241Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1233,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 31, ""goal"": """", 
""name"": ""EE Sprint 21"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/31"";, ""state"": 
""closed"", ""endDate"": ""2021-01-10T18:11:00.000Z"", ""startDate"": 
""2020-12-28T06:11:46.433Z"", ""completeDate"": ""2021-01-11T02:52:38.721Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1234,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 32, ""goal"": """", 
""name"": ""EE Sprint 22"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/32"";, ""state"": 
""closed"", ""endDate"": ""2021-01-18T04:09:00.000Z"", ""startDate"": 
""2021-01-11T04:09:10.389Z"", ""completeDate"": ""2021-01-18T03:10:51.076Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1235,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 33, ""goal"": """", 
""name"": ""EE Sprint 23"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/33"";, ""state"": 
""closed"", ""endDate"": ""2021-01-25T03:45:00.000Z"", ""startDate"": 
""2021-01-18T03:45:20.174Z"", ""completeDate"": ""2021-01-25T03:03:10.386Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1236,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 34, ""goal"": """", 
""name"": ""EE Sprint 24"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/34"";, ""state"": 
""closed"", ""endDate"": ""2021-02-01T03:56:00.000Z"", ""startDate"": 
""2021-01-25T03:56:45.942Z"", ""completeDate"": ""2021-02-01T03:05:30.868Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1237,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 35, ""goal"": """", 
""name"": ""EE Sprint 25"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/35"";, ""state"": 
""closed"", ""endDate"": ""2021-02-08T03:39:00.000Z"", ""startDate"": 
""2021-02-01T03:39:40.472Z"", ""completeDate"": ""2021-02-07T03:01:13.596Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1238,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 36, ""goal"": """", 
""name"": ""EE Sprint 26"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/36"";, ""state"": 
""closed"", ""endDate"": ""2021-02-14T03:44:00.000Z"", ""startDate"": 
""2021-02-07T03:44:55.158Z"", ""completeDate"": ""2021-02-22T03:05:16.997Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1239,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 37, ""goal"": """", 
""name"": ""EE Sprint 27"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/37"";, ""state"": 
""closed"", ""endDate"": ""2021-03-01T03:30:00.000Z"", ""startDate"": 
""2021-02-22T03:30:53.407Z"", ""completeDate"": ""2021-02-26T08:15:20.988Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1240,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 38, ""goal"": """", 
""name"": ""EE Sprint 28"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/38"";, ""state"": 
""closed"", ""endDate"": ""2021-03-08T03:50:00.000Z"", ""startDate"": 
""2021-03-01T03:50:54.464Z"", ""completeDate"": ""2021-03-05T08:03:48.144Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1241,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 40, ""goal"": """", 
""name"": ""EE Sprint 29"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/40"";, ""state"": 
""closed"", ""endDate"": ""2021-03-14T17:34:00.000Z"", ""startDate"": 
""2021-03-08T05:34:15.296Z"", ""completeDate"": ""2021-03-15T06:53:34.924Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1242,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 41, ""goal"": """", 
""name"": ""EE Sprint 30"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/41"";, ""state"": 
""closed"", ""endDate"": ""2021-03-21T19:23:00.000Z"", ""startDate"": 
""2021-03-15T07:23:47.468Z"", ""completeDate"": ""2021-03-19T08:57:51.706Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1243,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 42, ""goal"": """", 
""name"": ""EE Sprint 31"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/42"";, ""state"": 
""closed"", ""endDate"": ""2021-03-28T15:00:00.000Z"", ""startDate"": 
""2021-03-22T03:00:03.936Z"", ""completeDate"": ""2021-03-26T08:06:09.772Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1244,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 43, ""goal"": """", 
""name"": ""EE Sprint 32"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/43"";, ""state"": 
""closed"", ""endDate"": ""2021-04-04T14:54:00.000Z"", ""startDate"": 
""2021-03-29T02:54:16.155Z"", ""completeDate"": ""2021-04-06T03:29:56.386Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1245,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 46, ""goal"": """", 
""name"": ""EE Sprint 33"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/46"";, ""state"": 
""closed"", ""endDate"": ""2021-04-12T21:59:00.000Z"", ""startDate"": 
""2021-04-06T09:59:28.107Z"", ""completeDate"": ""2021-04-12T02:57:53.585Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1246,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 47, ""goal"": """", 
""name"": ""EE Sprint 34"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/47"";, ""state"": 
""closed"", ""endDate"": ""2021-04-19T02:58:00.000Z"", ""startDate"": 
""2021-04-12T02:58:51.011Z"", ""completeDate"": ""2021-04-16T08:43:09.709Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1247,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 50, ""goal"": """", 
""name"": ""EE Sprint 35"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/50"";, ""state"": 
""closed"", ""endDate"": ""2021-04-26T03:17:00.000Z"", ""startDate"": 
""2021-04-19T03:17:29.791Z"", ""completeDate"": ""2021-04-25T04:44:34.414Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1248,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 57, ""goal"": """", 
""name"": ""EE Sprint 36"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/57"";, ""state"": 
""closed"", ""endDate"": ""2021-04-30T04:44:00.000Z"", ""startDate"": 
""2021-04-25T04:45:23.592Z"", ""completeDate"": ""2021-05-06T05:43:54.939Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
+1249,"{""ConnectionId"":2,""BoardId"":8}","{""id"": 60, ""goal"": """", 
""name"": ""EE Sprint 37"", ""self"": 
""https://merico.atlassian.net/rest/agile/1.0/sprint/60"";, ""state"": 
""closed"", ""endDate"": ""2021-05-14T15:59:00.000Z"", ""startDate"": 
""2021-05-05T17:55:31.879Z"", ""completeDate"": ""2021-05-17T01:51:41.754Z"", 
""originBoardId"": 
8}","https://merico.atlassian.net/rest/agile/1.0/board/8/sprint?jql=ORDER+BY+created+ASC&maxResults=50&startAt=0","null","2022-06-23
 13:38:52.217"
diff --git a/plugins/jira/e2e/raw_tables/_raw_jira_api_users.csv 
b/plugins/jira/e2e/raw_tables/_raw_jira_api_users.csv
new file mode 100644
index 00000000..cce81945
--- /dev/null
+++ b/plugins/jira/e2e/raw_tables/_raw_jira_api_users.csv
@@ -0,0 +1,31 @@
+"id","params","data","url","input","created_at"
+812101,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=557058:f58131cb-b67d-43c7-b30d-6b58d40bd077"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": 
""557058:f58131cb-b67d-43c7-b30d-6b58d40bd077"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F
 [...]
+812102,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=557058:46121f43-e58d-4ff4-83fd-a79fb4b71b45"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": 
""557058:46121f43-e58d-4ff4-83fd-a79fb4b71b45"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/97f7c79b50890409584990ddde1920b3?d=https%3A%2F
 [...]
+812103,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5e9711ba34f7b90c0fbc37d3"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/f1e7dd8eadd9170aff5df20da45c849d?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812104,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0947d31e0c2a15fd83"";,
 ""active"": false, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 0, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0947d31e0c2a15fd83"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/fa7eb84a8ad9e90ff75a00dcc134ba4c?d=https%3A%2F%2Favatar-management--avatars.us-west
 [...]
+812105,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0984083c0c12e5af8f"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0984083c0c12e5af8f"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5ecfbd0984083c0c12e5af8f/8bd19c25-c051-47f3-a41a-
 [...]
+812106,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0a47d31e0c2a15fd87"";,
 ""active"": false, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 0, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0a47d31e0c2a15fd87"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/70034f92b12867f30613f25aadf6f8ca?d=https%3A%2F%2Favatar-management--avatars.us-west
 [...]
+812107,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0aaa47a00c1997ea8e"";,
 ""active"": false, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 0, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0aaa47a00c1997ea8e"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/dfc23cdb7938ba887badda2e3fac179d?d=https%3A%2F%2Favatar-management--avatars.us-west
 [...]
+812108,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0b0827650c1eeb2ab6"";,
 ""active"": false, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 0, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0b0827650c1eeb2ab6"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5ecfbd0b0827650c1eeb2ab6/8f882204-a169-4200-8a07
 [...]
+812109,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0ba04d9c0c220c18d8"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 3, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0ba04d9c0c220c18d8"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5ecfbd0ba04d9c0c220c18d8/22fb069e-32f9-4ab8-be11-
 [...]
+812110,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0beb77320c1f821a26"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 4, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0beb77320c1f821a26"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5ecfbd0beb77320c1f821a26/bb1e828a-f91b-4237-85b0-
 [...]
+812111,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0c2490cf0c09e2e598"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0c2490cf0c09e2e598"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/21c497af87015df6beee68b1829ccd38?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812112,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0c730ec90c1999cadf"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ecfbd0c730ec90c1999cadf"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/9f2459a1fcb78fd5c1d8b70bf3917992?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812113,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5eec896fe571480ac2ae6ede"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 5, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5eec896fe571480ac2ae6ede"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5eec896fe571480ac2ae6ede/1a02d070-08b5-43df-bd7f-
 [...]
+812114,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5eef5ae43589f00ab40dc60f"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 1, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5eef5ae43589f00ab40dc60f"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/133f8093dfaf54f4a11902ad59702877?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812115,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5eef5ae43589f00ab40dc611"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5eef5ae43589f00ab40dc611"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/1f32b08d4afe93746e310bd3de23ff01?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812116,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ef16f3e7e95e80a81fedc0a"";,
 ""active"": false, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 0, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ef16f3e7e95e80a81fedc0a"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/14370ded2a7ce4669403f7f895961c58?d=https%3A%2F%2Favatar-management--avatars.us-west
 [...]
+812117,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ef3254a8624070abc590972"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 1, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5ef3254a8624070abc590972"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/24c4783eaa37f4e32874cd58dae0a4b2?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812118,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f032527e407a4001cf04d5c"";,
 ""active"": false, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 0, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f032527e407a4001cf04d5c"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/7967062a702c1bb9fa629748ab219f37?d=https%3A%2F%2Favatar-management--avatars.us-west
 [...]
+812119,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f05f5b15ee2c300233b4436"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f05f5b15ee2c300233b4436"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/69667c2c63ce892e11b9ac098e3abc4f?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812120,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f184c6dd680320021c3f8a1"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 1, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f184c6dd680320021c3f8a1"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/849b584b0be6e2ab58555276fdb4e565?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812121,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f32012eea5e2f0039284885"";,
 ""active"": false, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 0, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f32012eea5e2f0039284885"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/64fa1e6f684df098f2c748096893fbcc?d=https%3A%2F%2Favatar-management--avatars.us-west
 [...]
+812122,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f32012f347294003ed909fb"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 1, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f32012f347294003ed909fb"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/d1d69b6c79d3ef5f1c92022969a15485?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812123,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f586b28df83ab007d759bfa"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f586b28df83ab007d759bfa"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/401fe3b2e223239efc2e6407ebfcf77d?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812124,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f5ede6f3242e8006f3bd173"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 1, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f5ede6f3242e8006f3bd173"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5f5ede6f3242e8006f3bd173/fdfa3399-fe03-40d7-8c11-
 [...]
+812125,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f6c41784147d6007749dd66"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 4, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f6c41784147d6007749dd66"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5f6c41784147d6007749dd66/036cd333-40df-4b47-a5ee-
 [...]
+812126,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f73f85158899e007055c7d3"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 1, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f73f85158899e007055c7d3"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/dc81db75677218a2dce93b7abee1a752?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812127,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5f8d380729bd8a006f5a90a0"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 1, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5f8d380729bd8a006f5a90a0"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/bf2a5e92812cfcc9c1ac29582d619a19?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812128,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 2, ""items"": []}, ""locale"": ""zh_CN"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-8a89-
 [...]
+812129,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fab870b7cfc240071f37525"";,
 ""active"": true, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 1, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5fab870b7cfc240071f37525"", ""avatarUrls"": 
{""16x16"": 
""https://secure.gravatar.com/avatar/8d37abf9dd0fef7ab3f9123d641d791e?d=https%3A%2F%2Favatar-management--avatars.us-west-
 [...]
+812130,"{""ConnectionId"":2,""BoardId"":8}","{""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fb48fe20d2f61006f0d0106"";,
 ""active"": false, ""expand"": ""groups,applicationRoles"", ""groups"": 
{""size"": 0, ""items"": []}, ""locale"": ""en_US"", ""timeZone"": 
""Asia/Shanghai"", ""accountId"": ""5fb48fe20d2f61006f0d0106"", ""avatarUrls"": 
{""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fb48fe20d2f61006f0d0106/3233dbe8-0b15-45fa-96f3
 [...]
diff --git a/plugins/jira/e2e/raw_tables/_raw_jira_api_worklogs.csv 
b/plugins/jira/e2e/raw_tables/_raw_jira_api_worklogs.csv
new file mode 100644
index 00000000..24ef3f6e
--- /dev/null
+++ b/plugins/jira/e2e/raw_tables/_raw_jira_api_worklogs.csv
@@ -0,0 +1,31 @@
+"id","params","data","url","input","created_at"
+1248,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10010"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/10085/worklog/10010"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0a47d31e0c2a15fd87"";,
 ""active"": false, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0a47d31e0c2a15fd87"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/70034f92b12867f30613f25aadf6f8ca?d=https%3A%2F%2Favatar-management--avatars.us
 [...]
+1249,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10218"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/10079/worklog/10218"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0a47d31e0c2a15fd87"";,
 ""active"": false, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0a47d31e0c2a15fd87"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/70034f92b12867f30613f25aadf6f8ca?d=https%3A%2F%2Favatar-management--avatars.us
 [...]
+1250,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10007"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/10077/worklog/10007"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0a47d31e0c2a15fd87"";,
 ""active"": false, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0a47d31e0c2a15fd87"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/70034f92b12867f30613f25aadf6f8ca?d=https%3A%2F%2Favatar-management--avatars.us
 [...]
+1251,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10008"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/10077/worklog/10008"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0a47d31e0c2a15fd87"";,
 ""active"": false, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0a47d31e0c2a15fd87"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/70034f92b12867f30613f25aadf6f8ca?d=https%3A%2F%2Favatar-management--avatars.us
 [...]
+1252,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10006"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/10076/worklog/10006"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0a47d31e0c2a15fd87"";,
 ""active"": false, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0a47d31e0c2a15fd87"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/70034f92b12867f30613f25aadf6f8ca?d=https%3A%2F%2Favatar-management--avatars.us
 [...]
+1253,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10009"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/10078/worklog/10009"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5ecfbd0a47d31e0c2a15fd87"";,
 ""active"": false, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5ecfbd0a47d31e0c2a15fd87"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/70034f92b12867f30613f25aadf6f8ca?d=https%3A%2F%2Favatar-management--avatars.us
 [...]
+1330,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10713"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/11956/worklog/10713"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1331,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10717"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/11956/worklog/10717"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1332,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10718"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/11956/worklog/10718"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1333,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10719"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/11956/worklog/10719"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1334,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10720"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/11956/worklog/10720"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1335,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10726"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/11956/worklog/10726"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1336,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10729"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/11956/worklog/10729"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1337,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10733"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/11956/worklog/10733"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1338,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10611"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12083/worklog/10611"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5e9711ba34f7b90c0fbc37d3"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5e9711ba34f7b90c0fbc37d3"", ""avatarUrls"": {""16x16"": 
""https://secure.gravatar.com/avatar/f1e7dd8eadd9170aff5df20da45c849d?d=https%3A%2F%2Favatar-management--avatars.us-
 [...]
+1339,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10809"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12263/worklog/10809"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1340,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10810"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12263/worklog/10810"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1341,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10811"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12263/worklog/10811"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1342,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10922"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12263/worklog/10922"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1343,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10946"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12351/worklog/10946"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1344,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10708"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12411/worklog/10708"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1345,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10714"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12604/worklog/10714"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1346,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10728"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12604/worklog/10728"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1347,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10761"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12692/worklog/10761"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1348,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10738"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12760/worklog/10738"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1349,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10743"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12760/worklog/10743"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1350,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10750"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12760/worklog/10750"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1351,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10759"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12760/worklog/10759"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1352,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10732"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12796/worklog/10732"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
+1353,"{""ConnectionId"":2,""BoardId"":8}","{""id"": ""10736"", ""self"": 
""https://merico.atlassian.net/rest/api/2/issue/12796/worklog/10736"";, 
""author"": {""self"": 
""https://merico.atlassian.net/rest/api/2/user?accountId=5fa8b6d142ab3b006eaa6f42"";,
 ""active"": true, ""timeZone"": ""Asia/Shanghai"", ""accountId"": 
""5fa8b6d142ab3b006eaa6f42"", ""avatarUrls"": {""16x16"": 
""https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/5fa8b6d142ab3b006eaa6f42/a000c4fd-4022-4110-
 [...]
diff --git a/plugins/jira/e2e/remotelink_test.go 
b/plugins/jira/e2e/remotelink_test.go
new file mode 100644
index 00000000..9cc49977
--- /dev/null
+++ b/plugins/jira/e2e/remotelink_test.go
@@ -0,0 +1,79 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package e2e
+
+import (
+       "testing"
+
+       "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       "github.com/apache/incubator-devlake/plugins/jira/impl"
+       "github.com/apache/incubator-devlake/plugins/jira/models"
+       "github.com/apache/incubator-devlake/plugins/jira/tasks"
+)
+
+func TestRemotelinkDataFlow(t *testing.T) {
+       var plugin impl.Jira
+       dataflowTester := e2ehelper.NewDataFlowTester(t, "jira", plugin)
+
+       taskData := &tasks.JiraTaskData{
+               Options: &tasks.JiraOptions{
+                       ConnectionId:        2,
+                       BoardId:             8,
+                       TransformationRules: 
tasks.TransformationRules{RemotelinkCommitShaPattern: ".*/commit/(.*)"},
+               },
+       }
+
+       // import raw data table
+       
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jira_api_remotelinks.csv",
 "_raw_jira_api_remotelinks")
+
+       // verify remotelink extraction
+       dataflowTester.FlushTabler(&models.JiraRemotelink{})
+       dataflowTester.FlushTabler(&models.JiraIssueCommit{})
+       dataflowTester.Subtask(tasks.ExtractRemotelinksMeta, taskData)
+       dataflowTester.VerifyTable(
+               models.JiraRemotelink{},
+               "./snapshot_tables/_tool_jira_remotelinks.csv",
+               []string{
+                       "connection_id",
+                       "remotelink_id",
+                       "issue_id",
+                       "self",
+                       "title",
+                       "url",
+                       "issue_updated",
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+       dataflowTester.VerifyTable(
+               models.JiraIssueCommit{},
+               "./snapshot_tables/_tool_jira_issue_commits.csv",
+               []string{
+                       "connection_id",
+                       "issue_id",
+                       "commit_sha",
+                       "commit_url",
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+}
diff --git 
a/plugins/jira/e2e/snapshot_tables/_tool_jira_board_issues_for_changelog.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_board_issues_for_changelog.csv
new file mode 100644
index 00000000..07e4cb49
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_board_issues_for_changelog.csv
@@ -0,0 +1,31 @@
+connection_id,board_id,issue_id
+2,8,10063
+2,8,10064
+2,8,10065
+2,8,10066
+2,8,10067
+2,8,10068
+2,8,10070
+2,8,10071
+2,8,10072
+2,8,10076
+2,8,10077
+2,8,10078
+2,8,10079
+2,8,10081
+2,8,10082
+2,8,10085
+2,8,10086
+2,8,10087
+2,8,10088
+2,8,10089
+2,8,10090
+2,8,10091
+2,8,10092
+2,8,10093
+2,8,10094
+2,8,10095
+2,8,10096
+2,8,10097
+2,8,10098
+2,8,10099
diff --git 
a/plugins/jira/e2e/snapshot_tables/_tool_jira_board_issues_for_worklog.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_board_issues_for_worklog.csv
new file mode 100644
index 00000000..07e4cb49
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_board_issues_for_worklog.csv
@@ -0,0 +1,31 @@
+connection_id,board_id,issue_id
+2,8,10063
+2,8,10064
+2,8,10065
+2,8,10066
+2,8,10067
+2,8,10068
+2,8,10070
+2,8,10071
+2,8,10072
+2,8,10076
+2,8,10077
+2,8,10078
+2,8,10079
+2,8,10081
+2,8,10082
+2,8,10085
+2,8,10086
+2,8,10087
+2,8,10088
+2,8,10089
+2,8,10090
+2,8,10091
+2,8,10092
+2,8,10093
+2,8,10094
+2,8,10095
+2,8,10096
+2,8,10097
+2,8,10098
+2,8,10099
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_board_sprints.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_board_sprints.csv
new file mode 100644
index 00000000..740af284
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_board_sprints.csv
@@ -0,0 +1,31 @@
+connection_id,board_id,sprint_id
+2,8,7
+2,8,9
+2,8,15
+2,8,17
+2,8,18
+2,8,19
+2,8,20
+2,8,21
+2,8,25
+2,8,26
+2,8,27
+2,8,28
+2,8,30
+2,8,31
+2,8,32
+2,8,33
+2,8,34
+2,8,35
+2,8,36
+2,8,37
+2,8,38
+2,8,40
+2,8,41
+2,8,42
+2,8,43
+2,8,46
+2,8,47
+2,8,50
+2,8,57
+2,8,60
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_changelog_items.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_changelog_items.csv
new file mode 100644
index 00000000..2f445af8
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_changelog_items.csv
@@ -0,0 +1,31 @@
+connection_id,changelog_id,field,field_type,field_id,from_value,from_string,to_value,to_string
+2,11646,assignee,jira,,,,5ecfbd0ba04d9c0c220c18d8,yanghui
+2,11648,assignee,jira,,5ecfbd0ba04d9c0c220c18d8,yanghui,5ecfbd0c2490cf0c09e2e598,Gerile
 Tu
+2,11677,summary,jira,,,[Industry Metrics],,[Industry Metrics]
+2,11798,summary,jira,,,[Industry Metrics],,[Industry Metrics] 
+2,11913,Component,jira,,,,10003,Industry Metrics
+2,11915,Component,jira,,,,10004,Charts
+2,11935,Component,jira,,10004,Charts,,
+2,11993,Rank,custom,,,,,Ranked higher
+2,12011,Epic Link,custom,,,,10084,EE-22
+2,12016,summary,jira,,,[Industry Metrics] ,,
+2,12058,Rank,custom,,,,,Ranked higher
+2,12766,RemoteIssueLink,jira,,,,10111,"This issue links to ""Commit - #EE-160 
add industry unittest (Web Link)"""
+2,13012,RemoteIssueLink,jira,,,,10131,"This issue links to ""Commit - #EE-160 
add IndustryQuery (getEfficiencyMetric) (Web Link)"""
+2,13181,RemoteIssueLink,jira,,,,10144,"This issue links to ""Commit - #EE-160 
add IndustryQuery.test.ts (Web Link)"""
+2,13187,RemoteIssueLink,jira,,,,10145,"This issue links to ""Commit - #EE-160 
add IndustryController.getIndustryProjectEfficiency (which has a developer bug) 
(Web Link)"""
+2,13189,RemoteIssueLink,jira,,,,10146,"This issue links to ""Commit - #EE-160 
add IndustryQuery (getEfficiencyMetric) (Web Link)"""
+2,13190,RemoteIssueLink,jira,,,,10147,"This issue links to ""Commit - #EE-160 
add Industry model (Web Link)"""
+2,13192,RemoteIssueLink,jira,,,,10148,"This issue links to ""Commit - #EE-160 
rename (Web Link)"""
+2,13193,RemoteIssueLink,jira,,,,10149,"This issue links to ""Commit - #EE-160 
add industry unittest (Web Link)"""
+2,13194,RemoteIssueLink,jira,,,,10150,"This issue links to ""Commit - #EE-160 
add getQualityMetric (Web Link)"""
+2,13257,RemoteIssueLink,jira,,,,10154,"This issue links to ""Commit - #EE-160 
add IndustryController.getIndustryProjectQuality (Web Link)"""
+2,15273,RemoteIssueLink,jira,,10154,"This issue links to ""Commit - #EE-160 
add IndustryController.getIndustryProjectQuality (Web Link)""",10154,"This 
issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)"""
+2,15274,RemoteIssueLink,jira,,10145,"This issue links to ""Commit - #EE-160 
add IndustryController.getIndustryProjectEfficiency (which has a developer bug) 
(Web Link)""",10145,"This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectEfficiency (which has a developer bug) 
(Web Link)"""
+2,15305,RemoteIssueLink,jira,,,,10250,"This issue links to ""Commit - #EE-160 
add group industy data (Web Link)"""
+2,15310,RemoteIssueLink,jira,,,,10251,"This issue links to ""Commit - #EE-160 
fix group industry data's bug (Web Link)"""
+2,15351,RemoteIssueLink,jira,,10154,"This issue links to ""Commit - #EE-160 
add IndustryController.getIndustryProjectQuality (Web Link)""",10154,"This 
issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)"""
+2,15357,RemoteIssueLink,jira,,10251,"This issue links to ""Commit - #EE-160 
fix group industry data's bug (Web Link)""",10251,"This issue links to ""Commit 
- #EE-160 fix group industry data's bug (Web Link)"""
+2,15397,RemoteIssueLink,jira,,10154,"This issue links to ""Commit - #EE-160 
add IndustryController.getIndustryProjectQuality (Web Link)""",10154,"This 
issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)"""
+2,15400,RemoteIssueLink,jira,,10251,"This issue links to ""Commit - #EE-160 
fix group industry data's bug (Web Link)""",10251,"This issue links to ""Commit 
- #EE-160 fix group industry data's bug (Web Link)"""
+2,15536,RemoteIssueLink,jira,,10154,"This issue links to ""Commit - #EE-160 
add IndustryController.getIndustryProjectQuality (Web Link)""",10154,"This 
issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)"""
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_changelogs.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_changelogs.csv
new file mode 100644
index 00000000..a27e4aef
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_changelogs.csv
@@ -0,0 +1,31 @@
+connection_id,changelog_id,issue_id,author_account_id,author_display_name,author_active,created,issue_updated,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+2,11646,10063,5ecfbd0ba04d9c0c220c18d8,yanghui,1,2020-06-17T07:39:14.729+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986053,
+2,11648,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-17T07:40:05.335+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986054,
+2,11677,10063,5ecfbd0ba04d9c0c220c18d8,yanghui,1,2020-06-17T07:46:44.006+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986055,
+2,11798,10063,5ecfbd0c2490cf0c09e2e598,Gerile 
Tu,1,2020-06-18T05:58:14.769+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986056,
+2,11913,10063,5ecfbd0c2490cf0c09e2e598,Gerile 
Tu,1,2020-06-19T01:07:20.709+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986057,
+2,11915,10063,5ecfbd0c2490cf0c09e2e598,Gerile 
Tu,1,2020-06-19T01:07:59.090+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986058,
+2,11935,10063,5ecfbd0c2490cf0c09e2e598,Gerile 
Tu,1,2020-06-19T01:31:52.567+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986059,
+2,11993,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-19T05:30:01.576+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986060,
+2,12011,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-19T06:25:41.732+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986061,
+2,12016,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-19T06:26:00.014+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986062,
+2,12058,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-19T08:37:40.933+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986063,
+2,12766,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-27T19:20:53.685+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986064,
+2,13012,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-28T19:33:53.703+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986065,
+2,13181,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-29T19:34:20.886+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986066,
+2,13187,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-29T19:34:21.216+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986067,
+2,13189,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-29T19:34:21.533+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986068,
+2,13190,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-29T19:34:21.602+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986069,
+2,13192,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-29T19:34:21.612+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986070,
+2,13193,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-29T19:34:21.632+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986071,
+2,13194,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-29T19:34:21.652+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986072,
+2,13257,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-06-30T07:08:13.527+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986073,
+2,15273,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-05T18:20:07.965+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986074,
+2,15274,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-05T18:20:09.481+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986075,
+2,15305,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-05T18:20:35.972+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986076,
+2,15310,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-05T18:20:36.221+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986077,
+2,15351,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-05T23:49:54.024+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986078,
+2,15357,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-05T23:49:54.265+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986079,
+2,15397,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-06T02:45:22.440+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986080,
+2,15400,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-06T02:45:22.555+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986081,
+2,15536,10063,5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,1,2020-07-06T12:38:44.036+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986082,
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_issue_commits.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_issue_commits.csv
new file mode 100644
index 00000000..f4eebae4
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_issue_commits.csv
@@ -0,0 +1,10 @@
+connection_id,issue_id,commit_sha,commit_url,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+2,10063,8748a066cbaf67b15e86f2c636f9931347e987cf,https://example.com/-/commit/8748a066cbaf67b15e86f2c636f9931347e987cf,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101041,
+2,10064,abc0892edaee00dd7ee268dbee71620407a29bca,https://example.com/-/commit/abc0892edaee00dd7ee268dbee71620407a29bca,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101043,
+2,10064,e6bde456807818c5c78d7b265964d6d48b653af6,https://example.com/-/commit/e6bde456807818c5c78d7b265964d6d48b653af6,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101044,
+2,10065,8f91020bcf684c6ad07adfafa3d8a2f826686c42,https://example.com/-/commit/8f91020bcf684c6ad07adfafa3d8a2f826686c42,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101042,
+2,10066,0dfe2e9ed88ad4e27f825d9b67d4d56ac983c5ef,https://example.com/-/commit/0dfe2e9ed88ad4e27f825d9b67d4d56ac983c5ef,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101045,
+2,10139,8993c04249e9d549e8950daec86717548c53c423,https://example.com/-/commit/8993c04249e9d549e8950daec86717548c53c423,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101053,
+2,10145,07aa2ebed68e286dc51a7e0082031196a6135f74,https://example.com/-/commit/07aa2ebed68e286dc51a7e0082031196a6135f74,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101059,
+2,10145,d70d6687e06304d9b6e0cb32b3f8c0f0928400f7,https://example.com/-/commit/d70d6687e06304d9b6e0cb32b3f8c0f0928400f7,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101060,
+2,10145,ef5ab26111744f65f5191b247767a473c70d6c95,https://example.com/-/commit/ef5ab26111744f65f5191b247767a473c70d6c95,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101061,
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_remotelinks.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_remotelinks.csv
new file mode 100644
index 00000000..4b0f87fd
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_remotelinks.csv
@@ -0,0 +1,31 @@
+connection_id,remotelink_id,connection_id,remotelink_id,issue_id,self,title,url,issue_updated,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+2,10005,2,10005,10141,https://merico.atlassian.net/rest/api/2/issue/EE-71/remotelink/10005,GitLab
 
Issue,https://example.com/-/issues/2282,2021-03-28T08:05:57.636+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101054,
+2,10006,2,10006,10142,https://merico.atlassian.net/rest/api/2/issue/EE-72/remotelink/10006,GitLab
 
Issue,https://example.com/-/issues/2293,2021-03-28T08:05:57.680+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101055,
+2,10007,2,10007,10143,https://merico.atlassian.net/rest/api/2/issue/EE-73/remotelink/10007,GitLab
 
Issue,https://example.com/-/issues/2323,2021-03-28T08:05:59.967+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101056,
+2,10008,2,10008,10144,https://merico.atlassian.net/rest/api/2/issue/EE-74/remotelink/10008,GitLab
 
Issue,https://example.com/-/issues/2322,2021-03-28T08:05:59.772+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101057,
+2,10009,2,10009,10085,https://merico.atlassian.net/rest/api/2/issue/EE-23/remotelink/10009,GitLab
 
Issue,https://example.com/-/issues/2313,2021-03-28T08:05:57.095+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101046,
+2,10010,2,10010,10126,https://merico.atlassian.net/rest/api/2/issue/EE-64/remotelink/10010,GitLab
 
Issue,https://example.com/-/issues/2296,2021-03-28T08:05:57.002+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101048,
+2,10011,2,10011,10127,https://merico.atlassian.net/rest/api/2/issue/EE-65/remotelink/10011,GitLab
 
Issue,https://example.com/-/issues/2283,2021-03-28T08:05:54.768+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101049,
+2,10012,2,10012,10128,https://merico.atlassian.net/rest/api/2/issue/EE-66/remotelink/10012,GitLab
 
Issue,https://example.com/-/issues/2281,2021-03-28T08:05:54.816+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101050,
+2,10013,2,10013,10145,https://merico.atlassian.net/rest/api/2/issue/EE-75/remotelink/10013,GitLab
 
Issue,https://example.com/-/issues/2112,2021-03-28T08:06:22.874+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101058,
+2,10014,2,10014,10146,https://merico.atlassian.net/rest/api/2/issue/EE-76/remotelink/10014,GitLab
 
Issue,https://example.com/-/issues/2277,2021-03-28T08:06:12.833+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101062,
+2,10020,2,10020,10154,https://merico.atlassian.net/rest/api/2/issue/EE-84/remotelink/10020,GitLab
 
Issue,https://example.com/-/issues/2307,2021-03-28T08:05:58.319+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101070,
+2,10021,2,10021,10153,https://merico.atlassian.net/rest/api/2/issue/EE-83/remotelink/10021,GitLab
 
Issue,https://example.com/-/issues/2306,2021-03-28T08:05:58.464+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101069,
+2,10022,2,10022,10152,https://merico.atlassian.net/rest/api/2/issue/EE-82/remotelink/10022,GitLab
 
Issue,https://example.com/-/issues/2305,2021-03-28T08:05:58.414+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101068,
+2,10023,2,10023,10151,https://merico.atlassian.net/rest/api/2/issue/EE-81/remotelink/10023,GitLab
 
Issue,https://example.com/-/issues/2312,2021-03-28T08:05:57.876+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101067,
+2,10024,2,10024,10150,https://merico.atlassian.net/rest/api/2/issue/EE-80/remotelink/10024,GitLab
 
Issue,https://example.com/-/issues/2341,2021-03-28T08:06:07.546+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101066,
+2,10025,2,10025,10149,https://merico.atlassian.net/rest/api/2/issue/EE-79/remotelink/10025,GitLab
 
Issue,https://example.com/-/issues/2324,2021-03-28T08:05:57.587+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101065,
+2,10026,2,10026,10148,https://merico.atlassian.net/rest/api/2/issue/EE-78/remotelink/10026,GitLab
 
Issue,https://example.com/-/issues/2330,2021-03-28T08:05:57.538+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101064,
+2,10027,2,10027,10147,https://merico.atlassian.net/rest/api/2/issue/EE-77/remotelink/10027,GitLab
 
Issue,https://example.com/-/issues/2318,2021-03-28T08:05:57.439+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101063,
+2,10032,2,10032,10064,https://merico.atlassian.net/rest/api/2/issue/EE-2/remotelink/10032,Commit
 - Feat(EE-2): add issues stacked chart at quality report 
page,https://example.com/-/commit/abc0892edaee00dd7ee268dbee71620407a29bca,2021-03-28T08:05:55.016+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101043,
+2,10033,2,10033,10064,https://merico.atlassian.net/rest/api/2/issue/EE-2/remotelink/10033,Commit
 - Feat(EE-2): add issues stacked chart at quality report 
page,https://example.com/-/commit/e6bde456807818c5c78d7b265964d6d48b653af6,2021-03-28T08:05:55.016+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101044,
+2,10035,2,10035,10065,https://merico.atlassian.net/rest/api/2/issue/EE-3/remotelink/10035,Commit
 - Feat(EE-3): add issues grouped chart at quality report 
page,https://example.com/-/commit/8f91020bcf684c6ad07adfafa3d8a2f826686c42,2021-03-28T08:05:55.061+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101042,
+2,10036,2,10036,10066,https://merico.atlassian.net/rest/api/2/issue/EE-4/remotelink/10036,Commit
 - Feat(EE-4): preliminarily add issues distribution chart at quality report 
page,https://example.com/-/commit/0dfe2e9ed88ad4e27f825d9b67d4d56ac983c5ef,2021-03-28T08:06:09.535+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101045,
+2,10037,2,10037,10145,https://merico.atlassian.net/rest/api/2/issue/EE-75/remotelink/10037,Commit
 - EE-75. Fix #2112. Allow skip SMTP 
config,https://example.com/-/commit/07aa2ebed68e286dc51a7e0082031196a6135f74,2021-03-28T08:06:22.874+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101059,
+2,10038,2,10038,10145,https://merico.atlassian.net/rest/api/2/issue/EE-75/remotelink/10038,Commit
 - EE-75. Fix #2112. Allow skip SMTP 
config,https://example.com/-/commit/d70d6687e06304d9b6e0cb32b3f8c0f0928400f7,2021-03-28T08:06:22.874+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101060,
+2,10039,2,10039,10145,https://merico.atlassian.net/rest/api/2/issue/EE-75/remotelink/10039,Commit
 - EE-75. Fix #2112. Allow skip SMTP 
config,https://example.com/-/commit/ef5ab26111744f65f5191b247767a473c70d6c95,2021-03-28T08:06:22.874+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101061,
+2,10042,2,10042,10063,https://merico.atlassian.net/rest/api/2/issue/EE-1/remotelink/10042,Commit
 - Feat(EE-1): add modularity metric 
chart,https://example.com/-/commit/8748a066cbaf67b15e86f2c636f9931347e987cf,2021-03-28T08:06:08.713+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101041,
+2,10053,2,10053,10119,https://merico.atlassian.net/rest/api/2/issue/EE-57/remotelink/10053,https://example.com/-/issues/2288,https://example.com/-/issues/2288,2021-03-28T08:07:09.395+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101047,
+2,10067,2,10067,10139,https://merico.atlassian.net/rest/api/2/issue/EE-69/remotelink/10067,Wiki
 
Page,https://merico.atlassian.net/wiki/pages/viewpage.action?pageId=11304962,2021-03-28T08:06:21.363+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101051,
+2,10324,2,10324,10139,https://merico.atlassian.net/rest/api/2/issue/EE-69/remotelink/10324,Merge
 request - feat: EE-69 - Teams tree list view for 
2.7,https://example.com/-/merge_requests/1195,2021-03-28T08:06:21.363+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101052,
+2,10325,2,10325,10139,https://merico.atlassian.net/rest/api/2/issue/EE-69/remotelink/10325,Commit
 - Merge branch 'release/2.7-teams' into 
'release/2.7',https://example.com/-/commit/8993c04249e9d549e8950daec86717548c53c423,2021-03-28T08:06:21.363+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_remotelinks,101053,
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_sprints.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_sprints.csv
new file mode 100644
index 00000000..82c7324f
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_sprints.csv
@@ -0,0 +1,31 @@
+connection_id,sprint_id,self,state,name,start_date,end_date,complete_date,origin_board_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+2,7,https://merico.atlassian.net/rest/agile/1.0/sprint/7,closed,EE Sprint 
7,2020-06-12T00:38:51.882+00:00,2020-06-26T00:38:00.000+00:00,2020-06-22T05:59:58.980+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1220,
+2,9,https://merico.atlassian.net/rest/agile/1.0/sprint/9,closed,EE Sprint 
8,2020-06-22T06:00:33.769+00:00,2020-07-10T06:00:00.000+00:00,2020-07-13T01:21:57.062+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1221,
+2,15,https://merico.atlassian.net/rest/agile/1.0/sprint/15,closed,Emma Sprint 
1,2020-06-22T01:32:04.664+00:00,2020-07-06T01:32:52.000+00:00,2020-06-29T02:50:44.043+00:00,13,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1222,
+2,17,https://merico.atlassian.net/rest/agile/1.0/sprint/17,closed,EE Sprint 
9,2020-07-13T01:22:22.745+00:00,2020-07-27T01:22:00.000+00:00,2020-07-27T01:23:43.083+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1223,
+2,18,https://merico.atlassian.net/rest/agile/1.0/sprint/18,closed,EE Sprint 
10,2020-07-27T01:26:13.465+00:00,2020-08-10T01:26:00.000+00:00,2020-08-10T02:29:10.811+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1224,
+2,19,https://merico.atlassian.net/rest/agile/1.0/sprint/19,closed,EE Sprint 
11,2020-08-09T01:15:11.205+00:00,2020-08-21T01:15:00.000+00:00,2020-08-31T01:34:04.666+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1225,
+2,20,https://merico.atlassian.net/rest/agile/1.0/sprint/20,closed,EE Sprint 
14,2020-08-31T01:35:38.626+00:00,2020-09-07T01:35:00.000+00:00,2020-11-05T07:46:55.346+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1226,
+2,21,https://merico.atlassian.net/rest/agile/1.0/sprint/21,closed,EE Sprint 
15,2020-11-09T08:29:00.529+00:00,2020-11-16T08:29:00.000+00:00,2020-11-16T23:07:33.015+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1227,
+2,25,https://merico.atlassian.net/rest/agile/1.0/sprint/25,closed,EE Sprint 
16,2020-11-16T23:14:57.590+00:00,2020-11-23T23:14:00.000+00:00,2020-11-24T03:56:42.281+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1228,
+2,26,https://merico.atlassian.net/rest/agile/1.0/sprint/26,closed,EE Sprint 
17,2020-11-20T03:56:12.414+00:00,2020-11-27T03:56:00.000+00:00,2020-11-30T02:48:49.378+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1229,
+2,27,https://merico.atlassian.net/rest/agile/1.0/sprint/27,closed,EE Sprint 
18,2020-11-30T02:49:24.536+00:00,2020-12-07T02:49:00.000+00:00,2020-12-07T01:41:17.786+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1230,
+2,28,https://merico.atlassian.net/rest/agile/1.0/sprint/28,closed,EE Sprint 
19,2020-12-07T01:41:40.676+00:00,2020-12-14T01:41:00.000+00:00,2020-12-14T01:00:22.218+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1231,
+2,30,https://merico.atlassian.net/rest/agile/1.0/sprint/30,closed,EE Sprint 
20,2020-12-14T01:54:34.826+00:00,2020-12-28T01:54:00.000+00:00,2020-12-28T06:11:27.241+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1232,
+2,31,https://merico.atlassian.net/rest/agile/1.0/sprint/31,closed,EE Sprint 
21,2020-12-28T06:11:46.433+00:00,2021-01-10T18:11:00.000+00:00,2021-01-11T02:52:38.721+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1233,
+2,32,https://merico.atlassian.net/rest/agile/1.0/sprint/32,closed,EE Sprint 
22,2021-01-11T04:09:10.389+00:00,2021-01-18T04:09:00.000+00:00,2021-01-18T03:10:51.076+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1234,
+2,33,https://merico.atlassian.net/rest/agile/1.0/sprint/33,closed,EE Sprint 
23,2021-01-18T03:45:20.174+00:00,2021-01-25T03:45:00.000+00:00,2021-01-25T03:03:10.386+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1235,
+2,34,https://merico.atlassian.net/rest/agile/1.0/sprint/34,closed,EE Sprint 
24,2021-01-25T03:56:45.942+00:00,2021-02-01T03:56:00.000+00:00,2021-02-01T03:05:30.868+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1236,
+2,35,https://merico.atlassian.net/rest/agile/1.0/sprint/35,closed,EE Sprint 
25,2021-02-01T03:39:40.472+00:00,2021-02-08T03:39:00.000+00:00,2021-02-07T03:01:13.596+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1237,
+2,36,https://merico.atlassian.net/rest/agile/1.0/sprint/36,closed,EE Sprint 
26,2021-02-07T03:44:55.158+00:00,2021-02-14T03:44:00.000+00:00,2021-02-22T03:05:16.997+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1238,
+2,37,https://merico.atlassian.net/rest/agile/1.0/sprint/37,closed,EE Sprint 
27,2021-02-22T03:30:53.407+00:00,2021-03-01T03:30:00.000+00:00,2021-02-26T08:15:20.988+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1239,
+2,38,https://merico.atlassian.net/rest/agile/1.0/sprint/38,closed,EE Sprint 
28,2021-03-01T03:50:54.464+00:00,2021-03-08T03:50:00.000+00:00,2021-03-05T08:03:48.144+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1240,
+2,40,https://merico.atlassian.net/rest/agile/1.0/sprint/40,closed,EE Sprint 
29,2021-03-08T05:34:15.296+00:00,2021-03-14T17:34:00.000+00:00,2021-03-15T06:53:34.924+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1241,
+2,41,https://merico.atlassian.net/rest/agile/1.0/sprint/41,closed,EE Sprint 
30,2021-03-15T07:23:47.468+00:00,2021-03-21T19:23:00.000+00:00,2021-03-19T08:57:51.706+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1242,
+2,42,https://merico.atlassian.net/rest/agile/1.0/sprint/42,closed,EE Sprint 
31,2021-03-22T03:00:03.936+00:00,2021-03-28T15:00:00.000+00:00,2021-03-26T08:06:09.772+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1243,
+2,43,https://merico.atlassian.net/rest/agile/1.0/sprint/43,closed,EE Sprint 
32,2021-03-29T02:54:16.155+00:00,2021-04-04T14:54:00.000+00:00,2021-04-06T03:29:56.386+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1244,
+2,46,https://merico.atlassian.net/rest/agile/1.0/sprint/46,closed,EE Sprint 
33,2021-04-06T09:59:28.107+00:00,2021-04-12T21:59:00.000+00:00,2021-04-12T02:57:53.585+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1245,
+2,47,https://merico.atlassian.net/rest/agile/1.0/sprint/47,closed,EE Sprint 
34,2021-04-12T02:58:51.011+00:00,2021-04-19T02:58:00.000+00:00,2021-04-16T08:43:09.709+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1246,
+2,50,https://merico.atlassian.net/rest/agile/1.0/sprint/50,closed,EE Sprint 
35,2021-04-19T03:17:29.791+00:00,2021-04-26T03:17:00.000+00:00,2021-04-25T04:44:34.414+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1247,
+2,57,https://merico.atlassian.net/rest/agile/1.0/sprint/57,closed,EE Sprint 
36,2021-04-25T04:45:23.592+00:00,2021-04-30T04:44:00.000+00:00,2021-05-06T05:43:54.939+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1248,
+2,60,https://merico.atlassian.net/rest/agile/1.0/sprint/60,closed,EE Sprint 
37,2021-05-05T17:55:31.879+00:00,2021-05-14T15:59:00.000+00:00,2021-05-17T01:51:41.754+00:00,8,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_sprints,1249,
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_worklogs.csv 
b/plugins/jira/e2e/snapshot_tables/_tool_jira_worklogs.csv
new file mode 100644
index 00000000..0f65f409
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_worklogs.csv
@@ -0,0 +1,31 @@
+connection_id,issue_id,worklog_id,author_id,update_author_id,time_spent,time_spent_seconds,updated,started,issue_updated,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+2,10076,10006,,,1d 
2h,36000,2020-06-15T08:59:51.302+00:00,2020-06-05T20:59:00.000+00:00,2022-04-18T13:49:16.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1252,
+2,10077,10007,,,4h,14400,2020-06-15T09:00:26.952+00:00,2020-06-15T09:00:00.000+00:00,2022-04-18T13:49:16.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1250,
+2,10077,10008,,,4h,14400,2020-06-15T09:01:06.211+00:00,2020-06-15T05:00:42.836+00:00,2022-04-18T13:49:16.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1251,
+2,10078,10009,,,1h,3600,2020-06-15T09:01:44.154+00:00,2020-06-15T09:01:00.000+00:00,2022-04-18T13:49:16.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1253,
+2,10079,10218,,,2h,7200,2020-07-22T07:25:29.102+00:00,2020-07-22T07:24:00.000+00:00,2022-04-18T13:49:16.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1249,
+2,10085,10010,,,1h,3600,2020-06-15T09:07:56.793+00:00,2020-06-15T09:07:00.000+00:00,2022-04-18T13:49:16.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1248,
+2,11956,10713,[email protected],[email protected],3h,10800,2021-01-11T10:01:03.628+00:00,2021-01-11T06:58:43.580+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1330,
+2,11956,10717,[email protected],[email protected],2h 
30m,9000,2021-01-12T03:53:41.936+00:00,2021-01-12T01:00:00.000+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1331,
+2,11956,10718,[email protected],[email protected],30m,1800,2021-01-12T05:11:25.368+00:00,2021-01-12T04:40:51.604+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1332,
+2,11956,10719,[email protected],[email protected],4h,14400,2021-01-12T09:59:08.739+00:00,2021-01-12T05:58:22.015+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1333,
+2,11956,10720,[email protected],[email protected],1h,3600,2021-01-12T12:09:23.539+00:00,2021-01-12T11:08:46.608+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1334,
+2,11956,10726,[email protected],[email protected],2h 
30m,9000,2021-01-13T03:55:02.070+00:00,2021-01-13T01:24:41.786+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1335,
+2,11956,10729,[email protected],[email protected],20m,1200,2021-01-13T07:26:34.565+00:00,2021-01-13T07:06:14.927+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1336,
+2,11956,10733,[email protected],[email protected],2h,7200,2021-01-13T11:10:46.917+00:00,2021-01-13T08:00:00.000+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1337,
+2,12083,10611,,,1d,28800,2020-11-20T03:41:21.160+00:00,2020-11-19T19:41:16.606+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1338,
+2,12263,10809,[email protected],[email protected],3h,10800,2021-01-27T01:54:00.883+00:00,2021-01-26T07:00:00.000+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1339,
+2,12263,10810,[email protected],[email protected],1h,3600,2021-01-27T01:54:29.081+00:00,2021-01-27T01:00:00.000+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1340,
+2,12263,10811,[email protected],[email protected],1h,3600,2021-01-27T03:34:04.537+00:00,2021-01-27T02:33:41.693+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1341,
+2,12263,10922,[email protected],[email protected],6h,21600,2021-02-19T11:33:52.222+00:00,2021-02-19T05:33:21.257+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1342,
+2,12351,10946,[email protected],[email protected],1h,3600,2021-03-02T09:20:19.608+00:00,2021-03-02T08:20:02.371+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1343,
+2,12411,10708,[email protected],[email protected],2h,7200,2021-01-11T03:53:25.692+00:00,2021-01-11T01:52:40.264+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1344,
+2,12604,10714,[email protected],[email protected],20m,1200,2021-01-11T11:35:33.757+00:00,2021-01-11T11:15:00.400+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1345,
+2,12604,10728,[email protected],[email protected],45m,2700,2021-01-13T06:18:35.726+00:00,2021-01-13T05:33:16.447+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1346,
+2,12692,10761,[email protected],[email protected],1h,3600,2021-01-20T09:55:38.918+00:00,2021-01-20T08:55:12.424+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1347,
+2,12760,10738,[email protected],[email protected],3h,10800,2021-01-15T01:17:13.517+00:00,2021-01-14T06:00:00.000+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1348,
+2,12760,10743,[email protected],[email protected],3h,10800,2021-01-18T01:13:18.808+00:00,2021-01-15T06:00:00.000+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1349,
+2,12760,10750,[email protected],[email protected],3h,10800,2021-01-18T09:05:08.848+00:00,2021-01-18T07:00:00.000+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1350,
+2,12760,10759,[email protected],[email protected],1h,3600,2021-01-20T05:21:40.077+00:00,2021-01-19T16:30:00.000+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1351,
+2,12796,10732,[email protected],[email protected],30m,1800,2021-01-13T11:10:00.634+00:00,2021-01-13T10:39:45.227+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1352,
+2,12796,10736,[email protected],[email protected],30m,1800,2021-01-14T06:30:51.411+00:00,2021-01-14T06:00:32.784+00:00,2022-04-19T16:29:51.000+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_worklogs,1353,
diff --git a/plugins/jira/e2e/snapshot_tables/board_sprints.csv 
b/plugins/jira/e2e/snapshot_tables/board_sprints.csv
new file mode 100644
index 00000000..17386744
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/board_sprints.csv
@@ -0,0 +1,31 @@
+board_id,sprint_id
+jira:JiraBoard:2:8,jira:JiraSprint:2:15
+jira:JiraBoard:2:8,jira:JiraSprint:2:17
+jira:JiraBoard:2:8,jira:JiraSprint:2:18
+jira:JiraBoard:2:8,jira:JiraSprint:2:19
+jira:JiraBoard:2:8,jira:JiraSprint:2:20
+jira:JiraBoard:2:8,jira:JiraSprint:2:21
+jira:JiraBoard:2:8,jira:JiraSprint:2:25
+jira:JiraBoard:2:8,jira:JiraSprint:2:26
+jira:JiraBoard:2:8,jira:JiraSprint:2:27
+jira:JiraBoard:2:8,jira:JiraSprint:2:28
+jira:JiraBoard:2:8,jira:JiraSprint:2:30
+jira:JiraBoard:2:8,jira:JiraSprint:2:31
+jira:JiraBoard:2:8,jira:JiraSprint:2:32
+jira:JiraBoard:2:8,jira:JiraSprint:2:33
+jira:JiraBoard:2:8,jira:JiraSprint:2:34
+jira:JiraBoard:2:8,jira:JiraSprint:2:35
+jira:JiraBoard:2:8,jira:JiraSprint:2:36
+jira:JiraBoard:2:8,jira:JiraSprint:2:37
+jira:JiraBoard:2:8,jira:JiraSprint:2:38
+jira:JiraBoard:2:8,jira:JiraSprint:2:40
+jira:JiraBoard:2:8,jira:JiraSprint:2:41
+jira:JiraBoard:2:8,jira:JiraSprint:2:42
+jira:JiraBoard:2:8,jira:JiraSprint:2:43
+jira:JiraBoard:2:8,jira:JiraSprint:2:46
+jira:JiraBoard:2:8,jira:JiraSprint:2:47
+jira:JiraBoard:2:8,jira:JiraSprint:2:50
+jira:JiraBoard:2:8,jira:JiraSprint:2:57
+jira:JiraBoard:2:8,jira:JiraSprint:2:60
+jira:JiraBoard:2:8,jira:JiraSprint:2:7
+jira:JiraBoard:2:8,jira:JiraSprint:2:9
diff --git a/plugins/jira/e2e/snapshot_tables/changelogs.csv 
b/plugins/jira/e2e/snapshot_tables/changelogs.csv
new file mode 100644
index 00000000..9ede7325
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/changelogs.csv
@@ -0,0 +1,31 @@
+id,issue_id,author_id,author_name,field_id,field_name,original_from_value,original_to_value,from_value,to_value,created_date
+jira:JiraChangelogItem:2:11646:assignee,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,assignee,,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,,,2020-06-17T07:39:14.729+00:00
+jira:JiraChangelogItem:2:11648:assignee,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 
Zheng,,assignee,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,,,2020-06-17T07:40:05.335+00:00
+jira:JiraChangelogItem:2:11677:summary,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,summary,[Industry
 Metrics],[Industry Metrics],,,2020-06-17T07:46:44.006+00:00
+jira:JiraChangelogItem:2:11798:summary,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile
 Tu,,summary,[Industry Metrics],[Industry Metrics] 
,,,2020-06-18T05:58:14.769+00:00
+jira:JiraChangelogItem:2:11913:Component,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile
 Tu,,Component,,Industry Metrics,,,2020-06-19T01:07:20.709+00:00
+jira:JiraChangelogItem:2:11915:Component,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile
 Tu,,Component,,Charts,,,2020-06-19T01:07:59.090+00:00
+jira:JiraChangelogItem:2:11935:Component,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile
 Tu,,Component,Charts,,,,2020-06-19T01:31:52.567+00:00
+jira:JiraChangelogItem:2:11993:Rank,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,Rank,,Ranked higher,,,2020-06-19T05:30:01.576+00:00
+jira:JiraChangelogItem:2:12011:Epic 
Link,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin 
Zheng,,Epic Link,,EE-22,,,2020-06-19T06:25:41.732+00:00
+jira:JiraChangelogItem:2:12016:summary,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,summary,[Industry Metrics] ,,,,2020-06-19T06:26:00.014+00:00
+jira:JiraChangelogItem:2:12058:Rank,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,Rank,,Ranked higher,,,2020-06-19T08:37:40.933+00:00
+jira:JiraChangelogItem:2:12766:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add industry 
unittest (Web Link)""",,,2020-06-27T19:20:53.685+00:00
+jira:JiraChangelogItem:2:13012:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add 
IndustryQuery (getEfficiencyMetric) (Web 
Link)""",,,2020-06-28T19:33:53.703+00:00
+jira:JiraChangelogItem:2:13181:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add 
IndustryQuery.test.ts (Web Link)""",,,2020-06-29T19:34:20.886+00:00
+jira:JiraChangelogItem:2:13187:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectEfficiency (which has a developer bug) 
(Web Link)""",,,2020-06-29T19:34:21.216+00:00
+jira:JiraChangelogItem:2:13189:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add 
IndustryQuery (getEfficiencyMetric) (Web 
Link)""",,,2020-06-29T19:34:21.533+00:00
+jira:JiraChangelogItem:2:13190:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add Industry 
model (Web Link)""",,,2020-06-29T19:34:21.602+00:00
+jira:JiraChangelogItem:2:13192:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 rename (Web 
Link)""",,,2020-06-29T19:34:21.612+00:00
+jira:JiraChangelogItem:2:13193:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add industry 
unittest (Web Link)""",,,2020-06-29T19:34:21.632+00:00
+jira:JiraChangelogItem:2:13194:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add 
getQualityMetric (Web Link)""",,,2020-06-29T19:34:21.652+00:00
+jira:JiraChangelogItem:2:13257:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web 
Link)""",,,2020-06-30T07:08:13.527+00:00
+jira:JiraChangelogItem:2:15273:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to 
""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web 
Link)""",,,2020-07-05T18:20:07.965+00:00
+jira:JiraChangelogItem:2:15274:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectEfficiency (which has a developer bug) 
(Web Link)""","This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectEfficiency (which has a developer bug) 
(Web Link)""",,,2020-07-05T18:20:09.481+00:00
+jira:JiraChangelogItem:2:15305:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add group 
industy data (Web Link)""",,,2020-07-05T18:20:35.972+00:00
+jira:JiraChangelogItem:2:15310:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 fix group 
industry data's bug (Web Link)""",,,2020-07-05T18:20:36.221+00:00
+jira:JiraChangelogItem:2:15351:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to 
""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web 
Link)""",,,2020-07-05T23:49:54.024+00:00
+jira:JiraChangelogItem:2:15357:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 fix group 
industry data's bug (Web Link)""","This issue links to ""Commit - #EE-160 fix 
group industry data's bug (Web Link)""",,,2020-07-05T23:49:54.265+00:00
+jira:JiraChangelogItem:2:15397:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to 
""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web 
Link)""",,,2020-07-06T02:45:22.440+00:00
+jira:JiraChangelogItem:2:15400:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 fix group 
industry data's bug (Web Link)""","This issue links to ""Commit - #EE-160 fix 
group industry data's bug (Web Link)""",,,2020-07-06T02:45:22.555+00:00
+jira:JiraChangelogItem:2:15536:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin
 Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add 
IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to 
""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web 
Link)""",,,2020-07-06T12:38:44.036+00:00
diff --git a/plugins/jira/e2e/snapshot_tables/sprints.csv 
b/plugins/jira/e2e/snapshot_tables/sprints.csv
new file mode 100644
index 00000000..b796c54a
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/sprints.csv
@@ -0,0 +1,31 @@
+id,url,status,name,started_date,ended_date,completed_date,original_board_id
+jira:JiraSprint:2:15,https://merico.atlassian.net/rest/agile/1.0/sprint/15,CLOSED,Emma
 Sprint 
1,2020-06-22T01:32:04.664+00:00,2020-07-06T01:32:52.000+00:00,2020-06-29T02:50:44.043+00:00,jira:JiraBoard:2:13
+jira:JiraSprint:2:17,https://merico.atlassian.net/rest/agile/1.0/sprint/17,CLOSED,EE
 Sprint 
9,2020-07-13T01:22:22.745+00:00,2020-07-27T01:22:00.000+00:00,2020-07-27T01:23:43.083+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:18,https://merico.atlassian.net/rest/agile/1.0/sprint/18,CLOSED,EE
 Sprint 
10,2020-07-27T01:26:13.465+00:00,2020-08-10T01:26:00.000+00:00,2020-08-10T02:29:10.811+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:19,https://merico.atlassian.net/rest/agile/1.0/sprint/19,CLOSED,EE
 Sprint 
11,2020-08-09T01:15:11.205+00:00,2020-08-21T01:15:00.000+00:00,2020-08-31T01:34:04.666+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:20,https://merico.atlassian.net/rest/agile/1.0/sprint/20,CLOSED,EE
 Sprint 
14,2020-08-31T01:35:38.626+00:00,2020-09-07T01:35:00.000+00:00,2020-11-05T07:46:55.346+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:21,https://merico.atlassian.net/rest/agile/1.0/sprint/21,CLOSED,EE
 Sprint 
15,2020-11-09T08:29:00.529+00:00,2020-11-16T08:29:00.000+00:00,2020-11-16T23:07:33.015+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:25,https://merico.atlassian.net/rest/agile/1.0/sprint/25,CLOSED,EE
 Sprint 
16,2020-11-16T23:14:57.590+00:00,2020-11-23T23:14:00.000+00:00,2020-11-24T03:56:42.281+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:26,https://merico.atlassian.net/rest/agile/1.0/sprint/26,CLOSED,EE
 Sprint 
17,2020-11-20T03:56:12.414+00:00,2020-11-27T03:56:00.000+00:00,2020-11-30T02:48:49.378+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:27,https://merico.atlassian.net/rest/agile/1.0/sprint/27,CLOSED,EE
 Sprint 
18,2020-11-30T02:49:24.536+00:00,2020-12-07T02:49:00.000+00:00,2020-12-07T01:41:17.786+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:28,https://merico.atlassian.net/rest/agile/1.0/sprint/28,CLOSED,EE
 Sprint 
19,2020-12-07T01:41:40.676+00:00,2020-12-14T01:41:00.000+00:00,2020-12-14T01:00:22.218+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:30,https://merico.atlassian.net/rest/agile/1.0/sprint/30,CLOSED,EE
 Sprint 
20,2020-12-14T01:54:34.826+00:00,2020-12-28T01:54:00.000+00:00,2020-12-28T06:11:27.241+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:31,https://merico.atlassian.net/rest/agile/1.0/sprint/31,CLOSED,EE
 Sprint 
21,2020-12-28T06:11:46.433+00:00,2021-01-10T18:11:00.000+00:00,2021-01-11T02:52:38.721+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:32,https://merico.atlassian.net/rest/agile/1.0/sprint/32,CLOSED,EE
 Sprint 
22,2021-01-11T04:09:10.389+00:00,2021-01-18T04:09:00.000+00:00,2021-01-18T03:10:51.076+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:33,https://merico.atlassian.net/rest/agile/1.0/sprint/33,CLOSED,EE
 Sprint 
23,2021-01-18T03:45:20.174+00:00,2021-01-25T03:45:00.000+00:00,2021-01-25T03:03:10.386+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:34,https://merico.atlassian.net/rest/agile/1.0/sprint/34,CLOSED,EE
 Sprint 
24,2021-01-25T03:56:45.942+00:00,2021-02-01T03:56:00.000+00:00,2021-02-01T03:05:30.868+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:35,https://merico.atlassian.net/rest/agile/1.0/sprint/35,CLOSED,EE
 Sprint 
25,2021-02-01T03:39:40.472+00:00,2021-02-08T03:39:00.000+00:00,2021-02-07T03:01:13.596+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:36,https://merico.atlassian.net/rest/agile/1.0/sprint/36,CLOSED,EE
 Sprint 
26,2021-02-07T03:44:55.158+00:00,2021-02-14T03:44:00.000+00:00,2021-02-22T03:05:16.997+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:37,https://merico.atlassian.net/rest/agile/1.0/sprint/37,CLOSED,EE
 Sprint 
27,2021-02-22T03:30:53.407+00:00,2021-03-01T03:30:00.000+00:00,2021-02-26T08:15:20.988+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:38,https://merico.atlassian.net/rest/agile/1.0/sprint/38,CLOSED,EE
 Sprint 
28,2021-03-01T03:50:54.464+00:00,2021-03-08T03:50:00.000+00:00,2021-03-05T08:03:48.144+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:40,https://merico.atlassian.net/rest/agile/1.0/sprint/40,CLOSED,EE
 Sprint 
29,2021-03-08T05:34:15.296+00:00,2021-03-14T17:34:00.000+00:00,2021-03-15T06:53:34.924+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:41,https://merico.atlassian.net/rest/agile/1.0/sprint/41,CLOSED,EE
 Sprint 
30,2021-03-15T07:23:47.468+00:00,2021-03-21T19:23:00.000+00:00,2021-03-19T08:57:51.706+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:42,https://merico.atlassian.net/rest/agile/1.0/sprint/42,CLOSED,EE
 Sprint 
31,2021-03-22T03:00:03.936+00:00,2021-03-28T15:00:00.000+00:00,2021-03-26T08:06:09.772+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:43,https://merico.atlassian.net/rest/agile/1.0/sprint/43,CLOSED,EE
 Sprint 
32,2021-03-29T02:54:16.155+00:00,2021-04-04T14:54:00.000+00:00,2021-04-06T03:29:56.386+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:46,https://merico.atlassian.net/rest/agile/1.0/sprint/46,CLOSED,EE
 Sprint 
33,2021-04-06T09:59:28.107+00:00,2021-04-12T21:59:00.000+00:00,2021-04-12T02:57:53.585+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:47,https://merico.atlassian.net/rest/agile/1.0/sprint/47,CLOSED,EE
 Sprint 
34,2021-04-12T02:58:51.011+00:00,2021-04-19T02:58:00.000+00:00,2021-04-16T08:43:09.709+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:50,https://merico.atlassian.net/rest/agile/1.0/sprint/50,CLOSED,EE
 Sprint 
35,2021-04-19T03:17:29.791+00:00,2021-04-26T03:17:00.000+00:00,2021-04-25T04:44:34.414+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:57,https://merico.atlassian.net/rest/agile/1.0/sprint/57,CLOSED,EE
 Sprint 
36,2021-04-25T04:45:23.592+00:00,2021-04-30T04:44:00.000+00:00,2021-05-06T05:43:54.939+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:60,https://merico.atlassian.net/rest/agile/1.0/sprint/60,CLOSED,EE
 Sprint 
37,2021-05-05T17:55:31.879+00:00,2021-05-14T15:59:00.000+00:00,2021-05-17T01:51:41.754+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:7,https://merico.atlassian.net/rest/agile/1.0/sprint/7,CLOSED,EE
 Sprint 
7,2020-06-12T00:38:51.882+00:00,2020-06-26T00:38:00.000+00:00,2020-06-22T05:59:58.980+00:00,jira:JiraBoard:2:8
+jira:JiraSprint:2:9,https://merico.atlassian.net/rest/agile/1.0/sprint/9,CLOSED,EE
 Sprint 
8,2020-06-22T06:00:33.769+00:00,2020-07-10T06:00:00.000+00:00,2020-07-13T01:21:57.062+00:00,jira:JiraBoard:2:8
diff --git a/plugins/jira/e2e/snapshot_tables/worklogs.csv 
b/plugins/jira/e2e/snapshot_tables/worklogs.csv
new file mode 100644
index 00000000..e67603c3
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/worklogs.csv
@@ -0,0 +1,7 @@
+id,author_id,comment,time_spent_minutes,logged_date,started_date,issue_id
+jira:JiraWorklog:2:10076:10006,,,600,2020-06-15T08:59:51.302+00:00,2020-06-05T20:59:00.000+00:00,jira:JiraIssue:2:10076
+jira:JiraWorklog:2:10077:10007,,,240,2020-06-15T09:00:26.952+00:00,2020-06-15T09:00:00.000+00:00,jira:JiraIssue:2:10077
+jira:JiraWorklog:2:10077:10008,,,240,2020-06-15T09:01:06.211+00:00,2020-06-15T05:00:42.836+00:00,jira:JiraIssue:2:10077
+jira:JiraWorklog:2:10078:10009,,,60,2020-06-15T09:01:44.154+00:00,2020-06-15T09:01:00.000+00:00,jira:JiraIssue:2:10078
+jira:JiraWorklog:2:10079:10218,,,120,2020-07-22T07:25:29.102+00:00,2020-07-22T07:24:00.000+00:00,jira:JiraIssue:2:10079
+jira:JiraWorklog:2:10085:10010,,,60,2020-06-15T09:07:56.793+00:00,2020-06-15T09:07:00.000+00:00,jira:JiraIssue:2:10085
diff --git a/plugins/jira/e2e/sprint_test.go b/plugins/jira/e2e/sprint_test.go
new file mode 100644
index 00000000..baad6d3a
--- /dev/null
+++ b/plugins/jira/e2e/sprint_test.go
@@ -0,0 +1,97 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package e2e
+
+import (
+       "testing"
+
+       "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       "github.com/apache/incubator-devlake/models/domainlayer/ticket"
+       "github.com/apache/incubator-devlake/plugins/jira/impl"
+       "github.com/apache/incubator-devlake/plugins/jira/models"
+       "github.com/apache/incubator-devlake/plugins/jira/tasks"
+)
+
+func TestSprintDataFlow(t *testing.T) {
+       var plugin impl.Jira
+       dataflowTester := e2ehelper.NewDataFlowTester(t, "jira", plugin)
+
+       taskData := &tasks.JiraTaskData{
+               Options: &tasks.JiraOptions{
+                       ConnectionId: 2,
+                       BoardId:      8,
+               },
+       }
+
+       // import raw data table
+       
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jira_api_sprints.csv", 
"_raw_jira_api_sprints")
+
+       // verify sprint extraction
+       dataflowTester.FlushTabler(&models.JiraSprint{})
+       dataflowTester.FlushTabler(&models.JiraBoardSprint{})
+       dataflowTester.Subtask(tasks.ExtractSprintsMeta, taskData)
+       dataflowTester.VerifyTable(
+               models.JiraSprint{},
+               "./snapshot_tables/_tool_jira_sprints.csv",
+               []string{
+                       "connection_id",
+                       "sprint_id",
+                       "self",
+                       "state",
+                       "name",
+                       "start_date",
+                       "end_date",
+                       "complete_date",
+                       "origin_board_id",
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+
+       dataflowTester.VerifyTable(
+               models.JiraBoardSprint{},
+               "./snapshot_tables/_tool_jira_board_sprints.csv",
+               []string{"connection_id", "board_id", "sprint_id"},
+       )
+
+       // verify sprint conversion
+       dataflowTester.FlushTabler(&ticket.Sprint{})
+       dataflowTester.FlushTabler(&ticket.BoardSprint{})
+       dataflowTester.Subtask(tasks.ConvertSprintsMeta, taskData)
+       dataflowTester.VerifyTable(
+               ticket.Sprint{},
+               "./snapshot_tables/sprints.csv",
+               []string{
+                       "id",
+                       "url",
+                       "status",
+                       "name",
+                       "started_date",
+                       "ended_date",
+                       "completed_date",
+                       "original_board_id",
+               },
+       )
+       dataflowTester.VerifyTable(
+               ticket.BoardSprint{},
+               "./snapshot_tables/board_sprints.csv",
+               []string{"board_id", "sprint_id"},
+       )
+}
diff --git a/plugins/jira/e2e/worklog_test.go b/plugins/jira/e2e/worklog_test.go
new file mode 100644
index 00000000..fc5efb67
--- /dev/null
+++ b/plugins/jira/e2e/worklog_test.go
@@ -0,0 +1,85 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package e2e
+
+import (
+       "testing"
+
+       "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       "github.com/apache/incubator-devlake/models/domainlayer/ticket"
+       "github.com/apache/incubator-devlake/plugins/jira/impl"
+       "github.com/apache/incubator-devlake/plugins/jira/models"
+       "github.com/apache/incubator-devlake/plugins/jira/tasks"
+)
+
+func TestWorklogDataFlow(t *testing.T) {
+       var plugin impl.Jira
+       dataflowTester := e2ehelper.NewDataFlowTester(t, "jira", plugin)
+
+       taskData := &tasks.JiraTaskData{
+               Options: &tasks.JiraOptions{
+                       ConnectionId: 2,
+                       BoardId:      8,
+               },
+       }
+
+       // import raw data table
+       
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jira_api_worklogs.csv", 
"_raw_jira_api_worklogs")
+
+       // verify worklog extraction
+       dataflowTester.FlushTabler(&models.JiraWorklog{})
+       dataflowTester.Subtask(tasks.ExtractWorklogsMeta, taskData)
+       dataflowTester.VerifyTable(
+               models.JiraWorklog{},
+               "./snapshot_tables/_tool_jira_worklogs.csv",
+               []string{
+                       "connection_id",
+                       "issue_id",
+                       "worklog_id",
+                       "author_id",
+                       "update_author_id",
+                       "time_spent",
+                       "time_spent_seconds",
+                       "updated",
+                       "started",
+                       "issue_updated",
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+
+       // verify worklog conversion
+       
dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_jira_board_issues_for_worklog.csv",
 &models.JiraBoardIssue{})
+       dataflowTester.FlushTabler(&ticket.IssueWorklog{})
+       dataflowTester.Subtask(tasks.ConvertWorklogsMeta, taskData)
+       dataflowTester.VerifyTable(
+               ticket.IssueWorklog{},
+               "./snapshot_tables/worklogs.csv",
+               []string{
+                       "id",
+                       "author_id",
+                       "comment",
+                       "time_spent_minutes",
+                       "logged_date",
+                       "started_date",
+                       "issue_id",
+               },
+       )
+}
diff --git a/plugins/jira/impl/impl.go b/plugins/jira/impl/impl.go
index f61035d1..ef434189 100644
--- a/plugins/jira/impl/impl.go
+++ b/plugins/jira/impl/impl.go
@@ -141,7 +141,6 @@ func (plugin Jira) PrepareTaskData(taskCtx 
core.TaskContext, options map[string]
        taskData := &tasks.JiraTaskData{
                Options:        &op,
                ApiClient:      jiraApiClient,
-               Connection:     connection,
                JiraServerInfo: *info,
        }
        if !since.IsZero() {
diff --git a/plugins/jira/tasks/issue_extractor.go 
b/plugins/jira/tasks/issue_extractor.go
index 84cf2abb..870fb0a1 100644
--- a/plugins/jira/tasks/issue_extractor.go
+++ b/plugins/jira/tasks/issue_extractor.go
@@ -47,13 +47,13 @@ func ExtractIssues(taskCtx core.SubTaskContext) error {
        // prepare getStdType function
        // TODO: implement type mapping
        typeMappings := make(map[string]string)
-       for _, userType := range 
data.Options.IssueExtraction.RequirementTypeMapping {
+       for _, userType := range 
data.Options.TransformationRules.RequirementTypeMapping {
                typeMappings[userType] = "REQUIREMENT"
        }
-       for _, userType := range data.Options.IssueExtraction.BugTypeMapping {
+       for _, userType := range 
data.Options.TransformationRules.BugTypeMapping {
                typeMappings[userType] = "BUG"
        }
-       for _, userType := range 
data.Options.IssueExtraction.IncidentTypeMapping {
+       for _, userType := range 
data.Options.TransformationRules.IncidentTypeMapping {
                typeMappings[userType] = "INCIDENT"
        }
 
@@ -98,8 +98,8 @@ func ExtractIssues(taskCtx core.SubTaskContext) error {
                        if issue.ResolutionDate != nil {
                                issue.LeadTimeMinutes = 
uint(issue.ResolutionDate.Unix()-issue.Created.Unix()) / 60
                        }
-                       if data.Options.IssueExtraction.StoryPointField != "" {
-                               strStoryPoint := 
apiIssue.Fields.AllFields[data.Options.IssueExtraction.StoryPointField].(string)
+                       if data.Options.TransformationRules.StoryPointField != 
"" {
+                               strStoryPoint := 
apiIssue.Fields.AllFields[data.Options.TransformationRules.StoryPointField].(string)
                                issue.StoryPoint, _ = 
strconv.ParseFloat(strStoryPoint, 32)
                        }
                        issue.StdStoryPoint = uint(issue.StoryPoint)
diff --git a/plugins/jira/tasks/remotelink_extractor.go 
b/plugins/jira/tasks/remotelink_extractor.go
index fc743c78..99ef2be5 100644
--- a/plugins/jira/tasks/remotelink_extractor.go
+++ b/plugins/jira/tasks/remotelink_extractor.go
@@ -43,7 +43,7 @@ func ExtractRemotelinks(taskCtx core.SubTaskContext) error {
        db := taskCtx.GetDal()
        logger.Info("extract remote links")
        var commitShaRegex *regexp.Regexp
-       if pattern := data.Connection.RemotelinkCommitShaPattern; pattern != "" 
{
+       if pattern := 
data.Options.TransformationRules.RemotelinkCommitShaPattern; pattern != "" {
                commitShaRegex = regexp.MustCompile(pattern)
        }
 
diff --git a/plugins/jira/tasks/sprint_convertor.go 
b/plugins/jira/tasks/sprint_convertor.go
index af0d1c71..54ddb3a9 100644
--- a/plugins/jira/tasks/sprint_convertor.go
+++ b/plugins/jira/tasks/sprint_convertor.go
@@ -45,7 +45,8 @@ func ConvertSprints(taskCtx core.SubTaskContext) error {
        db := taskCtx.GetDal()
        logger.Info("convert sprints")
        clauses := []dal.Clause{
-               dal.Select("_tool_jira_sprints.*"),
+               dal.Select("*"),
+               dal.From(&models.JiraSprint{}),
                dal.Join("left join _tool_jira_board_sprints on 
_tool_jira_board_sprints.sprint_id = _tool_jira_sprints.sprint_id"),
                dal.Where("_tool_jira_board_sprints.connection_id = ? AND 
_tool_jira_board_sprints.board_id = ?", connectionId, boardId),
        }
diff --git a/plugins/jira/tasks/task_data.go b/plugins/jira/tasks/task_data.go
index 23cc2957..084fc1a6 100644
--- a/plugins/jira/tasks/task_data.go
+++ b/plugins/jira/tasks/task_data.go
@@ -24,24 +24,26 @@ import (
        "github.com/apache/incubator-devlake/plugins/jira/models"
 )
 
+type TransformationRules struct {
+       RequirementTypeMapping     []string
+       BugTypeMapping             []string
+       IncidentTypeMapping        []string
+       EpicKeyField               string
+       StoryPointField            string
+       RemotelinkCommitShaPattern string
+}
+
 type JiraOptions struct {
-       ConnectionId    uint64   `json:"connectionId"`
-       BoardId         uint64   `json:"boardId"`
-       Tasks           []string `json:"tasks,omitempty"`
-       Since           string
-       IssueExtraction struct {
-               RequirementTypeMapping []string
-               BugTypeMapping         []string
-               IncidentTypeMapping    []string
-               //EpicKeyField           string
-               StoryPointField string
-       }
+       ConnectionId        uint64   `json:"connectionId"`
+       BoardId             uint64   `json:"boardId"`
+       Tasks               []string `json:"tasks,omitempty"`
+       Since               string
+       TransformationRules TransformationRules `json:"transformationRules"`
 }
 
 type JiraTaskData struct {
        Options        *JiraOptions
        ApiClient      *helper.ApiAsyncClient
-       Connection     *models.JiraConnection
        Since          *time.Time
        JiraServerInfo models.JiraServerInfo
 }

Reply via email to