# Copyright 2021 Memgraph Ltd. # # Use of this software is governed by the Business Source License # included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source # License, and you may not use this file except in compliance with the Business Source License. # # As of the Change Date specified in that file, in accordance with # the Business Source License, use of this software will be governed # by the Apache License, Version 2.0, included in the file # licenses/APL.txt. # -*- coding: utf-8 -*- import database import os from behave import given def clear_graph(context): database.query("MATCH (n) DETACH DELETE n", context) if context.exception is not None: context.exception = None database.query("MATCH (n) DETACH DELETE n", context) @given('an empty graph') def empty_graph_step(context): clear_graph(context) @given('any graph') def any_graph_step(context): clear_graph(context) @given('graph "{name}"') def graph_name(context, name): create_graph(name, context) def create_graph(name, context): """ Function deletes everything from database and creates a new graph. Graph file name is an argument of function. Function executes queries written in a .cypher file separated by ';' and sets graph properties to beginning values. """ clear_graph(context) path = os.path.join(context.config.test_directory, "graphs", name + ".cypher") q_marks = ["'", '"', '`'] with open(path, 'r') as f: content = f.read().replace('\n', ' ') single_query = '' quote = None i = 0 while i < len(content): ch = content[i] if ch == '\\' and i != len(content) - 1 and \ content[i + 1] in q_marks: single_query += ch + content[i + 1] i += 2 else: single_query += ch if quote == ch: quote = None elif ch in q_marks and quote is None: quote = ch if ch == ';' and quote is None: database.query(single_query, context) single_query = '' i += 1 if single_query.strip() != '': database.query(single_query, context)