package se.bjurr.prnfb.service; import static com.google.common.base.Charsets.UTF_8; import static org.assertj.core.api.Assertions.assertThat; import static se.bjurr.prnfb.service.PrnfbVariable.EVERYTHING_URL; import static se.bjurr.prnfb.service.PrnfbVariable.PULL_REQUEST_DESCRIPTION; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.util.Map; import org.junit.Test; import com.atlassian.bitbucket.pull.PullRequest; import com.atlassian.bitbucket.repository.RepositoryService; import com.atlassian.bitbucket.server.ApplicationPropertiesService; import com.atlassian.bitbucket.user.ApplicationUser; import com.atlassian.bitbucket.user.SecurityService; import com.google.common.base.Supplier; import com.google.common.io.Files; import com.google.common.io.Resources; import se.bjurr.prnfb.http.ClientKeyStore; import se.bjurr.prnfb.listener.PrnfbPullRequestAction; import se.bjurr.prnfb.settings.PrnfbNotification; public class PrnfbVariableTest { private ApplicationUser applicationUser; private ClientKeyStore clientKeyStore; private PrnfbNotification prnfbNotification; private ApplicationPropertiesService propertiesService; private PullRequest pullRequest; private PrnfbPullRequestAction pullRequestAction; private RepositoryService repositoryService; private SecurityService securityService; private boolean shouldAcceptAnyCertificate; private Map<PrnfbVariable, Supplier<String>> variables; private File findReadme(File file) { File candidate = new File(file.getAbsolutePath() + "/README.md"); if (candidate.exists()) { return candidate; } return findReadme(file.getParentFile()); } @Test public void testThatAdminAndReadmeContainsVariables() throws IOException, URISyntaxException { URL adminResource = Resources.getResource("admin.vm"); String adminPageContent = Resources.toString(adminResource, UTF_8); File readme = findReadme(new File(adminResource.toURI())); String readmeContent = Files.toString(readme, UTF_8); for (PrnfbVariable variable : PrnfbVariable.values()) { assertThat(adminPageContent) // .as("admin.vm should include " + variable.name() + "\nWas:" + adminPageContent) // .contains(variable.name()); assertThat(readmeContent) // .as("README.md should include " + variable.name() + "\nWas:" + readmeContent) // .contains(variable.name()); } } @Test public void testThatEverythingVariableIsResolvedToEveryOtherVariable() { String actual = EVERYTHING_URL.resolve( pullRequest, pullRequestAction, applicationUser, repositoryService, propertiesService, prnfbNotification, variables, clientKeyStore, shouldAcceptAnyCertificate, securityService); for (PrnfbVariable v : PrnfbVariable.values()) { if (v != EVERYTHING_URL && v != PULL_REQUEST_DESCRIPTION) { assertThat(actual) // .containsOnlyOnce(v.name() + "=\\${" + v.name() + "}") // .doesNotContain(EVERYTHING_URL.name()); } } } }