33import pytest
44from splitio .api import events , client , APIException
55from splitio .models .events import Event
6- from splitio .client .util import SdkMetadata
6+ from splitio .client .util import get_metadata
7+ from splitio .client .config import DEFAULT_CONFIG
8+ from splitio .version import __version__
79
810
911class EventsAPITests (object ):
1012 """Impressions API test cases."""
13+ events = [
14+ Event ('k1' , 'user' , 'purchase' , 12.50 , 123456 , None ),
15+ Event ('k2' , 'user' , 'purchase' , 12.50 , 123456 , None ),
16+ Event ('k3' , 'user' , 'purchase' , None , 123456 , {"test" : 1234 }),
17+ Event ('k4' , 'user' , 'purchase' , None , 123456 , None )
18+ ]
19+ eventsExpected = [
20+ {'key' : 'k1' , 'trafficTypeName' : 'user' , 'eventTypeId' : 'purchase' , 'value' : 12.50 , 'timestamp' : 123456 , 'properties' : None },
21+ {'key' : 'k2' , 'trafficTypeName' : 'user' , 'eventTypeId' : 'purchase' , 'value' : 12.50 , 'timestamp' : 123456 , 'properties' : None },
22+ {'key' : 'k3' , 'trafficTypeName' : 'user' , 'eventTypeId' : 'purchase' , 'value' : None , 'timestamp' : 123456 , 'properties' : {"test" : 1234 }},
23+ {'key' : 'k4' , 'trafficTypeName' : 'user' , 'eventTypeId' : 'purchase' , 'value' : None , 'timestamp' : 123456 , 'properties' : None },
24+ ]
1125
1226 def test_post_events (self , mocker ):
1327 """Test impressions posting API call."""
1428 httpclient = mocker .Mock (spec = client .HttpClient )
1529 httpclient .post .return_value = client .HttpResponse (200 , '' )
16- sdk_metadata = SdkMetadata ('python-1.2.3' , 'some_machine_name' , '123.123.123.123' )
30+ cfg = DEFAULT_CONFIG .copy ()
31+ cfg .update ({'ipAddressesEnabled' : True , 'machineName' : 'some_machine_name' , 'machineIp' : '123.123.123.123' })
32+ sdk_metadata = get_metadata (cfg )
1733 events_api = events .EventsAPI (httpclient , 'some_api_key' , sdk_metadata )
18- response = events_api .flush_events ([
19- Event ('k1' , 'user' , 'purchase' , 12.50 , 123456 , None ),
20- Event ('k2' , 'user' , 'purchase' , 12.50 , 123456 , None ),
21- Event ('k3' , 'user' , 'purchase' , None , 123456 , {"test" : 1234 }),
22- Event ('k4' , 'user' , 'purchase' , None , 123456 , None )
23- ])
34+ response = events_api .flush_events (self .events )
2435
2536 call_made = httpclient .post .mock_calls [0 ]
2637
@@ -29,29 +40,42 @@ def test_post_events(self, mocker):
2940
3041 # validate key-value args (headers)
3142 assert call_made [2 ]['extra_headers' ] == {
32- 'SplitSDKVersion' : 'python-1.2.3' ,
43+ 'SplitSDKVersion' : 'python-%s' % __version__ ,
3344 'SplitSDKMachineIP' : '123.123.123.123' ,
3445 'SplitSDKMachineName' : 'some_machine_name'
3546 }
3647
3748 # validate key-value args (body)
38- assert call_made [2 ]['body' ] == [
39- {'key' : 'k1' , 'trafficTypeName' : 'user' , 'eventTypeId' : 'purchase' , 'value' : 12.50 , 'timestamp' : 123456 , 'properties' : None },
40- {'key' : 'k2' , 'trafficTypeName' : 'user' , 'eventTypeId' : 'purchase' , 'value' : 12.50 , 'timestamp' : 123456 , 'properties' : None },
41- {'key' : 'k3' , 'trafficTypeName' : 'user' , 'eventTypeId' : 'purchase' , 'value' : None , 'timestamp' : 123456 , 'properties' : {"test" : 1234 }},
42- {'key' : 'k4' , 'trafficTypeName' : 'user' , 'eventTypeId' : 'purchase' , 'value' : None , 'timestamp' : 123456 , 'properties' : None },
43- ]
49+ assert call_made [2 ]['body' ] == self .eventsExpected
4450
4551 httpclient .reset_mock ()
4652 def raise_exception (* args , ** kwargs ):
4753 raise client .HttpClientException ('some_message' )
4854 httpclient .post .side_effect = raise_exception
4955 with pytest .raises (APIException ) as exc_info :
50- response = events_api .flush_events ([
51- Event ('k1' , 'user' , 'purchase' , 12.50 , 123456 , None ),
52- Event ('k2' , 'user' , 'purchase' , 12.50 , 123456 , None ),
53- Event ('k3' , 'user' , 'purchase' , None , 123456 , None ),
54- Event ('k4' , 'user' , 'purchase' , None , 123456 , None )
55- ])
56+ response = events_api .flush_events (self .events )
5657 assert exc_info .type == APIException
5758 assert exc_info .value .message == 'some_message'
59+
60+ def test_post_events_ip_address_disabled (self , mocker ):
61+ """Test impressions posting API call."""
62+ httpclient = mocker .Mock (spec = client .HttpClient )
63+ httpclient .post .return_value = client .HttpResponse (200 , '' )
64+ cfg = DEFAULT_CONFIG .copy ()
65+ cfg .update ({'ipAddressesEnabled' : False })
66+ sdk_metadata = get_metadata (cfg )
67+ events_api = events .EventsAPI (httpclient , 'some_api_key' , sdk_metadata )
68+ response = events_api .flush_events (self .events )
69+
70+ call_made = httpclient .post .mock_calls [0 ]
71+
72+ # validate positional arguments
73+ assert call_made [1 ] == ('events' , '/events/bulk' , 'some_api_key' )
74+
75+ # validate key-value args (headers)
76+ assert call_made [2 ]['extra_headers' ] == {
77+ 'SplitSDKVersion' : 'python-%s' % __version__ ,
78+ }
79+
80+ # validate key-value args (body)
81+ assert call_made [2 ]['body' ] == self .eventsExpected
0 commit comments