def test_append_payload(self): payload_1 = self.payload.copy() payload_2 = self.payload.copy() payload_3 = self.payload.copy() timestamp = epoch() payload_1.update(request_address="Foo", user_agent="Foo", timestamp=timestamp) payload_2.update(request_address="Foo", user_agent="Foo", timestamp=timestamp+1) payload_3.update(request_address="Foo", user_agent="Foo", timestamp=timestamp+31*60) # Data with first session and first pageview data_1 = VDM.append_payload(payload_1, dict()) self.assertIsInstance(data_1['visitor_id'], str) self.assertIsInstance(data_1['account_id'], str) self.assertIsInstance(data_1['sessions'], dict) self.assertEqual(data_1['session_count'], 1) self.assertEqual(len(data_1['sessions']), 1) self.assertEqual(len(data_1['sessions'][0]['pageviews']), 1) # Add new pageview to existing session data_2 = VDM.append_payload(payload_2, data_1).copy() self.assertEqual(data_2['visitor_id'], data_1['visitor_id']) self.assertEqual(data_2['account_id'], data_1['account_id']) self.assertEqual(len(data_2['sessions']), 1) self.assertEqual(data_2['session_count'], 1) self.assertEqual(len(data_2['sessions'][0]['pageviews']), 2) # Add new session with new pageview data_3 = VDM.append_payload(payload_3, data_2).copy() self.assertEqual(data_3['visitor_id'], data_1['visitor_id']) self.assertEqual(data_3['account_id'], data_1['account_id']) self.assertEqual(len(data_3['sessions']), 2) self.assertEqual(data_3['session_count'], 2) self.assertEqual(len(data_3['sessions'][0]['pageviews']), 2) self.assertEqual(len(data_3['sessions'][1]['pageviews']), 1)
def store_payload(self, payload): """Adds payload to the stored data for this visitor, returns updated visitor data""" # TODO use shelve for dev & test, production nosql for live s = shelve.open(app.config.get('SHELVE_PATH')) data = s.get(self.guid(), dict()) data = VDM.append_payload(payload, data) s[self.guid()] = data s.close() return data