package com.constellio.model.services.schemas.builders;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Before;
import org.junit.Test;
import com.constellio.model.entities.schemas.MetadataAccessRestriction;
import com.constellio.sdk.tests.ConstellioTest;
public class MetadataAccessRestrictionBuilderTest extends ConstellioTest {
MetadataAccessRestrictionBuilder builder;
MetadataAccessRestriction restriction;
@Before
public void setUp()
throws Exception {
builder = MetadataAccessRestrictionBuilder.create();
}
@Test
public void givenRequiredReadRolesWhenBuildingThenOK()
throws Exception {
builder.getRequiredReadRoles().add("role1");
build();
assertThat(restriction.getRequiredReadRoles()).containsOnly("role1");
}
@Test
public void givenRequiredReadRolesWhenModifyingThenOK()
throws Exception {
builder.getRequiredReadRoles().add("role1");
buildAndModify();
assertThat(builder.getRequiredReadRoles()).containsOnly("role1");
}
@Test
public void givenRequiredWriteRolesWhenBuildingThenOK()
throws Exception {
builder.getRequiredWriteRoles().add("role1");
build();
assertThat(restriction.getRequiredWriteRoles()).containsOnly("role1");
}
@Test
public void givenRequiredWriteRolesWhenModifyingThenOK()
throws Exception {
builder.getRequiredWriteRoles().add("role1");
buildAndModify();
assertThat(builder.getRequiredWriteRoles()).containsOnly("role1");
}
@Test
public void givenRequiredDeleteRolesWhenBuildingThenOK()
throws Exception {
builder.getRequiredDeleteRoles().add("role1");
build();
assertThat(restriction.getRequiredDeleteRoles()).containsOnly("role1");
}
@Test
public void givenRequiredDeleteRolesWhenModifyingThenOK()
throws Exception {
builder.getRequiredDeleteRoles().add("role1");
buildAndModify();
assertThat(builder.getRequiredDeleteRoles()).containsOnly("role1");
}
@Test
public void givenRequiredModificationRolesWhenModifyingThenOK()
throws Exception {
builder.getRequiredModificationRoles().add("role1");
buildAndModify();
assertThat(builder.getRequiredModificationRoles()).containsOnly("role1");
}
@Test
public void givenRequiredModificationRolesWhenBuildingThenOK()
throws Exception {
builder.getRequiredModificationRoles().add("role1");
build();
assertThat(restriction.getRequiredModificationRoles()).containsOnly("role1");
}
@Test
public void whenAddingSameElementsMultipleTimesThenOnlySetOnce()
throws Exception {
builder.getRequiredReadRoles().add("role1");
builder.getRequiredReadRoles().add("role1");
builder.getRequiredWriteRoles().add("role2");
builder.getRequiredWriteRoles().add("role2");
builder.getRequiredModificationRoles().add("role3");
builder.getRequiredModificationRoles().add("role3");
builder.getRequiredDeleteRoles().add("role4");
builder.getRequiredDeleteRoles().add("role4");
build();
assertThat(restriction.getRequiredReadRoles()).hasSize(1);
assertThat(restriction.getRequiredWriteRoles()).hasSize(1);
assertThat(restriction.getRequiredModificationRoles()).hasSize(1);
assertThat(restriction.getRequiredDeleteRoles()).hasSize(1);
}
@Test
public void whenAddingElementWithAddMethodThenSet()
throws Exception {
builder.withRequiredReadRole("read").withRequiredWriteRole("write").withRequiredModificationRole("modifyTo")
.withRequiredDeleteRole("delete").withRequiredWriteAndDeleteRole("write_and_delete").withRequiredRole("chuck");
build();
assertThat(restriction.getRequiredReadRoles()).containsOnly("read", "chuck");
assertThat(restriction.getRequiredWriteRoles()).containsOnly("write", "write_and_delete", "chuck");
assertThat(restriction.getRequiredModificationRoles()).containsOnly("modifyTo", "chuck");
assertThat(restriction.getRequiredDeleteRoles()).containsOnly("delete", "write_and_delete", "chuck");
}
private void build() {
restriction = builder.build();
}
private void buildAndModify() {
restriction = builder.build();
builder = MetadataAccessRestrictionBuilder.modify(restriction);
}
}