# import datetime # import logging # # import pandas # import pytest # from genson.schema import builder # from jsonschema import validate, ValidationError # # from app.api_client import ApiClient # from ui_automation_framework.utils import AppConfig # from ui_automation_framework.utils import logger as cl # # start_date = "2020-10-25" # end_date = "2020-10-31" # last_date = "2020-10-02" # # isrcs from one playlist # isrc = 'USSM11303954' # isrc2 = 'USUM71913350' # isrc3 = 'DEUM71807062' # isrc4 = 'USSM19400325' # isrc5 = 'NOG841549010' # isrc6 = 'USJI10301005' # spotify_playlist_id = '37i9dQZF1DWTwnEm1IYyoj' # apple_playlist_id = 'pl.00a4cebedad8482f9f5832fe0156438c' # market = 'us' # market2 = 'gb' # endpoints = [ # f'/dsp-api/delphi/total-streams-count-bulk?isrc={isrc}&market={market}', # f'/apple-consumer-analytics/track-container-summary-2-bulk?full=true&isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}', # f'/spotify-consumer-analytics-compat/track-playlist-summary-2?isrc={isrc}&startDate={start_date}&endDate={end_date}', # f'/spotify-consumer-analytics-compat/track-in-playlist-2?isrc={isrc}&playlistId={spotify_playlist_id}&startDate={start_date}&endDate={end_date}', # f'/spotify-consumer-analytics-compat/track-release-to-date?isrc={isrc}&endDate={end_date}', # f'/spotify-consumer-analytics-compat/track-first-stream-date?isrc={isrc}', # f'/spotify-consumer-analytics-compat/latest-date', # f'/spotify-consumer-analytics-compat/track-playlist-summary?isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}', # f'/spotify-consumer-analytics-compat/track-playlist-summary-2?isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}', # f'/spotify-consumer-analytics-compat/track-in-playlist?isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}&playlistUri=spotify:playlist:{spotify_playlist_id}', # f'/spotify-consumer-analytics-compat/track-in-playlist-2?isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}&playlistId=spotify:playlist:{spotify_playlist_id}', # # f'/spotify-consumer-analytics-compat/tracks-in-playlist-summary-bulk?isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}&playlistUri=spotify:playlist:{spotify_playlist_id}', # # f'/spotify-consumer-analytics-compat/tracks-in-playlist-summary-2-bulk?isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}&playlistId={spotify_playlist_id}', # f'/apple-consumer-analytics/track-first-stream-date?isrc={isrc}&isrc={isrc2}', # # f'/apple-consumer-analytics/track-compat-bulk?isrc={isrc}&startDate={start_date}&endDate={end_date}', # # f'/apple-consumer-analytics/track-compat-2-bulk?isrc={isrc}&startDate={start_date}&endDate={end_date}', # f'/apple-consumer-analytics/track-container-summary?isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}', # f'/apple-consumer-analytics/track-container-summary-2-bulk?isrc={isrc}&startDate={start_date}&endDate={end_date}&countryCode={market}', # f'/apple-consumer-analytics/track-in-container-bulk?isrc={isrc}&startDate={start_date}&endDate={end_date}&containerId={apple_playlist_id}&countryCode={market}', # f'/apple-consumer-analytics/track-release-to-date-summary?isrc={isrc}&endDate={end_date}&countryCode={market}', # f'/apple-consumer-analytics/track-first-stream-date?isrc={isrc}&isrc={isrc2}', # # f'/apple-consumer-analytics/track-first-stream-date-except-1?isrc={isrc}&isrc={isrc2}&isrc={isrc3}', # f'/apple-consumer-analytics/track-demographics?isrc={isrc}&isrc={isrc2}&startDate={start_date}&endDate={end_date}', # # f'/dsp-api/delphi/streams?start_date={start_date}&end_date={end_date}&dsp=spotify&isrc={isrc}&include=all&country_code={market}', # f'/dsp-api/consumer_analytics/streams-latest-date', # f'/dsp-api/consumer_analytics/tracks-first-stream-dates?isrc={isrc},{isrc2},{isrc3}&vendor=apple', # f'/dsp-api/consumer_analytics/v1/track-per-country?start_date={start_date}&end_date={end_date}&market={market}&streams_only=false&vendor=spotify&isrc={isrc}', # f'/dsp-api/consumer_analytics/track-per-country?isrc={isrc}&vendor=spotify&streams_only=false&start_date={start_date}&end_date={end_date}', # # not available through private api yet # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-first-stream-date-except-1?isrc={isrc},{isrc2},{isrc3}', # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-compat-2?isrc={isrc},{isrc2},{isrc3}&startDate={start_date}&endDate={end_date}', # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-compat?isrc={isrc}&startDate={start_date}&endDate={end_date}', # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-release-to-date?isrc={isrc}&endDate={end_date}', # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-demographics?isrc={isrc},{isrc2}&startDate={start_date}&endDate={end_date}', # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-release-to-date-summary?isrc=USSM19902991&endDate=2020-10-02&countryCode=us', # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-first-stream-date?isrc=USSM19902991,USSM19902990', # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-container-summary?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02&countryCode=us', # # f'/dsp-api/consumer_analytics/apple-consumer-analytics/track-in-container?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02&containerId=3296287&countryCode=us', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/latest-date', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-first-stream-date?isrc=USSM19902991,USSM19902990,USSM19902989', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-per-country-3?isrc=USSM19902991,USSM19902990,USSM19902989&startDate=2020-10-01&endDate=2020-10-02', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-per-country?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-release-to-date?isrc=USSM19902991&endDate=2020-10-02', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-playlist-summary-2?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02&countryCode=us', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-playlist-summary?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02&countryCode=us', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-in-playlist?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02&countryCode=us&playlistUri=spotify:playlist:0jzu0LvJJZ6Ayw9jRvy9WS', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/tracks-in-playlist-summary?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02&countryCode=us&playlistUri=spotify:playlist:0jzu0LvJJZ6Ayw9jRvy9WS', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-per-country-2?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/track-in-playlist-2?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02&countryCode=us&playlistUri=spotify:playlist:0jzu0LvJJZ6Ayw9jRvy9WS', # # f'/dsp-api/consumer_analytics/spotify-consumer-analytics-compat/tracks-in-playlist-summary-2?isrc=USSM19902991&startDate=2020-10-01&endDate=2020-10-02&countryCode=us&playlistId=0jzu0LvJJZ6Ayw9jRvy9WS', # # end # f'/dsp-api/delphi/amazon/tracks/streams?isrc={isrc},{isrc2},{isrc3}&start_date={start_date}&end_date={end_date}', # f'/dsp-api/delphi/amazon/tracks/v1/streams?isrc={isrc},{isrc2},{isrc3}&start_date={start_date}&end_date={end_date}', # f'/dsp-api/consumer_analytics/is_sony_tracks?isrc={isrc},{isrc2},{isrc3},{isrc4}', # f'/dsp-api/consumer_analytics/streams_monitoring_data?isrc={isrc}&start_date={start_date}&end_date={end_date}', # f'/dsp-api/consumer_analytics/total_streams_count?isrc={isrc}&end_date={end_date}&market={market}', # f'/dsp-api/consumer_analytics/date_range_streams?isrc={isrc}&end_date={end_date}&market={market}&start_date={start_date}', # f'/dsp-api/consumer_analytics/stream_graph?isrc={isrc}&end_date={end_date}&start_date={start_date}', # f'/dsp-api/consumer_analytics/detailed-streams-data?isrc={isrc}&end_date={end_date}&start_date={start_date}', # f'/dsp-api/consumer_analytics/daily-and-weekly-streams-count?isrc={isrc}&last_date={last_date}&market={market}', # f'/dsp-api/consumer_analytics/playlists-summary?isrc={isrc}&last_date={last_date}&vendor=apple', # f'/dsp-api/consumer_analytics/tracks-streams?isrc={isrc},{isrc2}&start_date={start_date}&end_date={end_date}', # f'/dsp-api/delphi/streams_monitoring_data?isrc={isrc}&start_date={start_date}&end_date={end_date}', # f'/dsp-api/delphi/total_streams_count?isrc={isrc}&end_date={end_date}&market={market}&per_vendors=true', # f'/dsp-api/delphi/total-streams-count-bulk?isrc={isrc},{isrc2}&end_date={end_date}&market={market}', # f'/dsp-api/delphi/date_range_streams?isrc={isrc}&end_date={end_date}&market={market}&start_date={start_date}', # f'/dsp-api/delphi/stream_graph?isrc={isrc}&end_date={end_date}&start_date={start_date}', # f'/dsp-api/analytics/v1/total-streams-count?isrc={isrc}&market={market}&per_vendors=true', # f'/dsp-api/analytics/v1/daily-and-weekly-streams-count?isrc={isrc}&market={market}&per_vendors=true&last_date={last_date}', # f'/dsp-api/analytics/v1/streams-dates?isrc={isrc},{isrc2}', # f'/dsp-api/analytics/v1/weekly-streams-count?isrc={isrc}&market={market}&per_vendors=true&last_date={last_date}', # f'/dsp-api/analytics/v1/date-range-streams?isrc={isrc}&per_vendors=true&start_date={start_date}&end_date={end_date}', # f'/dsp-api/analytics/v1/tracks-date-range-streams?isrc={isrc},{isrc2}&start_date={start_date}&end_date={end_date}', # f'/dsp-api/analytics/v1/streams-graph?isrc={isrc}&end_date={end_date}&start_date={start_date}&per_vendors=true', # f'/dsp-api/analytics/v1/streams-monitoring?isrc={isrc}&end_date={end_date}&start_date={start_date}', # f'/dsp-api/analytics/v1/detailed-streams-graph?isrc={isrc}&end_date={end_date}&start_date={start_date}&vendor=amazon', # f'/dsp-api/analytics/v1/markets-streams-graph?isrc={isrc}&end_date={end_date}&markets={market},{market2}&start_date={start_date}&per_vendors=true', # f'/dsp-api/analytics/v1/track-markets-list?isrc={isrc}&end_date={end_date}&start_date={start_date}&vendors=spotify,amazon', # ] # # # endpoints_5 = [f'/dsp-api/delphi/total_streams_count?isrc={isrc}&market={market}', # # f'/dsp-api/delphi/total_streams_count?isrc={isrc2}&market={market}', # # f'/dsp-api/delphi/total_streams_count?isrc={isrc3}&market={market}', # # f'/dsp-api/delphi/total_streams_count?isrc={isrc4}&market={market}', # # f'/dsp-api/delphi/total_streams_count?isrc={isrc5}&market={market}', # # f'/dsp-api/delphi/total_streams_count?isrc={isrc6}&market={market}' # # ] # # log = cl.Logger(logging.DEBUG) # # new_env = 'test' # api_client_old = ApiClient(AppConfig.get("api_auth_url"), AppConfig.get("qa_api_url"), 30) # token_old = api_client_old.authorize_mobile() # api_client_new = ApiClient(AppConfig.get("api_auth_url"), f'https://{new_env}-privateapi.filtr.com', 30) # token_new = api_client_old.authorize_mobile() # enps = [] # dfs = [] # # # # @pytest.mark.tryfirst() # # def test_status_codes(): # # new_codes = [] # # old_codes = [] # # ents = [] # # e_names = [] # # # # for e in endpoints: # # # get status codes # # code_old = api_client_old.get_response(e, token_old, env='staging')['status_code'] # # code_new = api_client_new.get_response(e, token_new, env=new_env)['status_code'] # # if code_old != 200: # # code_old = f'STATUS CODE: {code_old}' # # if code_new != 200: # # code_new = f'STATUS CODE: {code_new}' # # # endpoint # # log.info(f'endpoint: {e}') # # # # endp_short_name = e.split('/')[-1].split('?')[0] # # e_names.append(endp_short_name) # # new_codes.append(code_new) # # old_codes.append(code_old) # # ents.append(e) # # # # # export to excel # # df = pandas.DataFrame({'endpoint_name': e_names, # # 'status_code_new': new_codes, # # 'status_code_old': old_codes, # # 'full_uri': ents}) # # df.to_excel('get_streams_endpoint_STATUS_CODES.xlsx') # # # @pytest.mark.tryfirst() # # def test_schema(): # # new_codes = [] # # old_codes = [] # # ents = [] # # are_jsons_correct = [] # # e_names = [] # # df = pandas.DataFrame() # # # # for e in endpoints: # # # get old response # # try: # # response_old_endpoint = api_client_old.get_response(e, token_old, env='staging') # # api_resp_old = response_old_endpoint['body'] # # code_old = response_old_endpoint['status_code'] # # if code_old != 200: # # code_old = f'STATUS CODE: {code_old}' # # # # # get new response # # response_new_endpoint = api_client_new.get_response(e, token_new, env=new_env) # # api_resp_new = response_new_endpoint['body'] # # code_new = response_new_endpoint['status_code'] # # if code_new != 200: # # code_new = f'STATUS CODE: {code_new}' # # # # # generate json schema from old endpoint # # sb = builder.SchemaBuilder() # # sb.add_object(obj=api_resp_old) # # # # log.info(f'response old: {api_resp_old}') # # log.info(f'response new: {api_resp_new}') # # log.info(f'schema: {sb.to_schema()}') # # log.info(f'endpoint: {e}') # # # # # validate new endpoint response with old json schema # # # # validate(instance=api_resp_new, schema=sb.to_schema()) # # correct_json = True # # except ValidationError as error: # # correct_json = error # # endp_short_name = e.split('/')[-1].split('?')[0] # # e_names.append(endp_short_name) # # new_codes.append(code_new) # # old_codes.append(code_old) # # are_jsons_correct.append(correct_json) # # # # ents.append(e) # # # # # export to excel # # df = pandas.DataFrame({'endpoint_name': e_names, # # 'status_code_new': new_codes, # # 'status_code_old': old_codes, # # 'is_SCHEMA_correct': are_jsons_correct, # # 'full_uri': ents}) # # df.to_excel('compare_streams_endpoint_to_SCHEMA_VALIDATION.xlsx') # # @pytest.mark.tryfirst() # def test_compare_new_old_response(): # all_endpoint_short = [] # all_endpoints_full = [] # new_codes = [] # old_codes = [] # are_jsons_correct = [] # are_schema_correct = [] # df = pandas.DataFrame() # # markets = [] # # global_m = [] # # for e in endpoints: # # get old response # response_old_endpoint = api_client_old.get_response(e, token_old, env='staging') # api_resp_old = response_old_endpoint['body'] # code_old = response_old_endpoint['status_code'] # if code_old != 200: # code_old = f'STATUS CODE: {code_old}' # # # get new response # response_new_endpoint = api_client_new.get_response(e, token_new, env=new_env) # api_resp_new = response_new_endpoint['body'] # code_new = response_new_endpoint['status_code'] # if code_new != 200: # code_new = f'STATUS CODE: {code_new}' # # log.info(f'response old: {api_resp_old}') # log.info(f'response new: {api_resp_new}') # log.info(f'endpoint: {e}') # # # compare old and new response # dict_old = dict(api_resp_old) # dict_new = dict(api_resp_new) # # # schema validation # try: # sb = builder.SchemaBuilder() # sb.add_object(obj=api_resp_old) # validate(instance=api_resp_new, schema=sb.to_schema()) # correct_schema = True # except ValidationError as error: # correct_schema = error # # try: # assert dict_new == dict_old # not_different = True # except AssertionError as error: # not_different = f"FALSE: {str(error).replace('Use -v to get the full diff', '')}" # endp_short_name = e.split('/')[-1].split('?')[0] # all_endpoints_full.append(e) # all_endpoint_short.append(endp_short_name) # are_jsons_correct.append(not_different) # new_codes.append(code_new) # old_codes.append(code_old) # are_schema_correct.append(correct_schema) # # markets.append(f"{100*api_resp_new['market']/api_resp_old['market']}%") # # global_m.append(f"{100 * api_resp_new['global'] / api_resp_old['global']}%") # df = pandas.DataFrame({'endpoint': all_endpoint_short, # 'resp_code_old': old_codes, # 'resp_code_new': new_codes, # 'is_SCHEMA_correct': are_schema_correct, # 'DATA_MATCH': are_jsons_correct, # # 'markets_100%': markets, # # 'global_100%': global_m, # 'full uri': all_endpoints_full}) # df.to_excel(f'streams_endpoints_old_new_DATA_MATCH.xlsx')