package tv.dyndns.kishibe.qmaclone.server.image;
import static com.google.common.truth.Truth.assertThat;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import tv.dyndns.kishibe.qmaclone.client.game.ProblemType;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketImageLink;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketProblem;
import tv.dyndns.kishibe.qmaclone.server.testing.QMACloneTestEnv;
import com.google.guiceberry.junit4.GuiceBerryRule;
import com.google.gwt.thirdparty.guava.common.collect.Lists;
import com.google.inject.Inject;
@RunWith(JUnit4.class)
public class ImageLinkCheckerTest {
private static final String IMAGE_URL_OK = "https://www.google.co.jp/images/nav_logo170_hr.png";
private static final String IMAGE_URL_NOT_FOUND = "https://www.google.co.jp/logo.png";
private static final String IMAGE_URL_MALFORMED = "this is a malformed url";
private static final String IMAGE_URL_UNKNOWN_HOST = "http://www.okayamamokei.com/logo.png";
private static final int PROBLEM_ID = -111111;
@Rule
public final GuiceBerryRule rule = new GuiceBerryRule(QMACloneTestEnv.class);
@Inject
private ImageLinkChecker imageLinkChecker;
@Before
public void setUp() throws Exception {
}
@Test
public void processWorksWithStatusCodeOk() {
imageLinkChecker.process(createProblem(IMAGE_URL_OK));
assertThat(imageLinkChecker.getImageLinks()).isEmpty();
}
@Test
public void processWorksWithStatusCodeNotFound() {
imageLinkChecker.process(createProblem(IMAGE_URL_NOT_FOUND));
PacketImageLink expectedImageLink = new PacketImageLink();
expectedImageLink.problemId = PROBLEM_ID;
expectedImageLink.url = IMAGE_URL_NOT_FOUND;
expectedImageLink.statusCode = 404;
assertThat(imageLinkChecker.getImageLinks()).isEqualTo(Lists.newArrayList(expectedImageLink));
}
@Test
public void processWorksWithMalformedUrl() {
imageLinkChecker.process(createProblem(IMAGE_URL_MALFORMED));
PacketImageLink expectedImageLink = new PacketImageLink();
expectedImageLink.problemId = PROBLEM_ID;
expectedImageLink.url = IMAGE_URL_MALFORMED;
expectedImageLink.statusCode = ImageLinkChecker.STATUS_CODE_MALFORMED_URL_EXCEPTION;
assertThat(imageLinkChecker.getImageLinks()).isEqualTo(Lists.newArrayList(expectedImageLink));
}
@Test
public void processWorksWithUnknownHost() {
imageLinkChecker.process(createProblem(IMAGE_URL_UNKNOWN_HOST));
PacketImageLink expectedImageLink = new PacketImageLink();
expectedImageLink.problemId = PROBLEM_ID;
expectedImageLink.url = IMAGE_URL_UNKNOWN_HOST;
expectedImageLink.statusCode = ImageLinkChecker.STATUS_CODE_DOWNLOAD_FAILURE;
assertThat(imageLinkChecker.getImageLinks()).isEqualTo(Lists.newArrayList(expectedImageLink));
}
@Test
public void processReturnsMultipleImageLinks() {
imageLinkChecker.process(createProblem(IMAGE_URL_NOT_FOUND));
imageLinkChecker.process(createProblem(IMAGE_URL_NOT_FOUND));
PacketImageLink expectedImageLink = new PacketImageLink();
expectedImageLink.problemId = PROBLEM_ID;
expectedImageLink.url = IMAGE_URL_NOT_FOUND;
expectedImageLink.statusCode = 404;
assertThat(imageLinkChecker.getImageLinks()).isEqualTo(
Lists.newArrayList(expectedImageLink, expectedImageLink));
}
private static PacketProblem createProblem(String url) {
PacketProblem problem = new PacketProblem();
problem.id = PROBLEM_ID;
problem.type = ProblemType.Click;
problem.choices = new String[] { url };
return problem;
}
}