def test_simple(self): project = self.create_project() plan = self.create_plan() plan.projects.append(project) build = self.create_build(project) job = self.create_job(build) 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_job_options(job) == { 'mail.notify-addresses': '*****@*****.**', 'mail.notify-author': '0', }
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_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_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_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, }
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_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_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_multiple_sources(self, get_collection_recipients): project = self.create_project(name='test', slug='test') build = self.create_build( project, date_started=datetime.utcnow(), result=Result.failed, ) 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/%s/builds/%s/jobs/%s/' % ( project.slug, 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_collection_recipients.return_value = ['*****@*****.**', 'Bob <*****@*****.**>'] handler = MailNotificationHandler() context = handler.get_collection_context([build]) msg = handler.get_msg(context) handler.send(msg, build) assert len(self.outbox) == 1 msg = self.outbox[0] assert msg.subject == '%s failed - %s' % ( 'D1234', job.build.label) 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_without_author_option(self): db.session.add(ProjectOption(project=self.project, name="mail.notify-author", value="0")) 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 == []
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 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_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_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 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' % ( job.build.target, job.project.name, 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 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 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 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.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_get_subject(self): handler = MailNotificationHandler() self.assertEqual( 'D123 passed - My \u00fcnicode diff', handler.get_subject('D123', 'My \u00fcnicode diff', Result.passed), ) self.assertEqual( 'Build passed - My \u00fcnicode diff', handler.get_subject(None, 'My \u00fcnicode diff', Result.passed), ) self.assertEqual( 'Build passed - My \u00fcnicode diff...', handler.get_subject( None, 'My \u00fcnicode diff\nwith many lines', Result.passed), )
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): 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', value='[email protected], [email protected]')) 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 == [ '{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_simple(self): project = self.create_project() build = self.create_build(project) job = self.create_job(build) logsource = LogSource( project=project, job=job, name='console', ) db.session.add(logsource) logchunk = LogChunk( project=project, job=job, source=logsource, offset=0, size=11, text='hello\nworld\n', ) db.session.add(logchunk) logchunk = LogChunk( project=project, job=job, source=logsource, offset=11, size=11, text='hello\nworld\n', ) db.session.add(logchunk) db.session.commit() handler = MailNotificationHandler() result = handler.get_log_clipping(logsource, max_size=200, max_lines=3) assert result == "world\r\nhello\r\nworld" result = handler.get_log_clipping(logsource, max_size=200, max_lines=1) assert result == "world" result = handler.get_log_clipping(logsource, max_size=5, max_lines=3) assert result == "world"
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, tags=['commit'], ) handler = MailNotificationHandler() recipients = handler.get_build_recipients(build) assert recipients == [ '{0} <*****@*****.**>'.format(author.name), '*****@*****.**', '*****@*****.**', ]
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_simple(self, get_recipients): build = self.create_build(self.project) job = self.create_job(build=build, result=Result.failed) logsource = LogSource(project=self.project, job=job, name="console") db.session.add(logsource) logchunk = LogChunk(project=self.project, job=job, source=logsource, offset=0, size=11, text="hello world") db.session.add(logchunk) 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) db.session.commit() get_recipients.return_value = ["*****@*****.**", "Bob <*****@*****.**>"] handler = MailNotificationHandler() handler.send(job, None) assert len(self.outbox) == 1 msg = self.outbox[0] assert msg.subject == "Build Failed - %s #%s.%s (%s)" % ( job.project.name, job.build.number, job.number, job.build.source.revision_sha, ) assert msg.recipients == ["*****@*****.**", "Bob <*****@*****.**>"] assert msg.extra_headers["Reply-To"] == "[email protected], Bob <*****@*****.**>" print msg.body 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_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_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_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, }