Skip to content

Commit

Permalink
Include metadata when cloning projects
Browse files Browse the repository at this point in the history
Signed-off-by: nscuro <[email protected]>
  • Loading branch information
nscuro committed Nov 14, 2023
1 parent 81eebdd commit dddaa18
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import org.dependencytrack.model.ConfigPropertyConstants;
import org.dependencytrack.model.FindingAttribution;
import org.dependencytrack.model.Project;
import org.dependencytrack.model.ProjectMetadata;
import org.dependencytrack.model.ProjectProperty;
import org.dependencytrack.model.ProjectVersion;
import org.dependencytrack.model.ServiceComponent;
Expand Down Expand Up @@ -629,6 +630,15 @@ public Project clone(UUID from, String newVersion, boolean includeTags, boolean
project.setParent(source.getParent());
project = persist(project);

if (source.getMetadata() != null) {
final var metadata = new ProjectMetadata();
metadata.setProject(project);
metadata.setAuthors(source.getMetadata().getAuthors());
metadata.setManufacturer(source.getMetadata().getManufacturer());
metadata.setSupplier(source.getMetadata().getSupplier());
persist(metadata);
}

if (includeTags) {
for (final Tag tag: source.getTags()) {
tag.getProjects().add(project);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@
import org.dependencytrack.model.Component;
import org.dependencytrack.model.ConfigPropertyConstants;
import org.dependencytrack.model.ExternalReference;
import org.dependencytrack.model.OrganizationalContact;
import org.dependencytrack.model.OrganizationalEntity;
import org.dependencytrack.model.Project;
import org.dependencytrack.model.ProjectMetadata;
import org.dependencytrack.model.ProjectProperty;
import org.dependencytrack.model.ServiceComponent;
import org.dependencytrack.model.Tag;
Expand Down Expand Up @@ -816,6 +818,19 @@ public void cloneProjectTest() {
qm.createTag("tag-b")
));

final var metadataAuthor = new OrganizationalContact();
metadataAuthor.setName("metadataAuthor");
final var metadataManufacturer = new OrganizationalEntity();
metadataManufacturer.setName("metadataManufacturer");
final var metadataSupplier = new OrganizationalEntity();
metadataSupplier.setName("metadataSupplier");
final var metadata = new ProjectMetadata();
metadata.setProject(project);
metadata.setAuthors(List.of(metadataAuthor));
metadata.setManufacturer(metadataManufacturer);
metadata.setSupplier(metadataSupplier);
qm.persist(metadata);

final var componentSupplier = new OrganizationalEntity();
componentSupplier.setName("componentSupplier");

Expand Down Expand Up @@ -884,6 +899,15 @@ public void cloneProjectTest() {
assertThat(clonedProject.getTags()).extracting(Tag::getName)
.containsOnly("tag-a", "tag-b");

final ProjectMetadata clonedMetadata = clonedProject.getMetadata();
assertThat(clonedMetadata).isNotNull();
assertThat(clonedMetadata.getAuthors())
.satisfiesExactly(contact -> assertThat(contact.getName()).isEqualTo("metadataAuthor"));
assertThat(clonedMetadata.getManufacturer())
.satisfies(entity -> assertThat(entity.getName()).isEqualTo("metadataManufacturer"));
assertThat(clonedMetadata.getSupplier())
.satisfies(entity -> assertThat(entity.getName()).isEqualTo("metadataSupplier"));

assertThat(qm.getAllComponents(clonedProject)).satisfiesExactly(clonedComponent -> {
assertThat(clonedComponent.getUuid()).isNotEqualTo(component.getUuid());
assertThat(clonedComponent.getName()).isEqualTo("acme-lib");
Expand Down

0 comments on commit dddaa18

Please sign in to comment.