def test_headers_not_master_event(self, mock_g, mock_valid_sign, mock_request_get): """ Test the view by sending a valid event. """ mock_request_get.return_value.json.return_value = { "hooks": ['0.0.0.0'] } self.app.config['INSTALL_FOLDER'] = gettempdir() data = {'ref': 'refs/heads/not_master'} sig = generate_signature( str(json.dumps(data)).encode('utf-8'), g.github['ci_key']) headers = generate_git_api_header('push', sig) with self.app.test_client() as client: response = client.post('/deploy', environ_overrides=WSGI_ENVIRONMENT, data=json.dumps(data), headers=headers) self.assertEqual(response.status_code, 200) self.assertIn('Not master', str(response.data)) mock_valid_sign.assert_called_once() mock_g.log.warning.assert_not_called() mock_request_get.assert_called_once_with('https://api.github.com/meta')
def generate_header(data, event): """ Generate headers for various REST methods. :param data: payload for the event :type data: dict :param event: the GitHub event to be triggered :type event: str """ sig = generate_signature(str(json.dumps(data)).encode('utf-8'), g.github['ci_key']) headers = generate_git_api_header(event, sig) return headers
def test_headers_missing_User_Agent(self, mock_request_get): """Test missing User-Agent header.""" mock_request_get.return_value.json.return_value = { "hooks": ['0.0.0.0'] } sig = generate_signature( str(json.dumps({})).encode('utf-8'), g.github['ci_key']) headers = generate_git_api_header('push', sig) headers.remove('User-Agent') response = self.app.test_client().post( '/deploy', headers=headers, environ_overrides=WSGI_ENVIRONMENT) self.assertEqual(response.status_code, 418)
def test_headers_ping(self, mock_request_get): """Test The View by sending a ping request.""" mock_request_get.return_value.json.return_value = { "hooks": ['0.0.0.0'] } sig = generate_signature( str(json.dumps({})).encode('utf-8'), g.github['ci_key']) headers = generate_git_api_header('ping', sig) response = self.app.test_client().post( '/deploy', headers=headers, environ_overrides=WSGI_ENVIRONMENT) self.assertEqual(response.status_code, 200) self.assertIn("Hi", str(response.data))
def test_webhook_prerelease(self, mock_request): """ Check webhook release update CCExtractor Version for prerelease. """ with self.app.test_client() as c: # Full Release with version with 2.1 data = {'action': 'prereleased', 'release': {'prerelease': True, 'published_at': '2018-05-30T20:18:44Z', 'tag_name': 'v2.1'}} sig = generate_signature(str(json.dumps(data)).encode('utf-8'), g.github['ci_key']) headers = generate_git_api_header('release', sig) last_commit = GeneralData.query.filter(GeneralData.key == 'last_commit').first() # abcdefgh is the new commit after previous version defined in base.py last_commit.value = 'abcdefgh' g.db.commit() response = c.post( '/start-ci', environ_overrides=WSGI_ENVIRONMENT, data=json.dumps(data), headers=self.generate_header(data, 'ping')) last_release = CCExtractorVersion.query.order_by(CCExtractorVersion.released.desc()).first() self.assertNotEqual(last_release.version, '2.1')
def test_headers_valid_event(self, mock_open, mock_copy, mock_subprocess, mock_valid_sign, mock_repo, mock_request_get): """ Test the view by sending a valid event. """ mock_request_get.return_value.json.return_value = { "hooks": ['0.0.0.0'] } self.app.config['INSTALL_FOLDER'] = gettempdir() data = {'ref': 'refs/heads/master'} sig = generate_signature( str(json.dumps(data)).encode('utf-8'), g.github['ci_key']) headers = generate_git_api_header('push', sig) # set return for mock_repo class mock_pull: from collections import namedtuple flags = 128 commit_obj = namedtuple('commit_obj', ['hexsha']) commit = commit_obj('somesha') mock_repo.return_value.remote.return_value.fetch.return_value = "valid fetch" mock_repo.return_value.remote.return_value.pull.return_value = [ mock_pull ] with self.app.test_client() as client: response = client.post('/deploy', environ_overrides=WSGI_ENVIRONMENT, data=json.dumps(data), headers=headers) self.assertEqual(response.status_code, 200) mock_repo.assert_called_once() mock_open.assert_called_once_with('build_commit.py', 'w') mock_copy.assert_called_once() mock_subprocess.assert_called_once_with( ["sudo", "service", "platform", "reload"]) self.assertIn("somesha", response.data.decode('utf-8'))