use of org.structr.core.entity.Group in project structr by structr.
the class AccessControlTest method test02SetDifferentPrincipalTypesAsOwner.
@Test
public void test02SetDifferentPrincipalTypesAsOwner() {
try (final Tx tx = app.tx()) {
final List<Principal> users = createTestNodes(Principal.class, 2);
final Principal user1 = (Principal) users.get(0);
final Group group1 = createTestNode(Group.class, "test group");
final TestOne t1 = createTestNode(TestOne.class);
t1.setProperty(AbstractNode.owner, user1);
t1.setProperty(AbstractNode.owner, group1);
assertEquals(group1, t1.getProperty(AbstractNode.owner));
Ownership ownerRel = t1.getIncomingRelationship(PrincipalOwnsNode.class);
assertNotNull(ownerRel);
// Do additional low-level check here to ensure cardinality!
List<Relationship> incomingRels = Iterables.toList(t1.getNode().getRelationships(Direction.INCOMING, new PrincipalOwnsNode()));
assertEquals(1, incomingRels.size());
tx.success();
} catch (FrameworkException ex) {
logger.error(ex.toString());
fail("Unexpected exception");
}
}
use of org.structr.core.entity.Group in project structr by structr.
the class MaintenanceTest method testBulkCreateLabelsCommand.
@Test
public void testBulkCreateLabelsCommand() {
try {
final DatabaseService graphDb = app.getDatabaseService();
final Set<Label> expectedLabels = new LinkedHashSet<>();
expectedLabels.add(graphDb.forName(Label.class, "Principal"));
expectedLabels.add(graphDb.forName(Label.class, "Group"));
expectedLabels.add(graphDb.forName(Label.class, "AccessControllable"));
expectedLabels.add(graphDb.forName(Label.class, "AbstractNode"));
expectedLabels.add(graphDb.forName(Label.class, "NodeInterface"));
expectedLabels.add(graphDb.forName(Label.class, "CMISInfo"));
expectedLabels.add(graphDb.forName(Label.class, "CMISItemInfo"));
if (graphDb.getTenantIdentifier() != null) {
expectedLabels.add(graphDb.forName(Label.class, graphDb.getTenantIdentifier()));
}
// intentionally create raw Neo4j transaction and create nodes in there
try (Transaction tx = graphDb.beginTx()) {
for (int i = 0; i < 100; i++) {
final Node test = graphDb.createNode(Collections.EMPTY_SET, Collections.EMPTY_MAP);
// set ID and type so that the rebuild index command identifies it as a Structr node.
test.setProperty("type", "Group");
test.setProperty("id", UUID.randomUUID().toString().replace("-", ""));
}
// this is important.... :)
tx.success();
}
/*
* This test will fail with the new Neo4j 3.0 Bolt interface, because
* there is no separation between a (Lucene-based) index and the
* database values any more. Nodes are selected by their 'type'
* property and will always be found even if NOT created using Structr
* methods.
// nodes should not be found yet..
try (final Tx tx = app.tx()) {
// check nodes, we should find no Groups here
assertEquals(0, app.nodeQuery(Group.class).getResult().size());
}
*/
// test rebuild index and create labels
// app.command(BulkRebuildIndexCommand.class).execute(new LinkedHashMap<>());
app.command(BulkCreateLabelsCommand.class).execute(new LinkedHashMap<>());
// nodes should now be visible to Structr
try (final Tx tx = app.tx()) {
// check nodes, we should find 100 Groups here
assertEquals(100, app.nodeQuery(Group.class).getResult().size());
// check nodes
for (final Group group : app.nodeQuery(Group.class)) {
final Set<Label> labels = Iterables.toSet(group.getNode().getLabels());
assertEquals("Invalid number of labels", expectedLabels.size(), labels.size());
assertTrue("Invalid labels found", labels.containsAll(expectedLabels));
}
tx.success();
}
} catch (FrameworkException fex) {
logger.warn("", fex);
fail("Unexpected exception.");
}
}
use of org.structr.core.entity.Group in project structr by structr.
the class GraphQLTest method testBasics.
@Test
public void testBasics() {
RestAssured.basePath = "/structr/graphql";
Group group = null;
Principal tester = null;
try (final Tx tx = app.tx()) {
final PropertyKey<List> membersKey = StructrApp.key(Group.class, "members");
tester = app.create(Principal.class, new NodeAttribute<>(Principal.name, "tester"));
group = app.create(Group.class, new NodeAttribute<>(Group.name, "TestGroup"), new NodeAttribute<>(membersKey, Arrays.asList(tester)));
tx.success();
} catch (FrameworkException fex) {
fex.printStackTrace();
}
final String query1 = "{ Group { id, type, name, members { id, type, name } }, Principal(_pageSize: 1) { id, type name }}";
final String query2 = "{ Group { id, type, name, members { } }}";
final String query3 = "{ Group(id: \"" + group.getUuid() + "\") { id, type, name }}";
RestAssured.given().contentType("application/json; charset=UTF-8").filter(ResponseLoggingFilter.logResponseTo(System.out)).body(query1).expect().statusCode(200).body("Group", hasSize(1)).body("Principal", hasSize(1)).body("Group[0].id", equalTo(group.getUuid())).body("Group[0].type", equalTo("Group")).body("Group[0].name", equalTo("TestGroup")).body("Group[0].members[0].id", equalTo(tester.getUuid())).body("Group[0].members[0].type", equalTo("Principal")).body("Group[0].members[0].name", equalTo("tester")).body("Principal[0].id", equalTo(group.getUuid())).body("Principal[0].type", equalTo("Group")).body("Principal[0].name", equalTo("TestGroup")).when().post("/");
RestAssured.given().contentType("application/json; charset=UTF-8").filter(ResponseLoggingFilter.logResponseTo(System.out)).body(query2).expect().statusCode(422).body("message", equalTo("Parse error at } in line 1, column 36")).body("code", equalTo(422)).body("query", equalTo(query2)).when().post("/");
RestAssured.given().contentType("application/json; charset=UTF-8").filter(ResponseLoggingFilter.logResponseTo(System.out)).body(query3).expect().statusCode(200).body("Group", hasSize(1)).body("Group[0].id", equalTo(group.getUuid())).body("Group[0].type", equalTo("Group")).body("Group[0].name", equalTo("TestGroup")).when().post("/");
}
use of org.structr.core.entity.Group in project structr by structr.
the class GraphQLTest method testAdvancedQueries.
@Test
public void testAdvancedQueries() {
final List<MailTemplate> templates = new LinkedList<>();
final List<Principal> team = new LinkedList<>();
Group group = null;
try (final Tx tx = app.tx()) {
final PropertyKey<List> membersKey = StructrApp.key(Group.class, "members");
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Axel")));
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Christian")));
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Christian")));
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Inès")));
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Kai")));
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Lukas")));
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Michael")));
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Susanne")));
team.add(app.create(Principal.class, new NodeAttribute<>(Principal.name, "Tobias")));
group = app.create(Group.class, new NodeAttribute<>(Group.name, "Structr Team"), new NodeAttribute<>(membersKey, team));
app.create(Group.class, new NodeAttribute<>(Group.name, "All teams"), new NodeAttribute<>(membersKey, Arrays.asList(group)));
templates.add(app.create(MailTemplate.class, new NodeAttribute<>(StructrApp.key(MailTemplate.class, "text"), "MailTemplate4"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "locale"), "de_DE"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "name"), "zrtsga"), new NodeAttribute<>(AbstractNode.owner, team.get(2))));
templates.add(app.create(MailTemplate.class, new NodeAttribute<>(StructrApp.key(MailTemplate.class, "text"), "MailTemplate2"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "locale"), "de_DE"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "name"), "lertdf"), new NodeAttribute<>(AbstractNode.owner, team.get(0))));
templates.add(app.create(MailTemplate.class, new NodeAttribute<>(StructrApp.key(MailTemplate.class, "text"), "MailTemplate5"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "locale"), "de_DE"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "name"), "tzegsg"), new NodeAttribute<>(AbstractNode.owner, team.get(3))));
templates.add(app.create(MailTemplate.class, new NodeAttribute<>(StructrApp.key(MailTemplate.class, "text"), "MailTemplate3"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "locale"), "de_DE"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "name"), "asgw"), new NodeAttribute<>(AbstractNode.owner, team.get(1))));
templates.add(app.create(MailTemplate.class, new NodeAttribute<>(StructrApp.key(MailTemplate.class, "text"), "MailTemplate6"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "locale"), "de_DE"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "name"), "dfjgr"), new NodeAttribute<>(AbstractNode.owner, team.get(4))));
templates.add(app.create(MailTemplate.class, new NodeAttribute<>(StructrApp.key(MailTemplate.class, "text"), "MailTemplate1"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "locale"), "de_DE"), new NodeAttribute<>(StructrApp.key(MailTemplate.class, "name"), "abcdef"), new NodeAttribute<>(AbstractNode.owner, team.get(0))));
tx.success();
} catch (FrameworkException fex) {
fex.printStackTrace();
}
RestAssured.basePath = "/structr/graphql";
{
final Map<String, Object> result = fetchGraphQL("{ Principal(id: \"" + team.get(0).getUuid() + "\") { id, type, name } }");
assertMapPathValueIs(result, "Principal.#", 1);
assertMapPathValueIs(result, "Principal.0.id", team.get(0).getUuid());
assertMapPathValueIs(result, "Principal.0.type", "Principal");
assertMapPathValueIs(result, "Principal.0.name", "Axel");
}
{
final Map<String, Object> result = fetchGraphQL("{ Principal(name: \"Axel\") { name } }");
assertMapPathValueIs(result, "Principal.#", 1);
assertMapPathValueIs(result, "Principal.0.name", "Axel");
assertMapPathValueIs(result, "Principal.0.type", null);
assertMapPathValueIs(result, "Principal.0.id", null);
}
{
final Map<String, Object> result = fetchGraphQL("{ Principal { name(_equals: \"Axel\") } }");
assertMapPathValueIs(result, "Principal.#", 1);
assertMapPathValueIs(result, "Principal.0.name", "Axel");
assertMapPathValueIs(result, "Principal.0.type", null);
assertMapPathValueIs(result, "Principal.0.id", null);
}
{
final Map<String, Object> result = fetchGraphQL("{ Principal { name(_contains: \"a\", _contains: \"l\", _conj: \"and\") } }");
assertMapPathValueIs(result, "Principal.#", 4);
assertMapPathValueIs(result, "Principal.0.name", "All teams");
assertMapPathValueIs(result, "Principal.1.name", "Axel");
assertMapPathValueIs(result, "Principal.2.name", "Lukas");
assertMapPathValueIs(result, "Principal.3.name", "Michael");
}
{
final Map<String, Object> result = fetchGraphQL("{ Group(_pageSize: 1) { name }, Principal(_pageSize: 2, _page: 2) { name(_contains: \"i\") } }");
assertMapPathValueIs(result, "Group.#", 1);
assertMapPathValueIs(result, "Group.0.name", "All teams");
assertMapPathValueIs(result, "Principal.#", 2);
assertMapPathValueIs(result, "Principal.0.name", "Inès");
assertMapPathValueIs(result, "Principal.1.name", "Kai");
}
{
final Map<String, Object> result = fetchGraphQL("{ Group { name, members(_pageSize: 2, _page: 2) { name }}}");
assertMapPathValueIs(result, "Group.#", 2);
assertMapPathValueIs(result, "Group.0.name", "All teams");
assertMapPathValueIs(result, "Group.0.members", new LinkedList<>());
assertMapPathValueIs(result, "Group.1.name", "Structr Team");
assertMapPathValueIs(result, "Group.1.members.#", 2);
assertMapPathValueIs(result, "Group.1.members.0.name", "Christian");
assertMapPathValueIs(result, "Group.1.members.1.name", "Inès");
}
{
final Map<String, Object> result = fetchGraphQL("{ Group { name, members(_sort: \"name\") { name }}}");
assertMapPathValueIs(result, "Group.#", 2);
assertMapPathValueIs(result, "Group.0.name", "All teams");
assertMapPathValueIs(result, "Group.0.members.#", 1);
assertMapPathValueIs(result, "Group.1.name", "Structr Team");
assertMapPathValueIs(result, "Group.1.members.#", 9);
assertMapPathValueIs(result, "Group.1.members.0.name", "Axel");
assertMapPathValueIs(result, "Group.1.members.1.name", "Christian");
assertMapPathValueIs(result, "Group.1.members.2.name", "Christian");
assertMapPathValueIs(result, "Group.1.members.3.name", "Inès");
assertMapPathValueIs(result, "Group.1.members.4.name", "Kai");
assertMapPathValueIs(result, "Group.1.members.5.name", "Lukas");
assertMapPathValueIs(result, "Group.1.members.6.name", "Michael");
assertMapPathValueIs(result, "Group.1.members.7.name", "Susanne");
assertMapPathValueIs(result, "Group.1.members.8.name", "Tobias");
}
{
final Map<String, Object> result = fetchGraphQL("{ Group { name, members(_sort: \"name\", _desc: true) { name }}}");
assertMapPathValueIs(result, "Group.#", 2);
assertMapPathValueIs(result, "Group.0.name", "All teams");
assertMapPathValueIs(result, "Group.0.members.#", 1);
assertMapPathValueIs(result, "Group.1.name", "Structr Team");
assertMapPathValueIs(result, "Group.1.members.#", 9);
assertMapPathValueIs(result, "Group.1.members.8.name", "Axel");
assertMapPathValueIs(result, "Group.1.members.7.name", "Christian");
assertMapPathValueIs(result, "Group.1.members.6.name", "Christian");
assertMapPathValueIs(result, "Group.1.members.5.name", "Inès");
assertMapPathValueIs(result, "Group.1.members.4.name", "Kai");
assertMapPathValueIs(result, "Group.1.members.3.name", "Lukas");
assertMapPathValueIs(result, "Group.1.members.2.name", "Michael");
assertMapPathValueIs(result, "Group.1.members.1.name", "Susanne");
assertMapPathValueIs(result, "Group.1.members.0.name", "Tobias");
}
{
final Map<String, Object> result = fetchGraphQL("{ Group { members { name(_contains: \"k\", _contains: \"l\", _conj: \"and\") }}}");
assertMapPathValueIs(result, "Group.#", 2);
assertMapPathValueIs(result, "Group.0.name", null);
assertMapPathValueIs(result, "Group.0.members", new LinkedList<>());
assertMapPathValueIs(result, "Group.1.members.0.name", "Lukas");
assertMapPathValueIs(result, "Group.1.members.1", null);
}
{
final Map<String, Object> result = fetchGraphQL("{ Group { members { name(_contains: \"k\", _contains: \"l\", _conj: \"or\") }}}");
assertMapPathValueIs(result, "Group.#", 2);
assertMapPathValueIs(result, "Group.0.name", null);
assertMapPathValueIs(result, "Group.0.members", new LinkedList<>());
assertMapPathValueIs(result, "Group.1.members.#", 4);
assertMapPathValueIs(result, "Group.1.members.0.name", "Axel");
assertMapPathValueIs(result, "Group.1.members.1.name", "Kai");
assertMapPathValueIs(result, "Group.1.members.2.name", "Lukas");
assertMapPathValueIs(result, "Group.1.members.3.name", "Michael");
}
{
final Map<String, Object> result = fetchGraphQL("{ MailTemplate { id, type, text(_contains: \"2\"), owner(_equals: { name: \"Axel\"}) { name } }}");
assertMapPathValueIs(result, "MailTemplate.#", 1);
assertMapPathValueIs(result, "MailTemplate.0.id", templates.get(1).getUuid());
assertMapPathValueIs(result, "MailTemplate.0.type", "MailTemplate");
assertMapPathValueIs(result, "MailTemplate.0.text", "MailTemplate2");
assertMapPathValueIs(result, "MailTemplate.0.name", null);
assertMapPathValueIs(result, "MailTemplate.0.owner.name", "Axel");
}
{
final Map<String, Object> result = fetchGraphQL("{ MailTemplate(_sort: \"owner.name\") { name, owner { name }}}");
assertMapPathValueIs(result, "MailTemplate.#", 6);
assertMapPathValueIs(result, "MailTemplate.0.name", "abcdef");
assertMapPathValueIs(result, "MailTemplate.0.owner.name", "Axel");
assertMapPathValueIs(result, "MailTemplate.1.name", "lertdf");
assertMapPathValueIs(result, "MailTemplate.1.owner.name", "Axel");
assertMapPathValueIs(result, "MailTemplate.2.name", "asgw");
assertMapPathValueIs(result, "MailTemplate.2.owner.name", "Christian");
assertMapPathValueIs(result, "MailTemplate.3.name", "zrtsga");
assertMapPathValueIs(result, "MailTemplate.3.owner.name", "Christian");
assertMapPathValueIs(result, "MailTemplate.4.name", "tzegsg");
assertMapPathValueIs(result, "MailTemplate.4.owner.name", "Inès");
assertMapPathValueIs(result, "MailTemplate.5.name", "dfjgr");
assertMapPathValueIs(result, "MailTemplate.5.owner.name", "Kai");
}
{
final Map<String, Object> result = fetchGraphQL("{ Group { name, members(_sort: \"name\", _desc: true) { name }}}");
assertMapPathValueIs(result, "Group.#", 2);
assertMapPathValueIs(result, "Group.0.name", "All teams");
assertMapPathValueIs(result, "Group.0.members.#", 1);
assertMapPathValueIs(result, "Group.1.name", "Structr Team");
assertMapPathValueIs(result, "Group.1.members.#", 9);
assertMapPathValueIs(result, "Group.1.members.8.name", "Axel");
assertMapPathValueIs(result, "Group.1.members.7.name", "Christian");
assertMapPathValueIs(result, "Group.1.members.6.name", "Christian");
assertMapPathValueIs(result, "Group.1.members.5.name", "Inès");
assertMapPathValueIs(result, "Group.1.members.4.name", "Kai");
assertMapPathValueIs(result, "Group.1.members.3.name", "Lukas");
assertMapPathValueIs(result, "Group.1.members.2.name", "Michael");
assertMapPathValueIs(result, "Group.1.members.1.name", "Susanne");
assertMapPathValueIs(result, "Group.1.members.0.name", "Tobias");
}
}
use of org.structr.core.entity.Group in project structr by structr.
the class AddToGroupFunction method apply.
@Override
public Object apply(final ActionContext ctx, final Object caller, final Object[] sources) throws FrameworkException {
try {
if (!arrayHasLengthAndAllElementsNotNull(sources, 2)) {
return "";
}
if (!(sources[0] instanceof Group)) {
logger.warn("Error: first argument is not a Group. Parameters: {}", getParametersAsString(sources));
return "Error: first argument is not a Group.";
}
if (!(sources[1] instanceof Principal)) {
logger.warn("Error: second argument is not a Principal. Parameters: {}", getParametersAsString(sources));
return "Error: second argument is not a Principal.";
}
final Group group = (Group) sources[0];
final Principal user = (Principal) sources[1];
group.addMember(user);
} catch (final IllegalArgumentException e) {
logParameterError(caller, sources, ctx.isJavaScriptContext());
return usage(ctx.isJavaScriptContext());
}
return "";
}
Aggregations