blob: 546c7717cbf41b8424e268378ae3ee41f7e9e340 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
import os.path
import pytest
from pytest_mock import MockerFixture
from typing import Optional, List, Dict, Any
from models import Example, SdkEnum, Tag
from helper import (
load_supported_categories,
)
@pytest.fixture(autouse=True, scope="session")
def supported_categories():
load_supported_categories("../categories.yaml")
@pytest.fixture(autouse=True)
def mock_files(mocker: MockerFixture):
def _mock_isfile(filepath):
if filepath in [
# mock examples & imports
"MOCK_FILEPATH_0",
"../../examples/MOCK_EXAMPLE/main.java",
"../../examples/MOCK_EXAMPLE/utils.java",
"../../examples/MOCK_EXAMPLE/schema.java",
# datasets
"../backend/datasets/dataset_id_1.json",
"../backend/datasets/dataset_id_1.avro",
"../backend/datasets/dataset_id_2.json",
"../backend/datasets/dataset_id_2.avro",
"../backend/datasets/dataset_id_3.json",
"../backend/datasets/dataset_id_3.avro",
]:
return True
raise FileNotFoundError(filepath)
mocker.patch("os.path.isfile", side_effect=_mock_isfile)
mocker.patch("builtins.open", mocker.mock_open(read_data="file content"))
@pytest.fixture
def create_test_example(create_test_tag):
def _create_test_example(
is_multifile=False, with_kafka=False, tag_meta: Optional[Dict[str, Any]] = None, **example_meta
) -> Example:
if tag_meta is None:
tag_meta = {}
meta: Dict[str, Any] = dict(
sdk=SdkEnum.JAVA,
pipeline_id="MOCK_PIPELINE_ID",
filepath="MOCK_FILEPATH",
code="MOCK_CODE",
output="MOCK_OUTPUT",
logs="MOCK_LOGS",
graph="MOCK_GRAPH",
url_vcs="https://github.com/proj/MOCK_LINK",
context_line=132,
)
meta.update(**example_meta)
return Example(
tag=create_test_tag(is_multifile=is_multifile, with_kafka=with_kafka, **tag_meta),
**meta,
)
return _create_test_example
@pytest.fixture
def create_test_tag():
def _create_test_tag(with_kafka=False, kafka_datasets=None, is_multifile=False, context_line=30, line_start=10,
line_finish=20, **tag_meta) -> Tag:
meta = {
"name": "MOCK_NAME",
"description": "MOCK_DESCRIPTION",
"complexity": "ADVANCED",
"multifile": False,
"categories": ["Testing", "Schemas"],
"pipeline_options": "--MOCK_OPTION MOCK_OPTION_VALUE",
}
if with_kafka:
if kafka_datasets is None:
kafka_datasets = {"dataset_id_1": {"format": "avro", "location": "local"}}
emulators = [
{
"type": "kafka",
"topic": {"id": "topic1", "source_dataset": k},
} for k in kafka_datasets.keys()]
meta.update(
emulators=emulators,
datasets=kafka_datasets
)
if is_multifile:
meta.update(
multifile=True,
files=[
{"name": "utils.java"},
{"name": "schema.java"}
]
)
for k, v in tag_meta.items():
if v is None:
meta.pop(k, None)
else:
meta[k] = v
return Tag(
filepath="../../examples/MOCK_EXAMPLE/main.java",
line_start=line_start,
line_finish=line_finish,
context_line=context_line,
**meta,
)
return _create_test_tag