def test_delete_user_properties(self):

        dt = datetime.datetime.now()

        ga = Ga4mp(measurement_id=MEASUREMENT_ID,
                   api_secret=API_SECRET,
                   client_id=CLIENT_ID)

        ga.set_user_property('user_id', 'BabyYoda2000')
        ga.set_user_property('non_personalized_ads', True)
        ga.set_user_property('enterprise', False)

        ga.delete_user_property('user_id')
        ga.delete_user_property('non_personalized_ads')
        ga.delete_user_property('enterprise')

        event_type = "delete_add_user_properties"
        event_parameters = {"paramater_key_1": "testing - " + str(dt)}
        event = {"name": event_type, "params": event_parameters}
        events = [event]
        batched_event_list = [
            events[event:event + 25] for event in range(0, len(events), 25)
        ]
        status_code = ga._http_post(batched_event_list, date=dt)

        acceptable_http_status_codes = [200, 201, 204]

        assert status_code in acceptable_http_status_codes
    def test_check_params_5_no_warning(self, capture):

        events_correct_no_warning = [{
            'name': 'level_end',
            'params': {
                'level_name': 'First',
                'success': 'True'
            }
        }]

        Ga4mp._check_params(self, events_correct_no_warning)

        logger.info('input validated')

        expected_log = ('test_ga4mp', 'INFO', "input validated")

        capture.check(expected_log, )
    def test_check_params_2_events_not_a_list(self):

        events_not_a_list = ({
            'name': 'level_end',
            'params': {
                'level_name': 'First',
                'success': 'True'
            }
        }, {
            'name': 'level_up',
            'params': {
                'character': 'John Madden',
                'level': 'First'
            }
        })
        with pytest.raises(AssertionError, match="events should be a list"):
            Ga4mp._check_params(self, events_not_a_list)
    def test_check_params_6_warning(self, capture):

        events_should_get_warning = [{
            'name': 'level_end',
            'params': {
                'level_name': 'First',
                'incorrect_key_causes_warning': 'True'
            }
        }]

        Ga4mp._check_params(self, events_should_get_warning)

        expected_log = (
            'ga4mp.ga4mp', 'WARNING',
            "WARNING: Event parameters do not match event type.\nFor level_end event type, the correct parameter(s) are ['level_name', 'success'].\nFor a breakdown of currently supported event types and their parameters go here: https://support.google.com/analytics/answer/9267735\n"
        )

        capture.check(expected_log, )
    def test_check_params_4_events_incorrect_key(self):

        events_incorrect_key = [{
            'incorrect_key_causes_error': 'level_end',
            'params': {
                'level_name': 'First',
                'success': 'True'
            }
        }, {
            'name': 'level_up',
            'params': {
                'character': 'John Madden',
                'level': 'First'
            }
        }]

        with pytest.raises(AssertionError,
                           match='each event should have a "name" key'):
            Ga4mp._check_params(self, events_incorrect_key)
    def test_check_params_3_event_not_a_dict(self):

        events_event_not_a_dict = [{
            'name': 'level_end',
            'params': {
                'level_name': 'First',
                'success': 'True'
            }
        },
                                   [
                                       'name', 'level_up', 'params', {
                                           'character': 'John Madden',
                                           'level': 'First'
                                       }
                                   ]]

        with pytest.raises(AssertionError,
                           match="each event should be a dictionary"):
            Ga4mp._check_params(self, events_event_not_a_dict)
    def test_check_params_1_events_correct(self):

        events_correct = [{
            'name': 'level_end',
            'params': {
                'level_name': 'First',
                'success': 'True'
            }
        }, {
            'name': 'level_up',
            'params': {
                'character': 'John Madden',
                'level': 'First'
            }
        }]

        Ga4mp._check_params(self, events_correct)

        assert True
    def test_datetime_arg(self):
        dt = datetime.datetime.now()

        ga = Ga4mp(measurement_id=MEASUREMENT_ID,
                   api_secret=API_SECRET,
                   client_id=CLIENT_ID)

        event_type = "test_datetime_now"
        event_parameters = {
            "paramater_key_1": "parameter_1",
        }
        event = {"name": event_type, "params": event_parameters}
        events = [event]
        batched_event_list = [
            events[event:event + 25] for event in range(0, len(events), 25)
        ]
        status_code = ga._http_post(batched_event_list, date=dt)

        acceptable_http_status_codes = [200, 201, 204]

        assert status_code in acceptable_http_status_codes
    def test_http_status_code(self):

        # Create an instance of GA4 object
        ga = Ga4mp(measurement_id=MEASUREMENT_ID,
                   api_secret=API_SECRET,
                   client_id=CLIENT_ID)

        # Specify event type and parameters
        event_type = "new_custom_event"
        event_parameters = {
            "parameter_key_1": "parameter_1",
            "parameter_key_2": "parameter_2",
        }
        event = {"name": event_type, "params": event_parameters}
        events = [event]
        batched_event_list = [
            events[event:event + 25] for event in range(0, len(events), 25)
        ]
        status_code = ga._http_post(batched_event_list)

        acceptable_http_status_codes = [200, 201, 204]

        assert status_code in acceptable_http_status_codes
try:
    credentials = json.load(open("./credentials/credentials.json"))

except:
    credentials = json.load(open("../credentials/credentials.json"))

MEASUREMENT_ID = credentials['MEASUREMENT_ID']
API_SECRET = credentials['API_SECRET']
CLIENT_ID = credentials['CLIENT_ID']

if __name__ == '__main__':

    event_type = 'stuff'
    event_parameters = {
        'parameter_1': 'parameter_1_value',
        'parameter_2': 'parameter_2_value'
    }

    event = {'name': event_type, 'params': event_parameters}
    events = [
        event, event, event, event, event, event, event, event, event, event,
        event, event, event, event, event, event, event, event, event, event,
        event, event, event, event, event, event
    ]

    ga = Ga4mp(measurement_id=MEASUREMENT_ID,
               api_secret=API_SECRET,
               client_id=CLIENT_ID)

    ga.send(events)