def test_normal(self): headers = {'X-Github-Event': 'pull_request'} payload = { 'action': 'opened', 'repository': { 'owner': {'login': '******'}, 'name': 'repo', 'full_name': 'owner/repo' }, 'pull_request': { 'head': { 'sha': 'sha', 'repo': { 'owner': {'login': '******'}, 'name': 'pull_repo', 'full_name': 'pull_owner/pull_repo' } }, 'url': 'github_pr_url' } } library = Library(id='owner/repo') library.put() self.respond_to('https://api.github.com/repos/owner/repo/statuses', {'status': 201}) self.app.post('/api/preview-event', params=json.dumps(payload), headers=headers, status=200) tasks = self.tasks.get_filtered_tasks() self.assertEqual(len(tasks), 1)
def test_renamed_repo_is_renamed(self): library = Library(id='org/repo', metadata_etag='a', contributors_etag='b', tags_etag='c', tag_map='{}', spdx_identifier='MIT') library.put() self.respond_to_github( 'https://api.github.com/repos/org/repo', json.dumps({ "name": "newname", "owner": { "login": "******" }, })) response = self.app.get('/task/update/org/repo', headers={'X-AppEngine-QueueName': 'default'}) self.assertEqual(response.status_int, 200) library = library.key.get() self.assertIsNone(library) tasks = self.tasks.get_filtered_tasks() self.assertEqual([ util.ensure_library_task('newowner', 'newname'), ], [task.url for task in tasks])
def test_update_suppressed_is_noop(self): library = Library(id='org/repo', status=Status.suppressed, spdx_identifier='MIT') library.put() response = self.app.get('/task/update/org/repo', headers={'X-AppEngine-QueueName': 'default'}) self.assertEqual(response.status_int, 200) tasks = self.tasks.get_filtered_tasks() self.assertEqual(len(tasks), 0) library = library.key.get() self.assertEqual(library.status, Status.suppressed)
def test_update_suppressed_is_noop(self): library = Library(id='org/repo', status=Status.suppressed, spdx_identifier='MIT') library.put() response = self.app.get('/task/update/org/repo', headers={'X-AppEngine-QueueName': 'default'}) self.assertEqual(response.status_int, 200) tasks = self.tasks.get_filtered_tasks() self.assertEqual(len(tasks), 0) library = library.key.get() self.assertEqual(library.status, Status.suppressed)
def test_update_respects_304(self): library = Library(id='org/repo', metadata_etag='a', contributors_etag='b', tags_etag='c', tag_map='{}', spdx_identifier='MIT') library.put() self.respond_to_github('https://api.github.com/repos/org/repo', {'status': 304}) self.respond_to_github('https://api.github.com/repos/org/repo/contributors', {'status': 304}) self.respond_to_github('https://api.github.com/repos/org/repo/tags', {'status': 304}) self.respond_to_github('https://api.github.com/repos/org/repo/stats/participation', '{}') response = self.app.get('/task/update/org/repo', headers={'X-AppEngine-QueueName': 'default'}) self.assertEqual(response.status_int, 200) tasks = self.tasks.get_filtered_tasks() self.assertEqual(len(tasks), 0)
def test_update_respects_304(self): library = Library(id='org/repo', metadata_etag='a', contributors_etag='b', tags_etag='c', tag_map='{}', spdx_identifier='MIT') library.put() self.respond_to_github('https://api.github.com/repos/org/repo', {'status': 304}) self.respond_to_github('https://api.github.com/repos/org/repo/contributors', {'status': 304}) self.respond_to_github('https://api.github.com/repos/org/repo/tags', {'status': 304}) self.respond_to_github('https://api.github.com/repos/org/repo/stats/participation', '{}') response = self.app.get('/task/update/org/repo', headers={'X-AppEngine-QueueName': 'default'}) self.assertEqual(response.status_int, 200) tasks = self.tasks.get_filtered_tasks() self.assertEqual(len(tasks), 0)
def test_update_deletes_missing_repo(self): library = Library(id='org/repo', metadata_etag='a', contributors_etag='b', tags_etag='c', spdx_identifier='MIT') library.put() version = Version(parent=library.key, id='v1.0.0', sha='lol') version.put() self.respond_to_github('https://api.github.com/repos/org/repo', {'status': 404}) response = self.app.get('/task/update/org/repo', headers={'X-AppEngine-QueueName': 'default'}) self.assertEqual(response.status_int, 200) version = version.key.get() library = library.key.get() self.assertIsNone(library) self.assertIsNone(version)
def test_update_deletes_missing_repo(self): library = Library(id='org/repo', metadata_etag='a', contributors_etag='b', tags_etag='c', spdx_identifier='MIT') library.put() version = Version(parent=library.key, id='v1.0.0', sha='lol') version.put() self.respond_to_github('https://api.github.com/repos/org/repo', {'status': 404}) response = self.app.get('/task/update/org/repo', headers={'X-AppEngine-QueueName': 'default'}) self.assertEqual(response.status_int, 200) version = version.key.get() library = library.key.get() self.assertIsNone(library) self.assertIsNone(version)
def test_renamed_repo_is_renamed(self): library = Library(id='org/repo', metadata_etag='a', contributors_etag='b', tags_etag='c', tag_map='{}', spdx_identifier='MIT') library.put() self.respond_to_github('https://api.github.com/repos/org/repo', json.dumps({ "name": "newname", "owner": {"login": "******"}, })) response = self.app.get('/task/update/org/repo', headers={'X-AppEngine-QueueName': 'default'}) self.assertEqual(response.status_int, 200) library = library.key.get() self.assertIsNone(library) tasks = self.tasks.get_filtered_tasks() self.assertEqual([ util.ensure_library_task('newowner', 'newname'), ], [task.url for task in tasks])
def test_ingest_version_falls_back(self): library = Library(id='org/repo', metadata='{"full_name": "NSS Bob", "stargazers_count": 420, "subscribers_count": 419, "forks": 418, "updated_at": "2011-8-10T13:47:12Z"}', contributor_count=417) library.tags = json.dumps(["v1.0.0", "v1.0.1"]) library.put() version1 = Version(parent=library.key, id='v1.0.0', sha='lol') version1.put() version2 = Version(parent=library.key, id='v1.0.1', sha='lol') version2.put() self.respond_to('https://raw.githubusercontent.com/org/repo/v1.0.1/README.md', chr(248)) tasks = self.tasks.get_filtered_tasks() self.assertEqual(len(tasks), 0) self.app.get(util.ingest_version_task('org', 'repo', 'v1.0.1'), params={'latestVersion': 'True'}) version2 = version2.key.get() self.assertEqual(version2.error, "Could not store README.md as a utf-8 string") tasks = self.tasks.get_filtered_tasks() self.assertEqual(len(tasks), 1) self.assertEqual(tasks[0].url, util.ingest_version_task('org', 'repo', 'v1.0.0') + '?latestVersion=True')
def test_ingest_version(self): library = Library(id='org/repo', metadata='{"full_name": "NSS Bob", "stargazers_count": 420, "subscribers_count": 419, "forks": 418, "updated_at": "2011-8-10T13:47:12Z"}', contributor_count=417) version = Version(parent=library.key, id='v1.0.0', sha='lol') library.put() version.put() self.respond_to('https://raw.githubusercontent.com/org/repo/v1.0.0/README.md', 'README') self.respond_to('https://raw.githubusercontent.com/org/repo/v1.0.0/bower.json', '{}') self.respond_to_github('https://api.github.com/markdown', '<html>README</html>') response = self.app.get(util.ingest_version_task('org', 'repo', 'v1.0.0')) self.assertEqual(response.status_int, 200) version = version.key.get() self.assertIsNone(version.error) readme = ndb.Key(Library, 'org/repo', Version, 'v1.0.0', Content, 'readme').get() self.assertEqual(readme.content, 'README') readme_html = ndb.Key(Library, 'org/repo', Version, 'v1.0.0', Content, 'readme.html').get() self.assertEqual(readme_html.content, '<html>README</html>') bower = ndb.Key(Library, 'org/repo', Version, 'v1.0.0', Content, 'bower').get() self.assertEqual(bower.content, '{}')
def test_normal(self): headers = {'X-Github-Event': 'pull_request'} payload = { 'action': 'opened', 'repository': { 'owner': { 'login': '******' }, 'name': 'repo', 'full_name': 'owner/repo' }, 'pull_request': { 'head': { 'sha': 'sha', 'repo': { 'owner': { 'login': '******' }, 'name': 'pull_repo', 'full_name': 'pull_owner/pull_repo' } }, 'url': 'github_pr_url' } } library = Library(id='owner/repo') library.put() self.respond_to('https://api.github.com/repos/owner/repo/statuses', {'status': 201}) self.app.post('/api/preview-event', params=json.dumps(payload), headers=headers, status=200) tasks = self.tasks.get_filtered_tasks() self.assertEqual(len(tasks), 1)