328 lines
8.6 KiB
Plaintext
328 lines
8.6 KiB
Plaintext
#
|
|
# Copyright 2016 "Neo Technology",
|
|
# Network Engine for Objects in Lund AB (http://neotechnology.com)
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
Feature: TriadicSelection
|
|
|
|
Scenario: Handling triadic friend of a friend
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c)
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b2' |
|
|
| 'b3' |
|
|
| 'c11' |
|
|
| 'c12' |
|
|
| 'c21' |
|
|
| 'c22' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b3' |
|
|
| 'c11' |
|
|
| 'c12' |
|
|
| 'c21' |
|
|
| 'c22' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend with different relationship type
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r:FOLLOWS]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b2' |
|
|
| 'c11' |
|
|
| 'c12' |
|
|
| 'c21' |
|
|
| 'c22' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend with superset of relationship type
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'c11' |
|
|
| 'c12' |
|
|
| 'c21' |
|
|
| 'c22' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend with implicit subset of relationship type
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b3' |
|
|
| 'b4' |
|
|
| 'c11' |
|
|
| 'c12' |
|
|
| 'c21' |
|
|
| 'c22' |
|
|
| 'c31' |
|
|
| 'c32' |
|
|
| 'c41' |
|
|
| 'c42' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend with explicit subset of relationship type
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS|FOLLOWS]->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b3' |
|
|
| 'b4' |
|
|
| 'c11' |
|
|
| 'c12' |
|
|
| 'c21' |
|
|
| 'c22' |
|
|
| 'c31' |
|
|
| 'c32' |
|
|
| 'c41' |
|
|
| 'c42' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend with same labels
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b:X)-->(c:X)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b3' |
|
|
| 'c11' |
|
|
| 'c21' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend with different labels
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b:X)-->(c:Y)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'c12' |
|
|
| 'c22' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend with implicit subset of labels
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c:X)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b3' |
|
|
| 'c11' |
|
|
| 'c21' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is not a friend with implicit superset of labels
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b:X)-->(c)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b3' |
|
|
| 'c11' |
|
|
| 'c12' |
|
|
| 'c21' |
|
|
| 'c22' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b2' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend with different relationship type
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r:FOLLOWS]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b3' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend with superset of relationship type
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b2' |
|
|
| 'b3' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend with implicit subset of relationship type
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b1' |
|
|
| 'b2' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend with explicit subset of relationship type
|
|
Given the binary-tree-1 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS|FOLLOWS]->(b)-->(c)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b1' |
|
|
| 'b2' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend with same labels
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b:X)-->(c:X)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b2' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend with different labels
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b:X)-->(c:Y)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend with implicit subset of labels
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b)-->(c:X)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b2' |
|
|
And no side effects
|
|
|
|
Scenario: Handling triadic friend of a friend that is a friend with implicit superset of labels
|
|
Given the binary-tree-2 graph
|
|
When executing query:
|
|
"""
|
|
MATCH (a:A)-[:KNOWS]->(b:X)-->(c)
|
|
OPTIONAL MATCH (a)-[r:KNOWS]->(c)
|
|
WITH c WHERE r IS NOT NULL
|
|
RETURN c.name
|
|
"""
|
|
Then the result should be:
|
|
| c.name |
|
|
| 'b2' |
|
|
And no side effects
|