fix permission reference on clone repositories

This commit is contained in:
Eduard Heimbuch
2019-08-02 14:46:33 +02:00
parent 47e323e468
commit 0890707b3f
2 changed files with 25 additions and 1 deletions

View File

@@ -82,7 +82,7 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
private String namespace;
private String name;
@XmlElement(name = "permission")
private final Set<RepositoryPermission> permissions = new HashSet<>();
private Set<RepositoryPermission> permissions = new HashSet<>();
@XmlElement(name = "public")
private boolean publicReadable = false;
private boolean archived = false;
@@ -331,6 +331,8 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
try {
repository = (Repository) super.clone();
// fix permission reference on clone
repository.permissions = new HashSet<>(permissions);
} catch (CloneNotSupportedException ex) {
throw new RuntimeException(ex);
}

View File

@@ -0,0 +1,22 @@
package sonia.scm.repository;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
class RepositoryTest {
@Test
void shouldCreateNewPermissionOnClone() {
Repository repository = new Repository();
repository.setPermissions(Arrays.asList(new RepositoryPermission("one", "role", false)));
Repository cloned = repository.clone();
cloned.setPermissions(Arrays.asList(new RepositoryPermission("two", "role", false)));
assertThat(repository.getPermissions()).extracting(r -> r.getName()).containsOnly("one");
}
}