Commit 517db36e11d52d0d5ec8b252509296ba911bd2e2

Authored by Matheus Fernandes
1 parent 69735235

Improved data_api tests

Signed-off-by: Matheus Fernandes <matheus.souza.fernandes@gmail.com>
Signed-off-by: Lucas Moura <lucas.mouta128@gmail.com>
colab/plugins/gitlab/data_api.py
... ... @@ -65,138 +65,82 @@ class GitlabDataAPI(ProxyDataAPI):
65 65  
66 66 return _object
67 67  
68   - def fetch_projects(self):
  68 + def fetch(self, url, gitlab_class):
69 69 page = 1
70   - projects = []
  70 + obj_list = []
71 71  
72 72 while True:
73   - json_data = self.get_json_data('/api/v3/projects/all', page)
  73 + json_data = self.get_json_data(url, page)
74 74 page = page + 1
75 75  
76 76 if not len(json_data):
77 77 break
78 78  
79 79 for element in json_data:
80   - project = GitlabProject()
81   - self.fill_object_data(element, project)
82   - projects.append(project)
83   -
84   - return projects
85   -
86   - def fetch_groups(self):
87   - page = 1
88   - groups = []
  80 + obj = gitlab_class()
  81 + self.fill_object_data(element, obj)
  82 + obj_list.append(obj)
89 83  
90   - while True:
91   - json_data = self.get_json_data('/api/v3/groups', page)
92   - page = page + 1
  84 + return obj_list
93 85  
94   - if not len(json_data):
95   - break
96   -
97   - for element in json_data:
98   - group = GitlabGroup()
99   - self.fill_object_data(element, group)
100   - groups.append(group)
101   -
102   - return groups
103   -
104   - def fetch_merge_request(self, projects):
105   - all_merge_request = []
  86 + def fetch_comments(self, url, parent_class, issue_comment):
  87 + all_comments = []
  88 + all_parent_objects = parent_class.objects.all()
106 89  
107   - for project in projects:
  90 + for parent_obj in all_parent_objects:
108 91 page = 1
109 92 while True:
110   - url = '/api/v3/projects/{}/merge_requests'.format(project.id)
111   - json_data_mr = self.get_json_data(url, page)
  93 + formated_url = url.format(parent_obj.project_id, parent_obj.id)
  94 + json_data = self.get_json_data(formated_url, page)
112 95 page = page + 1
113 96  
114   - if len(json_data_mr) == 0:
  97 + if len(json_data) == 0:
115 98 break
116 99  
117   - for element in json_data_mr:
118   - single_merge_request = GitlabMergeRequest()
119   - self.fill_object_data(element, single_merge_request)
120   - all_merge_request.append(single_merge_request)
121   -
122   - return all_merge_request
  100 + for element in json_data:
  101 + single_comment = GitlabComment()
  102 + self.fill_object_data(element, single_comment)
  103 + single_comment.project = parent_obj.project
  104 + single_comment.issue_comment = issue_comment
  105 + single_comment.parent_id = parent_obj.id
  106 + all_comments.append(single_comment)
123 107  
124   - def fetch_issue(self, projects):
125   - all_issues = []
  108 + return all_comments
126 109  
127   - for project in projects:
128   - page = 1
129   - while True:
130   - url = '/api/v3/projects/{}/issues'.format(project.id)
131   - json_data_issue = self.get_json_data(url, page)
132   - page = page + 1
  110 + def fetch_projects(self):
  111 + return self.fetch('/api/v3/projects/all', GitlabProject)
133 112  
134   - if len(json_data_issue) == 0:
135   - break
  113 + def fetch_groups(self):
  114 + return self.fetch('/api/v3/groups', GitlabGroup)
136 115  
137   - for element in json_data_issue:
138   - single_issue = GitlabIssue()
139   - self.fill_object_data(element, single_issue)
140   - all_issues.append(single_issue)
  116 + def fetch_merge_request(self, projects):
  117 + merge_requests = []
  118 + for project in projects:
  119 + url = '/api/v3/projects/{}/merge_requests'.format(project.id)
  120 + merge_requests.extend(self.fetch(url, GitlabMergeRequest))
  121 + return merge_requests
141 122  
142   - return all_issues
  123 + def fetch_issue(self, projects):
  124 + issues = []
  125 + for project in projects:
  126 + url = '/api/v3/projects/{}/issues'.format(project.id)
  127 + issues.extend(self.fetch(url, GitlabIssue))
  128 + return issues
143 129  
144   - def fetch_comments(self):
  130 + def fetch_all_comments(self):
145 131 all_comments = []
146   - all_comments.extend(self.fetch_comments_MR())
  132 + all_comments.extend(self.fetch_comments_mr())
147 133 all_comments.extend(self.fetch_comments_issues())
148 134  
149 135 return all_comments
150 136  
151   - def fetch_comments_MR(self):
152   - all_comments = []
153   - all_merge_requests = GitlabMergeRequest.objects.all()
154   -
155   - for merge_request in all_merge_requests:
156   - page = 1
157   - while True:
158   - url = '/api/v3/projects/{}/merge_requests/{}/notes'.format(
159   - merge_request.project_id, merge_request.id)
160   - json_data_mr = self.get_json_data(url, page)
161   - page = page + 1
162   -
163   - if len(json_data_mr) == 0:
164   - break
165   -
166   - for element in json_data_mr:
167   - single_comment = GitlabComment()
168   - self.fill_object_data(element, single_comment)
169   - single_comment.project = merge_request.project
170   - single_comment.issue_comment = False
171   - single_comment.parent_id = merge_request.id
172   - all_comments.append(single_comment)
173   -
174   - return all_comments
  137 + def fetch_comments_mr(self):
  138 + url = '/api/v3/projects/{}/merge_requests/{}/notes'
  139 + return self.fetch_comments(url, GitlabMergeRequest, False)
175 140  
176 141 def fetch_comments_issues(self):
177   - all_comments = []
178   - all_issues = GitlabIssue.objects.all()
179   -
180   - for issue in all_issues:
181   - page = 1
182   - while True:
183   - url = '/api/v3/projects/{}/issues/{}/notes'.format(
184   - issue.project_id, issue.id)
185   - json_data_mr = self.get_json_data(url, page)
186   - page = page + 1
187   -
188   - if len(json_data_mr) == 0:
189   - break
190   -
191   - for element in json_data_mr:
192   - single_comment = GitlabComment()
193   - self.fill_object_data(element, single_comment)
194   - single_comment.project = issue.project
195   - single_comment.issue_comment = True
196   - single_comment.parent_id = issue.id
197   - all_comments.append(single_comment)
198   -
199   - return all_comments
  142 + url = '/api/v3/projects/{}/issues/{}/notes'
  143 + return self.fetch_comments(url, GitlabIssue, True)
200 144  
201 145 def fetch_data(self):
202 146 LOGGER.info("Importing Projects")
... ... @@ -209,7 +153,7 @@ class GitlabDataAPI(ProxyDataAPI):
209 153 issues = self.fetch_issue(projects)
210 154  
211 155 LOGGER.info("Importing Comments")
212   - comments = self.fetch_comments()
  156 + comments = self.fetch_all_comments()
213 157  
214 158 LOGGER.info("Importing Groups")
215 159 groups = self.fetch_groups()
... ...
colab/plugins/gitlab/tests/data.py 0 → 100644
... ... @@ -0,0 +1,52 @@
  1 +proxied_app = {'menu_title': None,
  2 + 'private_token': 'token',
  3 + 'upstream': 'localhost/gitlab/'}
  4 +
  5 +projects_json = [{"id": 32,
  6 + "description": "Test Gitlab",
  7 + "default_branch": "master",
  8 + "public": True,
  9 + "archived": False,
  10 + "visibility_level": 20,
  11 + "ssh_url_to_repo": "git@localhost/gitlabhq.git",
  12 + "http_url_to_repo": "localhost/gitlabhq.git",
  13 + "web_url": "localhost/gitlabhq",
  14 + "name": "Gitlab",
  15 + "name_with_namespace": "Test / Gitlab",
  16 + "path": "gitlabhq"}]
  17 +
  18 +groups_json = [{"id": 23,
  19 + "name": "Group 1",
  20 + "path": "group-1",
  21 + "owner_id": None},
  22 + {"id": 27,
  23 + "name": "Group 2",
  24 + "path": "group-2",
  25 + "owner_id": None}]
  26 +
  27 +merge_json = [{"id": 7,
  28 + "iid": 1,
  29 + "project_id": 14,
  30 + "title": "Merge Title",
  31 + "description": "description",
  32 + "state": "merged",
  33 + "created_at": "2014-10-24T12:05:55.659Z",
  34 + "updated_at": "2014-10-24T12:06:15.572Z",
  35 + "target_branch": "master",
  36 + "source_branch": "settings_fix",
  37 + "upvotes": 0,
  38 + "downvotes": 0,
  39 + "author": {"name": "user",
  40 + "username": "user",
  41 + "id": 8,
  42 + "state": "active",
  43 + "avatar_url": "localhost"},
  44 + "assignee": {"name": "user",
  45 + "username": "user",
  46 + "id": 8,
  47 + "state": "active",
  48 + "avatar_url": "localhost"},
  49 + "source_project_id": 14,
  50 + "target_project_id": 14,
  51 + "labels": [],
  52 + "milestone": None}]
... ...
colab/plugins/gitlab/tests/test_data_api.py
1 1 from django.test import TestCase
2   -from colab.plugins.gitlab.data_api import GitlabDataAPI
  2 +from ..data_api import GitlabDataAPI
  3 +from colab.plugins.gitlab.models import GitlabProject
3 4 from mock import patch
  5 +import data
4 6  
5 7  
6 8 class GitlabDataApiTest(TestCase):
7 9  
8   - data = {'menu_title': None,
9   - 'private_token': 'token',
10   - 'upstream': 'localhost/gitlab/'}
  10 + proxied_app = data.proxied_app
  11 + projects_json = data.projects_json
  12 + groups_json = data.groups_json
  13 + merge_json = data.merge_json
11 14  
12 15 def setUp(self):
13 16 self.api = GitlabDataAPI()
... ... @@ -15,14 +18,48 @@ class GitlabDataApiTest(TestCase):
15 18 def tearDown(self):
16 19 pass
17 20  
18   - @patch.dict('django.conf.settings.PROXIED_APPS', gitlab=data)
  21 + @patch.dict('django.conf.settings.PROXIED_APPS', gitlab=proxied_app)
19 22 def test_resquest_url(self):
20 23 url = self.api.get_request_url('/test/')
21 24 expected = 'localhost/gitlab/test/?private_token=token'
22 25 self.assertEqual(url, expected)
23 26  
24   - @patch.dict('django.conf.settings.PROXIED_APPS', gitlab=data)
  27 + @patch.dict('django.conf.settings.PROXIED_APPS', gitlab=proxied_app)
25 28 def test_resquest_url_with_params(self):
26 29 url = self.api.get_request_url('/test/', param='param')
27 30 expected = 'localhost/gitlab/test/?private_token=token&param=param'
28 31 self.assertEqual(url, expected)
  32 +
  33 + @patch.object(GitlabDataAPI, 'get_json_data')
  34 + def test_fetch_projects(self, mock_json):
  35 + mock_json.side_effect = [self.projects_json, []]
  36 +
  37 + projects = self.api.fetch_projects()
  38 + self.assertEqual(len(projects), 1)
  39 +
  40 + self.assertEqual(projects[0].description, "Test Gitlab")
  41 + self.assertEqual(projects[0].public, True)
  42 +
  43 + @patch.object(GitlabDataAPI, 'get_json_data')
  44 + def test_fetch_groups(self, mock_json):
  45 + mock_json.side_effect = [self.groups_json, []]
  46 +
  47 + groups = self.api.fetch_groups()
  48 + self.assertEqual(len(groups), 2)
  49 + self.assertEqual(groups[0].name, "Group 1")
  50 + self.assertEqual(groups[1].name, "Group 2")
  51 +
  52 + self.assertEqual(groups[0].path, "group-1")
  53 + self.assertEqual(groups[1].path, "group-2")
  54 +
  55 + @patch.object(GitlabDataAPI, 'get_json_data')
  56 + def test_fetch_merge(self, mock_json):
  57 + mock_json.side_effect = [self.groups_json, []]
  58 +
  59 + merges = self.api.fetch_merge_request([GitlabProject()])
  60 + print merges[0].title
  61 + print merges[1].title
  62 + self.assertEqual(len(merges), 1)
  63 + self.assertEqual(merges[0].title, "Merge Title")
  64 + self.assertEqual(merges[0].description, "description")
  65 + self.assertEqual(merges[0].user.username, "user")
... ...