public async Task ArgsContainBookmarkUsed()
            {
                // Arrange
                var bookmark  = Bookmark.From("Bookmark1");
                var bookmarks = new List <Bookmark> {
                    bookmark
                };

                const string queryText = "RETURN [] AS data";

                var queryParams = new Dictionary <string, object>();

                var cypherQuery = new CypherQuery(queryText, queryParams, CypherResultMode.Set, CypherResultFormat.Transactional, "neo4j")
                {
                    Bookmarks = bookmarks
                };

                using (var testHarness = new BoltTestHarness())
                {
                    var recordMock = new Mock <IRecord>();
                    recordMock.Setup(r => r["data"]).Returns(new List <INode>());
                    recordMock.Setup(r => r.Keys).Returns(new[] { "data" });

                    var testStatementResult = new TestStatementResult(new[] { "data" }, recordMock.Object);
                    testHarness.SetupCypherRequestResponse(cypherQuery.QueryText, cypherQuery.QueryParameters, testStatementResult);

                    var graphClient = await testHarness.CreateAndConnectBoltGraphClient();

                    graphClient.OperationCompleted += (s, e) => { e.BookmarksUsed.Should().Contain(bookmarks[0]); };

                    await graphClient.ExecuteGetCypherResultsAsync <IEnumerable <ObjectWithIds> >(cypherQuery);
                }
            }
Exemple #2
0
        public async Task CollectionShouldDeserializeCorrectly()
        {
            // simulate a collect()
            const string queryText = "MATCH (start:Node) RETURN collect(start) AS data";

            var queryParams = new Dictionary <string, object>();

            var cypherQuery = new CypherQuery(queryText, queryParams, CypherResultMode.Set, CypherResultFormat.Transactional, "neo4j");

            using (var testHarness = new BoltTestHarness())
            {
                var nodeMock = new Mock <INode>();
                nodeMock
                .Setup(n => n.Id)
                .Returns(1);
                nodeMock
                .Setup(n => n.Properties)
                .Returns(new Dictionary <string, object>()
                {
                    { "Ids", new List <int> {
                          1, 2, 3
                      } }
                });

                var recordMock = new Mock <IRecord>();
                recordMock
                .Setup(r => r["data"])
                .Returns(new List <INode>()
                {
                    nodeMock.Object
                });
                recordMock
                .Setup(r => r.Keys)
                .Returns(new[] { "data" });

                var testStatementResult = new TestStatementResult(new[] { "data" }, recordMock.Object);
                testHarness.SetupCypherRequestResponse(cypherQuery.QueryText, cypherQuery.QueryParameters, testStatementResult);

                var graphClient = await testHarness.CreateAndConnectBoltGraphClient();

                var results = (await graphClient.ExecuteGetCypherResultsAsync <IEnumerable <ObjectWithIds> >(cypherQuery)).ToArray();

                //Assert
                var deserializedObject = results.First().First();
                deserializedObject.Ids.Count.Should().Be(3);
                deserializedObject.Ids[0].Should().Be(1);
                deserializedObject.Ids[1].Should().Be(2);
                deserializedObject.Ids[2].Should().Be(3);
            }
        }
Exemple #3
0
        public async Task RelationshipShouldDeserializeInDefinedType()
        {
            // Arrange
            const string queryText = "MATCH (n:Test)-[r]->(t:Test) RETURN r AS Rel";

            var cypherQuery = new CypherQuery(queryText, new Dictionary <string, object>(), CypherResultMode.Projection, CypherResultFormat.Transactional, "neo4j");

            using (var testHarness = new BoltTestHarness())
            {
                var relationshipMock = new Mock <IRelationship>();
                relationshipMock
                .Setup(r => r.StartNodeId)
                .Returns(1);
                relationshipMock
                .Setup(r => r.EndNodeId)
                .Returns(2);
                relationshipMock
                .Setup(r => r.Type)
                .Returns("Xx");
                relationshipMock
                .Setup(r => r.Id)
                .Returns(3);
                relationshipMock
                .Setup(r => r.Properties)
                .Returns(new Dictionary <string, object>()
                {
                    { "Id", 42 }
                });

                var recordMock = new Mock <IRecord>();
                recordMock
                .Setup(r => r["Rel"])
                .Returns(relationshipMock.Object);
                recordMock
                .Setup(r => r.Keys)
                .Returns(new[] { "Rel" });

                var testStatementResult = new TestStatementResult(new[] { "Rel" }, recordMock.Object);
                testHarness.SetupCypherRequestResponse(cypherQuery.QueryText, cypherQuery.QueryParameters, testStatementResult);

                var graphClient = await testHarness.CreateAndConnectBoltGraphClient();

                var results = (await graphClient.ExecuteGetCypherResultsAsync <RelationGrouper>(cypherQuery)).ToArray();

                //Assert
                results.Length.Should().Be(1);
                var relation = results.First().Rel;
                relation.Id.Should().Be(42);
            }
        }
        public static void GetDriverAndSession(out IDriver driver, out IAsyncSession session, out IAsyncTransaction transaction)
        {
            var mockNode = Substitute.For <INode>();

            mockNode["Name"].Returns("Value");
            mockNode.Labels.Returns(new List <string> {
                "Node"
            });
            mockNode.Properties.Returns(new Dictionary <string, object> {
                { "Name", "Value" }
            });

            var mockRecord = Substitute.For <IRecord>();

            mockRecord.Keys.Returns(new List <string> {
                "Node"
            });
            mockRecord["Node"].Returns(mockNode);
            mockRecord.Values["Node"].Returns(mockNode);

            var mockStatementResult = new TestStatementResult(new List <IRecord>(new[] { mockRecord }));

            var mockTransaction = Substitute.For <IAsyncTransaction>();

            mockTransaction.RunAsync(Arg.Any <string>(), Arg.Any <IDictionary <string, object> >()).Returns(mockStatementResult);

            var task = Task.FromResult(mockTransaction);

            task.Result.Should().NotBe(null);

            var mockSession = Substitute.For <IAsyncSession>();
            var dbmsReturn  = GetDbmsComponentsResponse();

            mockSession.RunAsync("CALL dbms.components()").Returns(dbmsReturn);
            mockSession.BeginTransactionAsync().Returns(Task.FromResult(mockTransaction));
            mockSession.BeginTransactionAsync(Arg.Any <Action <TransactionConfigBuilder> >()).Returns(Task.FromResult(mockTransaction));

            var mockDriver = Substitute.For <IDriver>();

            mockDriver.AsyncSession().Returns(mockSession);
            mockDriver.AsyncSession(Arg.Any <Action <SessionConfigBuilder> >()).Returns(mockSession);


            driver      = mockDriver;
            session     = mockSession;
            transaction = mockTransaction;
        }
        public static IResultCursor GetDbmsComponentsResponse()
        {
            var record = Substitute.For <IRecord>();

            record["name"].Returns("neo4j kernel");
            record["versions"].Returns(new List <object> {
                "3.1.0"
            });

            var response = new List <IRecord> {
                record
            };

            var statementResult = new TestStatementResult(response);

            return(statementResult);
        }
                public async Task ReturnsQueryStats_WhenInTransaction()
                {
                    // BoltClientTestHelper.GetDriverAndSession(out var mockDriver, out _, out _);

                    bool       completedRaised = false;
                    QueryStats stats           = null;

                    var cypherQuery = new CypherQuery("MATCH (n) RETURN id(n)", new Dictionary <string, object>(), CypherResultMode.Set, CypherResultFormat.Transactional, "neo4j", includeQueryStats: true);

                    var value = new Dictionary <string, object> {
                        { "id(n)", 4 }
                    };
                    var recordMock = new Mock <IRecord>();

                    recordMock.Setup(x => x.Values).Returns(value);
                    recordMock.Setup(x => x["id(n)"]).Returns(4);
                    recordMock.Setup(x => x.Keys).Returns(new[] { "id(n)" });
                    var testStatementResult = new TestStatementResult(new[] { "id(n)" }, recordMock.Object);

                    using (var testHarness = new BoltTestHarness())
                    {
                        testHarness.SetupCypherRequestResponse(cypherQuery.QueryText, cypherQuery.QueryParameters, testStatementResult);

                        var client = await testHarness.CreateAndConnectBoltGraphClient();

                        client.OperationCompleted += (o, e) =>
                        {
                            stats           = e.QueryStats;
                            completedRaised = true;
                        };

                        using (var tx = ((ITransactionalGraphClient)client).BeginTransaction())
                        {
                            var results = (await client.ExecuteGetCypherResultsAsync <long>(cypherQuery)).ToArray();
                            results.First().Should().Be(4);
                        }
                    }

                    completedRaised.Should().BeTrue();
                    stats.Should().NotBeNull();
                }
Exemple #7
0
        public async Task RelationshipShouldDeserializeInAnonymousType()
        {
            // Arrange
            const string queryText = @"MATCH (n:Test)-[r]->(t:Test) RETURN r AS Rel";

            var cypherQuery = new CypherQuery(queryText, new Dictionary <string, object>(), CypherResultMode.Projection, CypherResultFormat.Transactional, "neo4j");

            using (var testHarness = new BoltTestHarness())
            {
                var relationshipMock = new Mock <IRelationship>();
                relationshipMock
                .Setup(r => r.StartNodeId)
                .Returns(1);
                relationshipMock
                .Setup(r => r.EndNodeId)
                .Returns(2);
                relationshipMock
                .Setup(r => r.Type)
                .Returns("Xx");
                relationshipMock
                .Setup(r => r.Id)
                .Returns(3);
                relationshipMock
                .Setup(r => r.Properties)
                .Returns(new Dictionary <string, object>()
                {
                    { "Id", 42 }
                });

                var recordMock = new Mock <IRecord>();
                recordMock
                .Setup(r => r["Rel"])
                .Returns(relationshipMock.Object);
                recordMock
                .Setup(r => r.Keys)
                .Returns(new[] { "Rel" });

                var testStatementResult = new TestStatementResult(new[] { "Rel" }, recordMock.Object);
                testHarness.SetupCypherRequestResponse(cypherQuery.QueryText, cypherQuery.QueryParameters, testStatementResult);

                //Session mock???
                var dummy = new
                {
                    Rel = new RelationType()
                };
                var anonType    = dummy.GetType();
                var graphClient = await testHarness.CreateAndConnectBoltGraphClient();

                var genericGetCypherResults   = typeof(IRawGraphClient).GetMethod(nameof(graphClient.ExecuteGetCypherResultsAsync));
                var anonymousGetCypherResults = genericGetCypherResults.MakeGenericMethod(anonType);
                var genericResultsTask        = anonymousGetCypherResults.Invoke(graphClient, new object[] { cypherQuery });
                await(Task) genericResultsTask;
                var genericResults = (IEnumerable)((dynamic)genericResultsTask).Result;

                var results = genericResults.Cast <object>().ToArray();

                //Assert
                Assert.Equal(1, results.Length);
                var relation = (RelationType)anonType.GetProperty(nameof(dummy.Rel)).GetValue(results.First(), null);
                relation.Id.Should().Be(42);
            }
        }