# pylint: disable=unused-argument,protected-access,too-many-arguments,unspecified-encoding import json import os import pandas as pd import pytest from slz_spotify_charts_scraper.entities import Config from slz_spotify_charts_scraper.validator import Validator from . import FIXTURES_PATH @pytest.mark.integration def test__find_schema(s3_client, validator: Validator, config_test: Config): schema = os.path.join(FIXTURES_PATH, 'validation', '2017-01-01.json') key_path = 'schemas/spotify/charts/v1/2017-01-01.json' with open(schema, 'r') as file_: s3_client.put_object( Body=file_.read(), Bucket=config_test.config_bucket, Key=key_path, ) assert f's3://{config_test.config_bucket}/{key_path}' == validator._find_schema() @pytest.mark.integration def test__load_schema(s3_client, validator: Validator, config_test: Config): schema = os.path.join(FIXTURES_PATH, 'validation', '2017-01-01.json') key_path = 'schemas/spotify/charts/v1/2017-01-01.json' with open(schema, 'r') as file_: s3_client.put_object( Body=file_.read(), Bucket=config_test.config_bucket, Key=key_path, ) file_.seek(0) json_dict = json.load(file_) schema_s3_path = validator._find_schema() assert json_dict == validator._load_schema(schema_s3_path) @pytest.mark.integration def test_validate_data_frame( s3_client, config_test: Config, validator: Validator, ): schema = os.path.join(FIXTURES_PATH, 'validation', '2017-01-01.json') with open(schema, 'r') as file_: s3_client.put_object( Body=file_.read(), Bucket=config_test.config_bucket, Key='schemas/spotify/charts/v1/2017-01-01.json', ) valid_df_json = os.path.join(FIXTURES_PATH, 'validation', 'valid_df_source.json') with open(valid_df_json, 'r') as file_: df_data = json.load(file_) valid_df = pd.DataFrame(df_data) assert validator.validate_data_frame(valid_df) is True invalid_df_json = os.path.join(FIXTURES_PATH, 'validation', 'invalid_df_source.json') with open(invalid_df_json, 'r') as file_: df_data = json.load(file_) invalid_df = pd.DataFrame(df_data) assert validator.validate_data_frame(invalid_df) is False