@@ -48,3 +48,103 @@ def it_creates_an_event_without_metadata(self):
4848 with patch .object (Client , 'post' , return_value = data ) as mock_method :
4949 self .client .events .create (** data )
5050 mock_method .assert_called_once_with ('/events/' , data )
51+
52+ class DescribeBulkOperations (unittest .TestCase ): # noqa
53+ def setUp (self ): # noqa
54+ self .client = Client ()
55+
56+ self .job = {
57+ "app_id" : "app_id" ,
58+ "id" : "super_awesome_job" ,
59+ "created_at" : 1446033421 ,
60+ "completed_at" : 1446048736 ,
61+ "closing_at" : 1446034321 ,
62+ "updated_at" : 1446048736 ,
63+ "name" : "api_bulk_job" ,
64+ "state" : "completed" ,
65+ "links" : {
66+ "error" : "https://api.intercom.io/jobs/super_awesome_job/error" ,
67+ "self" : "https://api.intercom.io/jobs/super_awesome_job"
68+ },
69+ "tasks" : [
70+ {
71+ "id" : "super_awesome_task" ,
72+ "item_count" : 2 ,
73+ "created_at" : 1446033421 ,
74+ "started_at" : 1446033709 ,
75+ "completed_at" : 1446033709 ,
76+ "state" : "completed"
77+ }
78+ ]
79+ }
80+
81+ self .bulk_request = {
82+ "items" : [
83+ {
84+ "method" : "post" ,
85+ "data_type" : "event" ,
86+ "data" : {
87+ "event_name" : "ordered-item" ,
88+ "created_at" : 1438944980 ,
89+ "user_id" : "314159" ,
90+ "metadata" : {
91+ "order_date" : 1438944980 ,
92+ "stripe_invoice" : "inv_3434343434"
93+ }
94+ }
95+ },
96+ {
97+ "method" : "post" ,
98+ "data_type" : "event" ,
99+ "data" : {
100+ "event_name" : "invited-friend" ,
101+ "created_at" : 1438944979 ,
102+ "user_id" : "314159" ,
103+ "metadata" : {
104+ "invitee_email" : "pi@example.org" ,
105+ "invite_code" : "ADDAFRIEND"
106+ }
107+ }
108+ }
109+ ]
110+ }
111+
112+ self .events = [
113+ {
114+ "event_name" : "ordered-item" ,
115+ "created_at" : 1438944980 ,
116+ "user_id" : "314159" ,
117+ "metadata" : {
118+ "order_date" : 1438944980 ,
119+ "stripe_invoice" : "inv_3434343434"
120+ }
121+ },
122+ {
123+ "event_name" : "invited-friend" ,
124+ "created_at" : 1438944979 ,
125+ "user_id" : "314159" ,
126+ "metadata" : {
127+ "invitee_email" : "pi@example.org" ,
128+ "invite_code" : "ADDAFRIEND"
129+ }
130+ }
131+ ]
132+
133+ @istest
134+ def it_submits_a_bulk_job (self ): # noqa
135+ with patch .object (Client , 'post' , return_value = self .job ) as mock_method : # noqa
136+ self .client .events .submit_bulk_job (create_items = self .events )
137+ mock_method .assert_called_once_with ('/bulk/events' , self .bulk_request )
138+
139+ @istest
140+ def it_adds_events_to_an_existing_bulk_job (self ): # noqa
141+ self .bulk_request ['job' ] = {'id' : 'super_awesome_job' }
142+ with patch .object (Client , 'post' , return_value = self .job ) as mock_method : # noqa
143+ self .client .events .submit_bulk_job (
144+ create_items = self .events , job_id = 'super_awesome_job' )
145+ mock_method .assert_called_once_with ('/bulk/events' , self .bulk_request )
146+
147+ @istest
148+ def it_does_not_submit_delete_jobs (self ): # noqa
149+ with self .assertRaises (Exception ):
150+ self .client .events .submit_bulk_job (delete_items = self .events )
0 commit comments