public Modifications since(long sinceId) { Modifications laterRevisions = new Modifications(); for (Modification modification : this) { if (modification.getId() == sinceId) { return laterRevisions; } laterRevisions.add(modification); } throw new RuntimeException(String.format("Could not find modification %s in %s", sinceId, this)); }
public Modifications getModifications(Material material) { for (MaterialRevision revision : revisions) { if (revision.getMaterial().equals(material)) { return revision.getModifications(); } } return new Modifications(); }
public MaterialRevision(Material material, boolean changed, List<Modification> modifications) { bombIfNull(modifications, "modifications cannot be null"); bombIf(modifications.contains(null), "modifications cannot be null"); this.material = material; this.changed = changed; this.modifications = new Modifications(modifications); }
private Revision latestRevision(HgMaterial material, File workingDir, TestSubprocessExecutionContext execCtx) { List<Modification> modifications = material.latestModification(workingDir, execCtx); return new Modifications(modifications).latestRevision(material); } }
private Revision latestRevision(SvnMaterial material, File workingDir, TestSubprocessExecutionContext execCtx) { List<Modification> modifications = material.latestModification(workingDir, execCtx); return new Modifications(modifications).latestRevision(material); }
@Test public void shouldReturnFirstRevision() { Modification modification1 = new Modification(new Date(), "cruise/1.0/dev/1", "MOCK_LABEL-12", null); Modification modification2 = new Modification(new Date(), "cruise/1.0/dev/2", "MOCK_LABEL-12", null); assertThat(new Modifications(modification1, modification2).getRevision(), is("cruise/1.0/dev/1")); }
@Test public void shouldReturnUnknownForEmptyList() { assertThat(new Modifications().getUsername(), is("Unknown")); }
@Test public void shouldGetPackageMaterialAgent() { File workingDirectory = new File("/tmp/workingDirectory"); MaterialRevision revision = new MaterialRevision(new PackageMaterial(), new Modifications()); MaterialAgentFactory factory = new MaterialAgentFactory(null, workingDirectory, null, scmExtension); MaterialAgent agent = factory.createAgent(revision); assertThat(agent, is(NO_OP)); }
@Test public void shouldGetPluggableSCMMaterialAgent() { File workingDirectory = new File("/tmp/workingDirectory"); MaterialRevision revision = new MaterialRevision(new PluggableSCMMaterial(), new Modifications()); MaterialAgentFactory factory = new MaterialAgentFactory(null, workingDirectory, null, scmExtension); MaterialAgent agent = factory.createAgent(revision); assertThat(agent instanceof PluggableSCMMaterialAgent, is(true)); assertThat(ReflectionUtil.getField(agent, "scmExtension"), is(scmExtension)); assertThat(ReflectionUtil.getField(agent, "revision"), is(revision)); assertThat(ReflectionUtil.getField(agent, "workingDirectory"), is(workingDirectory)); } }
@Test public void shouldIgnoreModificationsIfWildcardBlacklist() { HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); Filter filter = new Filter(Arrays.asList(new IgnoredFiles("**/*"))); materialConfig.setFilter(filter); Modifications modifications = new Modifications(multipleCheckin(aCheckIn("100", "a.doc", "a.pdf", "a.java"))); assertThat(modifications.shouldBeIgnoredByFilterIn(materialConfig), is(true)); }
@Test public void shouldHaveModificationsWhenSubmoduleIsAdded() throws Exception { GitSubmoduleRepos submoduleRepos = new GitSubmoduleRepos(temporaryFolder); submoduleRepos.addSubmodule(SUBMODULE, "sub1"); GitMaterial gitMaterial = new GitMaterial(submoduleRepos.mainRepo().getUrl()); File serverWorkingDir = temporaryFolder.newFolder(); List<Modification> beforeAdd = gitMaterial.latestModification(serverWorkingDir, new TestSubprocessExecutionContext()); submoduleRepos.addSubmodule(SUBMODULE, "new-submodule"); List<Modification> afterAdd = gitMaterial.modificationsSince(serverWorkingDir, new Modifications(beforeAdd).latestRevision(gitMaterial), new TestSubprocessExecutionContext()); assertThat(afterAdd.size(), is(1)); assertThat(afterAdd.get(0).getComment(), is("Added submodule new-submodule")); }
@Test public void shouldIgnoreModificationsIfInvertFilterAndSpecificFileNotChanged2() { HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); Filter filter = new Filter(Arrays.asList(new IgnoredFiles("foo/bar.baz"))); materialConfig.setFilter(filter); materialConfig.setInvertFilter(true); Modifications modifications = new Modifications(multipleCheckin(aCheckIn("100", "a.java", "foo", "bar.baz", "foo/bar.qux"))); assertThat(modifications.shouldBeIgnoredByFilterIn(materialConfig), is(true)); }
@Test public void shouldHaveModificationsWhenSubmoduleIsRemoved() throws Exception { GitSubmoduleRepos submoduleRepos = new GitSubmoduleRepos(temporaryFolder); submoduleRepos.addSubmodule(SUBMODULE, "sub1"); GitMaterial gitMaterial = new GitMaterial(submoduleRepos.mainRepo().getUrl()); File serverWorkingDir = temporaryFolder.newFolder(); List<Modification> beforeAdd = gitMaterial.latestModification(serverWorkingDir, new TestSubprocessExecutionContext()); submoduleRepos.removeSubmodule("sub1"); List<Modification> after = gitMaterial.modificationsSince(serverWorkingDir, new Modifications(beforeAdd).latestRevision(gitMaterial), new TestSubprocessExecutionContext()); assertThat(after.size(), is(1)); assertThat(after.get(0).getComment(), is("Removed submodule sub1")); }
@Test public void shouldIgnoreModificationsIfInvertFilterAndEmptyIgnoreList() { HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); Filter filter = new Filter(); materialConfig.setFilter(filter); materialConfig.setInvertFilter(true); Modifications modifications = new Modifications(multipleCheckin(aCheckIn("100", "a.doc", "a.pdf", "a.java"))); assertThat(modifications.shouldBeIgnoredByFilterIn(materialConfig), is(true)); }
@Test public void shouldIncludeModificationsIfInvertFilterAndWildcardBlacklist() { HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); Filter filter = new Filter(Arrays.asList(new IgnoredFiles("**/*"))); materialConfig.setFilter(filter); materialConfig.setInvertFilter(true); Modifications modifications = new Modifications(multipleCheckin(aCheckIn("100", "a.doc", "a.pdf", "a.java"))); assertThat(modifications.shouldBeIgnoredByFilterIn(materialConfig), is(false)); }
@Test public void shouldIncludeModificationsIfInvertFilterAndSpecificIsChanged() { HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); Filter filter = new Filter(Arrays.asList(new IgnoredFiles("foo/bar.baz"))); materialConfig.setFilter(filter); materialConfig.setInvertFilter(true); Modifications modifications = new Modifications(multipleCheckin(aCheckIn("101", "foo/bar.baz"))); assertThat(modifications.shouldBeIgnoredByFilterIn(materialConfig), is(false)); }
@Test public void shouldNotThrowUpWhenAdditionalDataIsRandomJunkAndNotJSON() { PackageMaterial material = new PackageMaterial(); PackageRepository repository = PackageRepositoryMother.create("repo-id", "tw-dev", "pluginid", "version", new Configuration(ConfigurationPropertyMother.create("k1", false, "v1"))); material.setPackageDefinition(PackageDefinitionMother.create("p-id", "go-agent", new Configuration(ConfigurationPropertyMother.create("k2", false, "v2")), repository)); material.setName(new CaseInsensitiveString("tw-dev:go-agent")); Modifications modifications = new Modifications(new Modification("loser", "comment", "email", new Date(), "revision-123", "salkdfjdsa-jjgkj!!!vcxknbvkjk")); EnvironmentVariableContext environmentVariableContext = new EnvironmentVariableContext(); material.populateEnvironmentContext(environmentVariableContext, new MaterialRevision(material, modifications), null); assertThat(environmentVariableContext.getProperty("GO_PACKAGE_TW_DEV_GO_AGENT_LABEL"), is("revision-123")); assertThat(environmentVariableContext.getProperty("GO_REPO_TW_DEV_GO_AGENT_K1"), is("v1")); assertThat(environmentVariableContext.getProperty("GO_PACKAGE_TW_DEV_GO_AGENT_K2"), is("v2")); }
@Test public void shouldUnderstandIfContainsModificationWithSameRevision() { MaterialInstance materialInstance = MaterialsMother.hgMaterial().createMaterialInstance(); final Modification modification = modificationWith(materialInstance, "1"); final Modification sameModification = modificationWith(materialInstance, "1"); final Modification modificationWithDifferentRev = modificationWith(materialInstance, "2"); final Modification modificationWithDifferentMaterial = modificationWith(MaterialsMother.hgMaterial("http://foo.com").createMaterialInstance(), "1"); Modifications modifications = new Modifications(modification); assertThat(modifications.containsRevisionFor(modification), is(true)); assertThat(modifications.containsRevisionFor(sameModification), is(true)); assertThat(modifications.containsRevisionFor(modificationWithDifferentRev), is(false)); assertThat(modifications.containsRevisionFor(modificationWithDifferentMaterial), is(true)); //note that its checking for revision and not material instance }
@Test public void shouldIncludeModificationsIfAnyFileIsNotIgnored() { HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); Filter filter = new Filter(Arrays.asList(new IgnoredFiles("*.doc"), new IgnoredFiles("*.pdf"))); materialConfig.setFilter(filter); Modifications modifications = new Modifications(multipleCheckin(aCheckIn("100", "a.doc", "a.pdf", "a.java"))); assertThat(modifications.shouldBeIgnoredByFilterIn(materialConfig), is(false)); }
@Test public void shouldReturnModificationsForAGivenMaterial() { MaterialRevisions oneMaterialRevision = new MaterialRevisions(new MaterialRevision(material, yesterdayMod)); assertThat(oneMaterialRevision.getModifications(material), is(new Modifications(yesterdayMod))); MaterialRevisions emptyMaterialRevision = new MaterialRevisions(); assertThat(emptyMaterialRevision.getModifications(material).isEmpty(), is(true)); MaterialRevisions differentMaterialRevision = new MaterialRevisions(new MaterialRevision(MaterialsMother.hgMaterial(), yesterdayMod)); assertThat(differentMaterialRevision.getModifications(material).isEmpty(), is(true)); }