/* * Copyright 2016 ThoughtWorks, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.thoughtworks.go.config; import com.thoughtworks.go.domain.materials.ValidationBean; import static org.hamcrest.Matchers.is; import static org.hamcrest.core.StringContains.containsString; import com.thoughtworks.go.server.messaging.SendEmailMessage; import org.jmock.Expectations; import static org.jmock.Expectations.same; import org.jmock.Mockery; import org.jmock.integration.junit4.JMock; import static org.junit.Assert.assertThat; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JMock.class) public class BackgroundEmailSenderTest { GoMailSender neverReturns = new GoMailSender() { public ValidationBean send(String subject, String body, String to) { try { Thread.sleep(10000000); } catch (InterruptedException e) { } return null; } public ValidationBean send(SendEmailMessage message) { return send(message.getSubject(), message.getBody(), message.getTo()); } }; private Mockery mockery; private GoMailSender sender; @Before public void setUp() { mockery = new Mockery(); sender = mockery.mock(GoMailSender.class); } @Test public void shouldReturnNotValidIfSendingTimesout() { BackgroundMailSender background = new BackgroundMailSender(neverReturns, 1); ValidationBean validationBean = background.send("Subject", "body", "to@someone"); assertThat(validationBean.isValid(), is(false)); assertThat(validationBean.getError(), containsString("Failed to send an email. Please check the GoCD server logs for any extra information that might be present.")); } @Test public void shouldReturnWhateverTheOtherSenderReturnsIfSendingDoesNotTimeout() { final ValidationBean validationBean = ValidationBean.valid(); mockery.checking(new Expectations() { { one(sender).send("Subject", "body", "to@someone"); will(returnValue(validationBean)); } }); BackgroundMailSender background = new BackgroundMailSender(sender, 1000); ValidationBean returned = background.send("Subject", "body", "to@someone"); assertThat(returned, same(validationBean)); } }