use of org.xwiki.security.authorization.testwikis.TestGroup in project xwiki-platform by xwiki.
the class TestDefinitionParserTest method testDefinitionTestParser.
@Test
public void testDefinitionTestParser() throws Exception {
TestDefinitionParser parser = new DefaultTestDefinitionParser();
EntityReferenceResolver<String> resolver = componentManager.getInstance(EntityReferenceResolver.TYPE_STRING);
EntityReferenceSerializer<String> serializer = componentManager.getInstance(EntityReferenceSerializer.TYPE_STRING);
TestDefinition testDefinition = parser.parse("testwikis" + File.separatorChar + "parserTester.xml", resolver, serializer);
Collection<TestWiki> testWikis = testDefinition.getWikis();
assertThat("There should be some wikis", testWikis, notNullValue());
assertThat("The wikis count should be 3", testWikis.size(), equalTo(3));
TestWiki mainwiki = testDefinition.getMainWiki();
assertThat("Main wiki should be defined", mainwiki, notNullValue());
assertThat("Main wiki should be named 'wiki'", mainwiki.getWikiReference(), equalTo(new WikiReference("wiki")));
assertThat("Main wiki should be main wiki", mainwiki.isMainWiki(), is(true));
assertThat("Main wiki owner should be XWiki.Admin", mainwiki.getOwner(), equalTo(new DocumentReference("wiki", "XWiki", "Admin")));
assertThat("Main wiki should have 4 users (2 groups, and 2 users)", mainwiki.getUsers().size(), equalTo(4));
assertThat("Main wiki should have 2 groups", mainwiki.getGroups().size(), equalTo(2));
assertThat("Main wiki should have a groupA", mainwiki.getGroup("groupA"), notNullValue());
assertThat("Main wiki should have a userA", mainwiki.getUser("userA"), notNullValue());
Collection<TestGroup> groups = mainwiki.getUser("userA").getGroups();
assertThat("UserA of Main wiki should be in 2 groups", groups.size(), equalTo(2));
List<DocumentReference> groupRefs = new ArrayList<DocumentReference>();
for (TestGroup group : groups) {
groupRefs.add(group.getGroupReference());
}
assertThat("User A is in GroupA of the main wiki and the subwiki", groupRefs, hasItems(new DocumentReference("wiki", "XWiki", "groupA"), new DocumentReference("wiki1", "XWiki", "groupA")));
Collection<TestAccessRule> rules = mainwiki.getAccessRules();
assertThat("There must be 26 access rules on main wiki", rules.size(), equalTo(26));
List<DocumentReference> userRefs = new ArrayList<DocumentReference>();
List<Right> rights = new ArrayList<Right>();
List<RuleState> states = new ArrayList<RuleState>();
for (TestAccessRule rule : rules) {
userRefs.add(rule.getUser());
rights.add(rule.getRight());
states.add(rule.getState());
}
assertThat("Users in access rules of main wiki mismatch", userRefs, hasItems(new DocumentReference("wiki", "XWiki", "userA"), new DocumentReference("wiki", "XWiki", "userB"), new DocumentReference("wiki", "XWiki", "groupA"), new DocumentReference("wiki", "XWiki", "groupB")));
assertThat("Rights in access rules of main wiki mismatch", rights, hasItems(Right.VIEW, Right.LOGIN, Right.EDIT, Right.COMMENT, Right.DELETE, Right.REGISTER, Right.ADMIN, Right.PROGRAM));
assertThat("State in access rules of main wiki mismatch", states, hasItems(RuleState.ALLOW, RuleState.DENY));
assertThat("Main wiki should have 3 spaces (2 plus XWiki)", mainwiki.getSpaces().size(), equalTo(3));
TestSpace space = mainwiki.getSpace("space1");
assertThat("Main wiki should have a space named 'space1'", space, notNullValue());
assertThat("'space1' of main wiki should have description 'space 1'", space.getDescription(), equalTo("space 1"));
rules = space.getAccessRules();
assertThat("There must be 8 access rules on space 1", rules.size(), equalTo(8));
userRefs = new ArrayList<DocumentReference>();
rights = new ArrayList<Right>();
states = new ArrayList<RuleState>();
for (TestAccessRule rule : rules) {
userRefs.add(rule.getUser());
rights.add(rule.getRight());
states.add(rule.getState());
}
assertThat("Users in access rules of space 1 of main wiki mismatch", userRefs, hasItems(new DocumentReference("wiki", "XWiki", "userA"), new DocumentReference("wiki", "XWiki", "userB"), new DocumentReference("wiki", "XWiki", "groupB")));
assertThat("Rights in access rules of space 1 of main wiki mismatch", rights, hasItems(Right.VIEW, Right.EDIT, Right.COMMENT, Right.DELETE, Right.ADMIN));
assertThat("State in access rules of space 1 of main wiki mismatch", states, hasItems(RuleState.DENY));
assertThat("Space 1 of main wiki should have 2 documents", space.getDocuments().size(), equalTo(2));
TestDocument document = space.getDocument("document1");
assertThat("Space 1 of main wiki should have a document named 'document1'", document, notNullValue());
assertThat("'document1' of 'space1' of main wiki should have description 'Document 1'", document.getDescription(), equalTo("Document 1"));
rules = document.getAccessRules();
assertThat("There must be 7 access rules on document 1", rules.size(), equalTo(7));
userRefs = new ArrayList<DocumentReference>();
rights = new ArrayList<Right>();
states = new ArrayList<RuleState>();
for (TestAccessRule rule : rules) {
userRefs.add(rule.getUser());
rights.add(rule.getRight());
states.add(rule.getState());
}
assertThat("Users in access rules of document 1 of space 1 of main wiki mismatch", userRefs, hasItems(new DocumentReference("wiki", "XWiki", "userA"), new DocumentReference("wiki", "XWiki", "userB"), new DocumentReference("wiki", "XWiki", "groupA")));
assertThat("Rights in access rules of document 1 of space 1 of main wiki mismatch", rights, hasItems(Right.VIEW, Right.EDIT, Right.COMMENT, Right.DELETE));
assertThat("State in access rules of document 1 of space 1 of main wiki mismatch", states, hasItems(RuleState.ALLOW));
}
use of org.xwiki.security.authorization.testwikis.TestGroup in project xwiki-platform by xwiki.
the class DefaultAuthorizationManagerIntegrationTest method initialiseWikiMock.
@Override
public TestDefinition initialiseWikiMock(String filename) throws Exception {
super.initialiseWikiMock(filename);
when(xWikiBridge.getMainWikiReference()).thenReturn(testDefinition.getMainWiki().getWikiReference());
when(xWikiBridge.isWikiReadOnly()).thenReturn(false);
when(userBridge.getAllGroupsFor(any(UserSecurityReference.class), any(WikiReference.class))).thenAnswer(new Answer<Collection<GroupSecurityReference>>() {
@Override
public Collection<GroupSecurityReference> answer(InvocationOnMock invocationOnMock) throws Throwable {
UserSecurityReference userReference = (UserSecurityReference) invocationOnMock.getArguments()[0];
WikiReference wikiReference = (WikiReference) invocationOnMock.getArguments()[1];
if (userReference.getOriginalReference() == null) {
// Public users (not logged in) may not appears in any group
return Collections.emptyList();
}
TestWiki wiki = testDefinition.getWiki(userReference.getOriginalReference().getWikiReference());
if (wiki == null) {
throw new AuthorizationException(String.format("Failed to get groups for user or group [%s] in wiki [%s]. Unknown wiki.", userReference, wikiReference), null);
}
TestUserDocument user = wiki.getUser(userReference.getName());
if (user == null) {
return Collections.emptyList();
}
Collection<GroupSecurityReference> groups = new ArrayList<GroupSecurityReference>();
for (TestGroup group : user.getGroups()) {
// Ensure we return only group of the requested wiki
if (group.getGroupReference().getWikiReference().equals(wikiReference)) {
groups.add(securityReferenceFactory.newGroupReference(group.getGroupReference()));
}
}
return groups;
}
});
when(securityEntryReader.read(any(SecurityReference.class))).thenAnswer(new Answer<SecurityRuleEntry>() {
@Override
public SecurityRuleEntry answer(InvocationOnMock invocationOnMock) throws Throwable {
final SecurityReference reference = (SecurityReference) invocationOnMock.getArguments()[0];
TestEntity entity = testDefinition.searchEntity(reference);
Collection<TestAccessRule> rules = (entity != null && entity instanceof SecureTestEntity) ? ((SecureTestEntity) entity).getAccessRules() : Collections.<TestAccessRule>emptyList();
final Collection<SecurityRule> mockedRules = new ArrayList<SecurityRule>();
for (final TestAccessRule rule : rules) {
mockedRules.add(mockSecurityRule(reference, rule.getRight(), rule.getState(), rule.getUser(), rule.isUser()));
}
if (entity instanceof TestWiki) {
TestWiki wiki = (TestWiki) entity;
if (wiki.getOwner() != null) {
mockedRules.add(mockSecurityRule(reference, Right.ADMIN, RuleState.ALLOW, wiki.getOwner(), true));
}
}
if (entity instanceof TestDocument) {
TestDocument document = (TestDocument) entity;
if (document.getCreator() != null) {
mockedRules.add(mockSecurityRule(reference, Right.CREATOR, RuleState.ALLOW, document.getCreator(), true));
}
}
return new AbstractSecurityRuleEntry() {
@Override
public Collection<SecurityRule> getRules() {
return mockedRules;
}
@Override
public SecurityReference getReference() {
return reference;
}
@Override
public String toString() {
return String.format("Rule entry for %s containing %d rules", reference.toString(), mockedRules.size());
}
@Override
public boolean equals(Object object) {
if (object == this) {
return true;
}
if (!(object instanceof SecurityRuleEntry)) {
return false;
}
SecurityRuleEntry other = (SecurityRuleEntry) object;
return compareReferenceNullSafe(other.getReference(), reference) && other.getRules().size() == mockedRules.size();
}
};
}
});
return testDefinition;
}
Aggregations