def test_with_revision_addressees(self): project = self.create_project() db.session.add( ProjectOption(project=project, name='mail.notify-author', value='1')) db.session.add( ProjectOption(project=project, name='mail.notify-addresses-revisions', value='[email protected], [email protected]')) author = self.create_author('*****@*****.**') author_recipient = '{0} <{1}>'.format(author.name, author.email) patch = self.create_patch(repository=project.repository) source = self.create_source(project, patch=patch) patch_build = self.create_build( project=project, source=source, author=author, result=Result.failed, ) db.session.commit() patch_recipients = MailNotificationHandler().get_build_recipients( patch_build) assert patch_recipients == [author_recipient] ss_build = self.create_build( project=project, result=Result.failed, author=author, tags=['test-snapshot'], ) ss_recipients = MailNotificationHandler().get_build_recipients( ss_build) assert ss_recipients == [author_recipient] commit_build = self.create_build( project=project, result=Result.failed, author=author, tags=['commit'], ) commit_recipients = MailNotificationHandler().get_build_recipients( commit_build) assert commit_recipients == [ author_recipient, '*****@*****.**', '*****@*****.**', ]
def test_with_revision_addressees(self): db.session.add( ProjectOption(project=self.project, name='mail.notify-author', value='1')) db.session.add( ProjectOption(project=self.project, name='mail.notify-addresses-revisions', value='[email protected], [email protected]')) author = self.create_author('*****@*****.**') patch = Patch( repository=self.repo, project=self.project, label='foo', diff='', ) source = self.create_source(self.project, patch=patch) build = self.create_build( project=self.project, source=source, author=author, result=Result.failed, ) job = self.create_job(build=build) db.session.commit() handler = MailNotificationHandler() recipients = handler.get_recipients(job) assert recipients == ['{0} <*****@*****.**>'.format(author.name)] build = self.create_build( project=self.project, result=Result.failed, author=author, ) job = self.create_job(build=build) job_finished_handler(job) handler = MailNotificationHandler() recipients = handler.get_recipients(job) assert recipients == [ '{0} <*****@*****.**>'.format(author.name), '*****@*****.**', '*****@*****.**', ]
def test_with_addressees(self): db.session.add( ProjectOption(project=self.project, name='mail.notify-author', value='1')) db.session.add( ProjectOption(project=self.project, name='mail.notify-addresses', value='[email protected], [email protected]')) author = self.create_author('*****@*****.**') build = self.create_build(self.project, result=Result.failed, author=author) job = self.create_job(build) db.session.commit() handler = MailNotificationHandler() recipients = handler.get_recipients(job) assert recipients == [ '{0} <*****@*****.**>'.format(author.name), '*****@*****.**', '*****@*****.**', ]
def test_simple(self): project = self.project plan = self.create_plan() plan.projects.append(project) build = self.create_build(project) job = self.create_job(build) self.create_job_plan(job, plan) db.session.add( ItemOption( item_id=plan.id, name='mail.notify-author', value='0', )) db.session.add( ProjectOption( project_id=project.id, name='mail.notify-author', value='1', )) db.session.add( ProjectOption( project_id=project.id, name='mail.notify-addresses', value='*****@*****.**', )) db.session.commit() handler = MailNotificationHandler() assert handler.get_job_options(job) == { 'mail.notify-addresses': '*****@*****.**', 'mail.notify-author': '0', }
def test_multiple_sources(self, get_recipients): project = self.create_project(name='test', slug='test') build = self.create_build(project, target='D1234') job = self.create_job(build=build, result=Result.failed) phase = self.create_jobphase(job=job) step = self.create_jobstep(phase=phase) logsource = self.create_logsource( step=step, name='console', ) self.create_logchunk( source=logsource, text='hello world', ) phase2 = self.create_jobphase(job=job, label='other') step2 = self.create_jobstep(phase=phase2) logsource2 = self.create_logsource( step=step2, name='other', ) self.create_logchunk( source=logsource2, text='hello world', ) job_link = 'http://example.com/projects/test/builds/%s/jobs/%s/' % ( build.id.hex, job.id.hex, ) log_link1 = '%slogs/%s/' % (job_link, logsource.id.hex) log_link2 = '%slogs/%s/' % (job_link, logsource2.id.hex) get_recipients.return_value = [ '*****@*****.**', 'Bob <*****@*****.**>' ] handler = MailNotificationHandler() handler.send(job, None) assert len(self.outbox) == 1 msg = self.outbox[0] assert msg.subject == '%s FAILED - %s %s #%s.%s' % ( job.build.target, job.project.name, job.build.label, job.build.number, job.number) assert msg.recipients == ['*****@*****.**', 'Bob <*****@*****.**>'] assert msg.extra_headers[ 'Reply-To'] == '[email protected], Bob <*****@*****.**>' assert job_link in msg.html assert job_link in msg.body assert log_link1 in msg.html assert log_link1 in msg.body assert log_link2 in msg.html assert log_link2 in msg.body assert msg.as_string()
def test_subject_branch(self, get_recipients): project = self.create_project(name='test', slug='test') repo = project.repository branches = ['master', 'branch1'] branch_str = ' (%s)' % ','.join(branches) revision = self.create_revision(repository=repo, branches=branches) source = self.create_source( project=project, revision=revision, ) build = self.create_build( project=project, source=source, label='Test diff', target='D1234', ) job = self.create_job(build=build, result=Result.failed) phase = self.create_jobphase(job=job) step = self.create_jobstep(phase=phase) logsource = self.create_logsource( step=step, name='console', ) self.create_logchunk( source=logsource, text='hello world', ) job_link = 'http://example.com/projects/test/builds/%s/jobs/%s/' % ( build.id.hex, job.id.hex, ) log_link = '%slogs/%s/' % (job_link, logsource.id.hex) get_recipients.return_value = [ '*****@*****.**', 'Bob <*****@*****.**>' ] handler = MailNotificationHandler() handler.send(job, None) assert len(self.outbox) == 1 msg = self.outbox[0] assert msg.subject == '%s FAILED - %s%s %s #%s.%s' % ( job.build.target, job.project.name, branch_str, job.build.label, job.build.number, job.number) assert msg.recipients == ['*****@*****.**', 'Bob <*****@*****.**>'] assert msg.extra_headers[ 'Reply-To'] == '[email protected], Bob <*****@*****.**>' assert job_link in msg.html assert job_link in msg.body assert log_link in msg.html assert log_link in msg.body assert msg.as_string()
def test_default_options(self): project = self.create_project() author = self.create_author('*****@*****.**') build = self.create_build(project, result=Result.failed, author=author) handler = MailNotificationHandler() recipients = handler.get_build_recipients(build) assert recipients == ['{0} <*****@*****.**>'.format(author.name)]
def test_default_options(self): author = self.create_author('*****@*****.**') build = self.create_build(self.project, result=Result.passed, author=author) job = self.create_job(build) handler = MailNotificationHandler() recipients = handler.get_recipients(job) assert recipients == ['{0} <*****@*****.**>'.format(author.name)]
def test_diff_all_failed(self): project = self.create_project() db.session.add( ProjectOption(project=project, name='mail.notify-author', value='1')) db.session.add( ProjectOption(project=project, name='mail.notify-addresses-revisions', value='[email protected], [email protected]')) author = self.create_author('*****@*****.**') author_recipient = '{0} <{1}>'.format(author.name, author.email) patch_build = self.create_build( project=project, source=self.create_source( project, patch=self.create_patch(repository=project.repository)), author=author, result=Result.failed, ) project2 = self.create_project() db.session.add( ProjectOption(project=project2, name='mail.notify-author', value='0')) db.session.add( ProjectOption(project=project2, name='mail.notify-addresses-revisions', value='[email protected], [email protected]')) author2 = self.create_author('*****@*****.**') author2_recipient = '{0} <{1}>'.format(author2.name, author2.email) patch_build2 = self.create_build( project=project2, source=self.create_source( project2, patch=self.create_patch(repository=project2.repository)), author=author2, result=Result.failed, ) db.session.commit() mock_context = mock.Mock(builds=[{ 'build': patch_build }, { 'build': patch_build2 }]) recipients = MailNotificationHandler().get_collection_recipients( mock_context) assert recipients == [author_recipient]
def test_with_revision_addressees(self): project = self.create_project() db.session.add( ProjectOption(project=project, name='mail.notify-author', value='1')) db.session.add( ProjectOption(project=project, name='mail.notify-addresses-revisions', value='[email protected], [email protected]')) author = self.create_author('*****@*****.**') patch = self.create_patch(repository=project.repository) source = self.create_source(project, patch=patch) build = self.create_build( project=project, source=source, author=author, result=Result.failed, ) db.session.commit() handler = MailNotificationHandler() recipients = handler.get_build_recipients(build) assert recipients == ['{0} <*****@*****.**>'.format(author.name)] build = self.create_build( project=project, result=Result.failed, author=author, ) handler = MailNotificationHandler() recipients = handler.get_build_recipients(build) assert recipients == [ '{0} <*****@*****.**>'.format(author.name), '*****@*****.**', '*****@*****.**', ]
def test_without_author_option(self): project = self.create_project() db.session.add( ProjectOption(project=project, name='mail.notify-author', value='0')) author = self.create_author('*****@*****.**') build = self.create_build(project, result=Result.failed, author=author) db.session.commit() handler = MailNotificationHandler() recipients = handler.get_build_recipients(build) assert recipients == []
def get(self, job_id): job = Job.query.get(job_id) assert job handler = MailNotificationHandler() parent = handler.get_parent(job) context = handler.get_context(job, parent) html_content = Markup(toronado.from_string( render_template('listeners/mail/notification.html', **context) )) return render_template('debug/email.html', html_content=html_content)
def get(self, build_id): build = Build.query.get(build_id) assert build, 'There is no build for {}'.format(build_id) builds = list( Build.query.filter(Build.collection_id == build.collection_id)) notification_handler = MailNotificationHandler() context = notification_handler.get_collection_context(builds) msg = notification_handler.get_msg(context) return render_template( 'debug/email.html', recipients=msg.recipients, subject=msg.subject, text_content=msg.body, html_content=msg.html, )
def test_simple(self): project = self.create_project() plan = self.create_plan(project) build = self.create_build(project, result=Result.failed) job = self.create_job(build, result=Result.failed) db.session.add( ItemOption( item_id=plan.id, name='mail.notify-author', value='0', )) db.session.add( ProjectOption( project_id=project.id, name='mail.notify-author', value='1', )) db.session.add( ProjectOption( project_id=project.id, name='mail.notify-addresses', value='*****@*****.**', )) db.session.flush() self.create_job_plan(job, plan) db.session.commit() handler = MailNotificationHandler() assert handler.get_build_options(build) == { 'mail.notify-addresses': {'*****@*****.**'}, 'mail.notify-addresses-revisions': set(), 'mail.notify-author': False, }
def test_multiple_jobs(self): project = self.create_project() build = self.create_build(project, result=Result.failed) job1 = self.create_job(build, result=Result.failed) job2 = self.create_job(build, result=Result.failed) plan1 = self.create_plan(project) plan2 = self.create_plan(project) # Plan1 options. db.session.add( ItemOption( item_id=plan1.id, name='mail.notify-addresses', value='*****@*****.**', )) db.session.add( ItemOption( item_id=plan1.id, name='mail.notify-author', value='0', )) # Plan2 options. db.session.add( ItemOption( item_id=plan2.id, name='mail.notify-addresses', value='*****@*****.**', )) db.session.add( ItemOption( item_id=plan2.id, name='mail.notify-author', value='1', )) # Project options (notify-author is set to test that plan options can # override it). db.session.add( ProjectOption( project_id=project.id, name='mail.notify-author', value='0', )) # Set notify addresses to verify that it is not used when all jobs # override it. db.session.add( ProjectOption( project_id=project.id, name='mail.notify-addresses', value='*****@*****.**', )) db.session.flush() for job, plan in [(job1, plan1), (job2, plan2)]: self.create_job_plan(job, plan) db.session.commit() handler = MailNotificationHandler() assert handler.get_build_options(build) == { 'mail.notify-addresses': {'*****@*****.**', '*****@*****.**'}, 'mail.notify-addresses-revisions': set(), 'mail.notify-author': True, }