def fake_update(): # this simulates the effect of calling update() on a repo, # mainly that `export` and `log` now works. fake_vcs.log.side_effect = log_results fake_vcs.export.side_effect = None fake_vcs.export.return_value = SAMPLE_DIFF_BYTES fake_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files(fake_vcs, id)
def test_invalid_config(self, mock_identify_revision, mock_get_vcs): repo = self.create_repo() revision = self.create_revision(repository=repo) project = self.create_project(repository=repo) project2 = self.create_project(repository=repo) self.create_plan(project) self.create_plan(project2) mock_vcs = self.get_fake_vcs() mock_vcs.export.side_effect = None mock_vcs.export.return_value = SAMPLE_DIFF mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files( mock_vcs, id) mock_vcs.update.side_effect = None mock_identify_revision.return_value = revision mock_vcs.read_file.side_effect = ('{{invalid yaml}}', yaml.safe_dump({ 'build.file-blacklist': ['ci/not-real'], })) mock_get_vcs.return_value = mock_vcs revision_created_handler(revision_sha=revision.sha, repository_id=repo.id) mock_vcs.export.assert_called_once_with(revision.sha) assert len(list(Build.query)) == 2
def test_file_whitelist(self, mock_identify_revision, mock_get_vcs): repo = self.create_repo() revision = self.create_revision(repository=repo) project = self.create_project(repository=repo) self.create_plan(project) option = ProjectOption(project=project, name='build.file-whitelist', value='foo.txt') mock_vcs = self.get_fake_vcs() mock_vcs.export.side_effect = None mock_vcs.export.return_value = SAMPLE_DIFF mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files(mock_vcs, id) mock_vcs.update.side_effect = None mock_identify_revision.return_value = revision mock_get_vcs.return_value = mock_vcs db.session.add(option) db.session.flush() revision_created_handler(revision_sha=revision.sha, repository_id=repo.id) mock_vcs.export.assert_called_once_with(revision.sha) assert not Build.query.first() option.value = 'ci/*' db.session.add(option) db.session.flush() revision_created_handler(revision_sha=revision.sha, repository_id=repo.id) mock_identify_revision.assert_called_once_with(repo, revision.sha) assert Build.query.first()
def test_file_blacklist(self, mock_identify_revision, mock_get_vcs): repo = self.create_repo() revision = self.create_revision(repository=repo) project = self.create_project(repository=repo) self.create_plan(project) mock_vcs = self.get_fake_vcs() mock_vcs.export.side_effect = None mock_vcs.export.return_value = SAMPLE_DIFF mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files(mock_vcs, id) mock_vcs.update.side_effect = None mock_identify_revision.return_value = revision mock_vcs.read_file.side_effect = None mock_vcs.read_file.return_value = yaml.safe_dump({ 'build.file-blacklist': ['ci/*'], }) mock_get_vcs.return_value = mock_vcs revision_created_handler(revision_sha=revision.sha, repository_id=repo.id) mock_vcs.export.assert_called_once_with(revision.sha) assert not Build.query.first() mock_vcs.read_file.return_value = yaml.safe_dump({ 'build.file-blacklist': ['ci/not-real'], }) revision_created_handler(revision_sha=revision.sha, repository_id=repo.id) mock_identify_revision.assert_called_once_with(repo, revision.sha) assert Build.query.first()
def fake_update(): # this simulates the effect of calling update() on a repo, # mainly that `export` and `log` now works. fake_vcs.log.side_effect = log_results fake_vcs.export.side_effect = None fake_vcs.export.return_value = SAMPLE_DIFF_BYTES fake_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files(fake_vcs, id)
def test_file_whitelist(self, mock_identify_revision, mock_get_vcs): repo = self.create_repo() revision = self.create_revision(repository=repo) project = self.create_project(repository=repo) self.create_plan(project) option = ProjectOption(project=project, name='build.file-whitelist', value='foo.txt') mock_vcs = self.get_fake_vcs() mock_vcs.export.side_effect = None mock_vcs.export.return_value = SAMPLE_DIFF mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files( mock_vcs, id) mock_vcs.update.side_effect = None mock_identify_revision.return_value = revision mock_get_vcs.return_value = mock_vcs db.session.add(option) db.session.flush() revision_created_handler(revision_sha=revision.sha, repository_id=repo.id) mock_vcs.export.assert_called_once_with(revision.sha) assert not Build.query.first() option.value = 'ci/*' db.session.add(option) db.session.flush() revision_created_handler(revision_sha=revision.sha, repository_id=repo.id) mock_identify_revision.assert_called_once_with(repo, revision.sha) assert Build.query.first()
def test_get_changed_files_updates_vcs(self): repo = self.create_repo() sha = uuid4().hex revision = self.create_revision(repository=repo, sha=sha) # No updated needed. with patch.object(repo, 'get_vcs') as get_vcs: mock_vcs = self.get_fake_vcs() mock_vcs.export.side_effect = None mock_vcs.export.return_value = SAMPLE_DIFF mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files( mock_vcs, id) mock_vcs.update.side_effect = None get_vcs.return_value = mock_vcs ct = CommitTrigger(revision) ct.get_changed_files() self.assertEqual(list(mock_vcs.method_calls), [ ('exists', (), {}), ('get_changed_files', (sha, ), {}), ('export', (sha, ), {}), ]) # Successful update with patch.object(repo, 'get_vcs') as get_vcs: mock_vcs = self.get_fake_vcs() # Raise first time, work second time. mock_vcs.export.side_effect = (UnknownRevision("", 1), SAMPLE_DIFF) mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files( mock_vcs, id) mock_vcs.update.side_effect = None get_vcs.return_value = mock_vcs ct = CommitTrigger(revision) ct.get_changed_files() self.assertEqual(list(mock_vcs.method_calls), [ ('exists', (), {}), ('get_changed_files', (sha, ), {}), ('export', (sha, ), {}), ('update', (), {}), ('get_changed_files', (sha, ), {}), ('export', (sha, ), {}), ]) # Unsuccessful update with patch.object(repo, 'get_vcs') as get_vcs: mock_vcs = self.get_fake_vcs() mock_vcs.exists.return_value = True # Revision is always unknown. mock_vcs.export.side_effect = UnknownRevision("", 1) mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files( mock_vcs, id) mock_vcs.update.side_effect = None get_vcs.return_value = mock_vcs ct = CommitTrigger(revision) with self.assertRaises(UnknownRevision): ct.get_changed_files() self.assertEqual(list(mock_vcs.method_calls), [ ('exists', (), {}), ('get_changed_files', (sha, ), {}), ('export', (sha, ), {}), ('update', (), {}), ('get_changed_files', (sha, ), {}), ('export', (sha, ), {}), ])
def test_get_changed_files_updates_vcs(self): repo = self.create_repo() sha = uuid4().hex revision = self.create_revision(repository=repo, sha=sha) # No updated needed. with patch.object(repo, 'get_vcs') as get_vcs: mock_vcs = self.get_fake_vcs() mock_vcs.export.side_effect = None mock_vcs.export.return_value = SAMPLE_DIFF mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files(mock_vcs, id) mock_vcs.update.side_effect = None get_vcs.return_value = mock_vcs ct = CommitTrigger(revision) ct.get_changed_files() self.assertEqual(list(mock_vcs.method_calls), [ ('exists', (), {}), ('get_changed_files', (sha,), {}), ('export', (sha,), {}), ]) # Successful update with patch.object(repo, 'get_vcs') as get_vcs: mock_vcs = self.get_fake_vcs() # Raise first time, work second time. mock_vcs.export.side_effect = (UnknownRevision("", 1), SAMPLE_DIFF) mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files(mock_vcs, id) mock_vcs.update.side_effect = None get_vcs.return_value = mock_vcs ct = CommitTrigger(revision) ct.get_changed_files() self.assertEqual(list(mock_vcs.method_calls), [ ('exists', (), {}), ('get_changed_files', (sha,), {}), ('export', (sha,), {}), ('update', (), {}), ('get_changed_files', (sha,), {}), ('export', (sha,), {}), ]) # Unsuccessful update with patch.object(repo, 'get_vcs') as get_vcs: mock_vcs = self.get_fake_vcs() mock_vcs.exists.return_value = True # Revision is always unknown. mock_vcs.export.side_effect = UnknownRevision("", 1) mock_vcs.get_changed_files.side_effect = lambda id: Vcs.get_changed_files(mock_vcs, id) mock_vcs.update.side_effect = None get_vcs.return_value = mock_vcs ct = CommitTrigger(revision) with self.assertRaises(UnknownRevision): ct.get_changed_files() self.assertEqual(list(mock_vcs.method_calls), [ ('exists', (), {}), ('get_changed_files', (sha,), {}), ('export', (sha,), {}), ('update', (), {}), ('get_changed_files', (sha,), {}), ('export', (sha,), {}), ])