package io.kaif.model.zone; import static io.kaif.model.account.Authority.CITIZEN; import static io.kaif.model.account.Authority.SYSOP; import static io.kaif.model.account.Authority.TOURIST; import static org.junit.Assert.*; import java.time.Instant; import java.util.Arrays; import java.util.EnumSet; import java.util.UUID; import org.junit.Test; import io.kaif.model.account.Account; import io.kaif.model.account.Authority; import io.kaif.model.account.Authorization; public class ZoneInfoTest { private static class ConstAuthorization implements Authorization { private final UUID accountId; private final EnumSet<Authority> authorities; public ConstAuthorization(UUID accountId, EnumSet<Authority> authorities) { this.accountId = accountId; this.authorities = authorities; } @Override public UUID authenticatedId() { return accountId; } @Override public boolean containsAuthority(Authority authority) { return authorities.contains(authority); } @Override public boolean matches(Account account) { //note used here return false; } } private static Authorization auth(UUID accoundId, EnumSet<Authority> authorities) { return new ConstAuthorization(accoundId, authorities); } private ZoneInfo zoneInfo(String zone) { return ZoneInfo.createDefault(zone, zone, Instant.now()); } @Test public void canUpVote() throws Exception { ZoneInfo general = ZoneInfo.createDefault("general", "public", Instant.now()); UUID accountId = UUID.randomUUID(); assertTrue(general.canUpVote(auth(accountId, EnumSet.of(CITIZEN)))); assertFalse(general.canUpVote(auth(accountId, EnumSet.of(TOURIST)))); assertFalse(general.canUpVote(auth(accountId, EnumSet.of(SYSOP)))); ZoneInfo managed = general.withAdmins(Arrays.asList(accountId)); assertTrue("admin should ignore authority", managed.canUpVote(auth(accountId, EnumSet.noneOf(Authority.class)))); assertFalse("not admin", managed.canUpVote(auth(UUID.randomUUID(), EnumSet.noneOf(Authority.class)))); } @Test public void canDebate() throws Exception { ZoneInfo general = ZoneInfo.createDefault("general", "public", Instant.now()); UUID accountId = UUID.randomUUID(); assertTrue(general.canDebate(auth(accountId, EnumSet.of(CITIZEN)))); assertFalse(general.canDebate(auth(accountId, EnumSet.of(TOURIST)))); assertFalse(general.canDebate(auth(accountId, EnumSet.of(SYSOP)))); ZoneInfo managed = general.withAdmins(Arrays.asList(accountId)); assertTrue("admin should ignore authority", managed.canDebate(auth(accountId, EnumSet.noneOf(Authority.class)))); assertFalse("not admin", managed.canDebate(auth(UUID.randomUUID(), EnumSet.noneOf(Authority.class)))); } @Test public void canWriteArticle() throws Exception { ZoneInfo site = ZoneInfo.createKaif("site", "public", Instant.now()); UUID accountId = UUID.randomUUID(); assertFalse(site.canWriteArticle(auth(accountId, EnumSet.of(SYSOP)))); assertFalse(site.canWriteArticle(auth(accountId, EnumSet.of(TOURIST)))); assertFalse(site.canWriteArticle(auth(accountId, EnumSet.of(CITIZEN)))); ZoneInfo managed = site.withAdmins(Arrays.asList(accountId)); assertTrue("admin should ignore authority", managed.canWriteArticle(auth(accountId, EnumSet.noneOf(Authority.class)))); assertFalse("not admin", managed.canWriteArticle(auth(UUID.randomUUID(), EnumSet.noneOf(Authority.class)))); } }