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)
Ejemplo n.º 2
0
 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