Search in sources :

Example 6 with Group

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");
    }
}
Also used : Group(org.structr.core.entity.Group) Ownership(org.structr.core.entity.relationship.Ownership) PrincipalOwnsNode(org.structr.core.entity.relationship.PrincipalOwnsNode) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) Relationship(org.structr.api.graph.Relationship) TestOne(org.structr.core.entity.TestOne) Principal(org.structr.core.entity.Principal) Test(org.junit.Test)

Example 7 with Group

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.");
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Group(org.structr.core.entity.Group) Transaction(org.structr.api.Transaction) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) BulkCreateLabelsCommand(org.structr.core.graph.BulkCreateLabelsCommand) Node(org.structr.api.graph.Node) Label(org.structr.api.graph.Label) DatabaseService(org.structr.api.DatabaseService) StructrTest(org.structr.common.StructrTest) Test(org.junit.Test)

Example 8 with Group

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("/");
}
Also used : Group(org.structr.core.entity.Group) NodeAttribute(org.structr.core.graph.NodeAttribute) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) List(java.util.List) LinkedList(java.util.LinkedList) Principal(org.structr.core.entity.Principal) Test(org.junit.Test) StructrGraphQLTest(org.structr.rest.common.StructrGraphQLTest)

Example 9 with Group

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");
    }
}
Also used : Group(org.structr.core.entity.Group) NodeAttribute(org.structr.core.graph.NodeAttribute) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) LinkedList(java.util.LinkedList) MailTemplate(org.structr.core.entity.MailTemplate) List(java.util.List) LinkedList(java.util.LinkedList) Map(java.util.Map) Principal(org.structr.core.entity.Principal) Test(org.junit.Test) StructrGraphQLTest(org.structr.rest.common.StructrGraphQLTest)

Example 10 with Group

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 "";
}
Also used : Group(org.structr.core.entity.Group) Principal(org.structr.core.entity.Principal)

Aggregations

Group (org.structr.core.entity.Group)16 Principal (org.structr.core.entity.Principal)13 FrameworkException (org.structr.common.error.FrameworkException)12 Tx (org.structr.core.graph.Tx)12 Test (org.junit.Test)11 LinkedList (java.util.LinkedList)4 TestOne (org.structr.core.entity.TestOne)4 List (java.util.List)3 StructrTest (org.structr.common.StructrTest)3 NodeAttribute (org.structr.core.graph.NodeAttribute)3 ActionContext (org.structr.schema.action.ActionContext)3 UnlicensedException (org.structr.common.error.UnlicensedException)2 App (org.structr.core.app.App)2 StructrApp (org.structr.core.app.StructrApp)2 StructrGraphQLTest (org.structr.rest.common.StructrGraphQLTest)2 StructrUiTest (org.structr.web.StructrUiTest)2 User (org.structr.web.entity.User)2 GroupPrincipal (java.nio.file.attribute.GroupPrincipal)1 UserPrincipal (java.nio.file.attribute.UserPrincipal)1 LinkedHashSet (java.util.LinkedHashSet)1