def test_track_playtime_counts_time_between_track_start_and_track_end( self): session = Session() session.add_event(Event('track_start', 50, 'A', '101')) session.add_event(Event('track_end', 100, 'A', '101')) assert session.track_playtime == 50
def test_prolematic_slug(self): location = 'bar' event = Event(title='Festipop 2010 avec Roots League, Lion Roots et ... Iration Steppas !', location=location, date='2010-05-28') expected_slug = u'28-05-2010_festipop-2010-avec-roots-league-lion-roots-et-iration-steppas' event.put() self.assertEqual(event.slug, expected_slug)
def test_duration_is_time_between_last_and_first_event(self): session = Session() session.add_event(Event('track_end', 50, 'A', '101')) session.add_event(Event('track_end', 150, 'A', '101')) session.add_event(Event('track_end', 100, 'A', '101')) assert session.duration == 50
def test_MISSING_file_already_in_db_not_exists( self ): self.engine.db.add( file = 'filename' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) ev.isInDB = True self.assertEqual( ev, newEv ) # Файла на диске нет, а в базе есть - пропажа файла.
def test_last_time_comes_from_last_event(self): session = Session() session.add_event(Event('track_end', 50, 'A', '101')) session.add_event(Event('track_end', 150, 'A', '101')) session.add_event(Event('track_end', 100, 'A', '101')) assert session.last_time == 100
def test_track_playtime_supports_paused_heartbeated_unfinished_sessions( self): session = Session() session.add_event(Event('track_start', 50, 'A', '101')) session.add_event(Event('pause', 60, 'A', '101')) session.add_event(Event('track_heartbeat', 70, 'A', '101')) assert session.track_playtime == 10
def test_track_playtime_supports_pauses(self): session = Session() session.add_event(Event('track_start', 50, 'A', '101')) session.add_event(Event('pause', 60, 'A', '101')) session.add_event(Event('play', 70, 'A', '101')) session.add_event(Event('track_end', 100, 'A', '101')) assert session.track_playtime == 40
def test_NEW_file_already_in_db_not_exists( self ): self.engine.db.add( file = 'filename', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) ev.action = Event.ACTION.MISSING # Функция должна обнаружить пропажу файла, так как в базе он есть ev.isInDB = True self.assertEqual( ev, newEv )
def test_MISSING_file_already_in_db_exists_good_hash( self ): self.engine.db.add( file = 'filename', hash = None ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.NOT_PROCESSING, newEv.action ) # Файл на диске совпал с тем, что в базе - игнорируем.
def test_populate_event(self): location = 'bar' event = Event(title='Hello World Event', location=location, date='2009-01-25') expected_slug = u'25-01-2009_hello-world-event' event.put() event = Event.gql("WHERE slug = '%s'" % str(expected_slug)).get() assert event.location == location
def test_UPDATED_file_not_in_db( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.UPDATED with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( newEv.action, Event.ACTION.NEW ) self.assertEqual( newEv.isInDB, False )
def test_ad_count_counts_number_of_ad_starts(self): session = Session() session.add_event(Event('ad_start', 50, 'A', '101')) session.add_event(Event('ad_start', 50, 'A', '101')) session.add_event(Event('ad_end', 50, 'A', '101')) session.add_event(Event('ad_start', 50, 'A', '101')) assert session.ad_count == 3
def test_NEW_file_not_in_db_exists( self ): ev = Event( 'filename', '', False,self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) ev.isInDB = False ev.info = None self.assertEqual( ev, newEv )
def test_end(self): event = Event(start=datetime.datetime(year=2000, month=6, day=15, hour=12, minute=30, second=30), duration=datetime.timedelta(seconds=3700)) self.assertEqual(event.end().year, 2000) self.assertEqual(event.end().month, 6) self.assertEqual(event.end().day, 15) self.assertEqual(event.end().hour, 13) self.assertEqual(event.end().minute, 32) self.assertEqual(event.end().second, 10)
def test_RENAMED_file_not_in_db( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.RENAMED with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: new_path = os.path.join( self.DEFAULT_CFG[0], 'new_filename' ) newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action, new_path ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.NEW, newEv.action ) # Файл был переименован, но в базе его нет - новый файл self.assertEqual( new_path, newEv.path )
def test_RENAMED_dir( self ): ev = Event( '', 'dir', True, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.RENAMED with unittest.mock.patch( 'os.path.isdir', return_value = True ) as isdir_test: new_path = os.path.join( self.DEFAULT_CFG[0], 'new_dir' ) newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action, new_path ) isdir_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.RENAMED, newEv.action ) # Папка была переименована, в базе есть - нужно обновить базу self.assertEqual( new_path, newEv.info )
def test_UPDATED_file( self ): self.engine.db.add( file = 'filename', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0], 'new_hash' ) ev.action = Event.ACTION.UPDATED self.engine.processEvent( ev ) elem = self.engine.db.find( hash = 'new_hash' ) self.assertEqual( len( self.engine.db.find( hash = 'xxx' ) ), 0 ) self.assertEqual( len( elem ), 1 ) self.assertEqual( elem[0]['file'], ev.fileName )
def test_UPDATED_file_already_in_db_diff_hash( self ): self.engine.db.add( file = 'filename', hash = 'same' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.UPDATED with unittest.mock.patch( 'fileutils.get_hash', return_value = 'same' ) as hash_test: with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) hash_test.assert_called_once_with( ev.path ) self.assertEqual( newEv.action, Event.ACTION.NOT_PROCESSING )
def test_event_page(self): location = 'Somewhere' title = "This+is*a;weird Title" event = Event(title=title, date=self.str2date('2009-01-31'), location=location, published=True) event.put() slug = "31-01-2009_this-is-a-weird-title" self.assertEqual(event.slug, slug) response = self.app.get('/events/%s' % slug) assert location in response, location + ' should be in ' + response.body
def test_MISSING_file_not_in_db_exists( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) ev.action = Event.ACTION.NEW # Пришло событие об удалении файла, а он есть, добавляем в базу. ev.isInDB = False ev.info = None self.assertEqual( ev, newEv )
def test_MISSING_file_already_in_db_exists_bad_hash( self ): self.engine.db.add( file = 'filename', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) ev.isInDB = True ev.action = Event.ACTION.BAD_HASH # Файл на диске есть, в базе есть, но они не совпали. ev.info = self.engine.db.find( file = 'filename' ) self.assertEqual( ev, newEv )
def test_NEW_file_already_in_db_exists_bad_hash( self ): self.engine.db.add( file = 'filename', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) ev.isInDB = True ev.action = Event.ACTION.BAD_HASH # Так как оказывается, что тот файл, который сейчас на диске не совпадает с тем, что в базе. ev.info = self.engine.db.find( file = 'filename' ) self.assertEqual( ev, newEv )
def test_RENAMED_file_already_in_db( self ): self.engine.db.add( file = 'filename', hash = None ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.RENAMED with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: new_path = os.path.join( self.DEFAULT_CFG[0], 'new_filename' ) newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action, new_path ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.RENAMED, newEv.action ) # Файл был переименован, в базе есть - нужно обновить базу self.assertEqual( ev.path, newEv.path ) self.assertEqual( get_file_and_dir( new_path, self.DEFAULT_CFG[0], False ), newEv.info )
def test_NEW_file_not_in_db_another_file_in_db_with_same_hash( self ): self.engine.db.add( file = 'duplicate', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: with unittest.mock.patch( 'fileutils.get_hash', return_value = 'xxx' ) as get_hash_patch: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) get_hash_patch.assert_called_once_with( ev.path ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.DUPLICATE, newEv.action ) # Файл на диске имеет такой же хэш как и файл в базе - дубликат self.assertEqual( self.engine.db.find( file = 'duplicate' ), newEv.info )
def test_get_formatted_output_returns_in_correct_format(self): session = Session() session.add_event(Event('stream_start', 50, 'A', '101')) session.add_event(Event('ad_start', 60, 'A', '101')) session.add_event(Event('ad_end', 70, 'A', '101')) session.add_event(Event('track_start', 80, 'A', '101')) session.add_event(Event('track_heartbeat', 90, 'A', '101')) assert session.get_formatted_output() == { 'user_id': 'A', 'content_id': '101', 'session_start': 50, 'session_end': 90, 'total_time': 40, 'track_playtime': 10, 'event_count': 5, 'ad_count': 1 }
def test_create_event(self): form = self.app.get('/admin/events/new').form form['title'] = 'This is a test event' form['date'] = '25/01/2000' form['image'] = ('cows.jpg', open('tests/small_cows.jpg').read()) form['description'] = 'great event' form['location'] = 'Tokyo' response = form.submit() event = Event.gql("WHERE title = :1", 'This is a test event').get() self.assertEqual(event.description, 'great event') self.assertEqual(event.location, 'Tokyo') self.assertEqual(event.date.day, 25) assert event.image
def test_json_release(): ev: Event = Event.fromPath("fixtures/release.json") assert ev.repository.name == "Hello-World" assert ev.is_release assert ev.base == "https://api.github.com/repos/Codertocat/Hello-World"
def test_is_expired_is_true_60_seconds_after_last_event(self): session = Session() session.add_event(Event('ad_start', 50, 'A', '101')) assert session.is_expired(50 + 60)
{ 'name': "Test event 2", 'lat': "40.123435", 'lng': "40.23432" }, { 'name': "Test event 3", 'lat': "40.123435", 'lng': "40.23432" }, { 'name': "Test event 4", 'lat': "40.123435", 'lng': "40.23432" }, ] try: db.drop_all() except: pass db.create_all() for event in events: db.session.add(Event(**event)) db.session.commit() loaded_events = Event.query.all() print(json.dumps([x.as_dict() for x in loaded_events]))
def test_double_item_in_db( self ): self.engine.db.add( file = 'filename', hash = None ) self.engine.db.add( file = 'filename', hash = None ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW self.assertRaises( RuntimeError, self.engine.prepareEvent, ev.path, self.DEFAULT_CFG[0], ev.action )
def test_session_id_property(self): event = Event('track_end', 100, 'A', '101') assert event.session_id == ('A', '101')
def construct_event( self, action, d = '', isdir = False, name = 'filename' ): ev = Event( name, d, isdir, self.DEFAULT_CFG[0] ) ev.action = action return ev
def test_repr(self): event = Event('track_end', 100, 'A', '101') assert (repr(event) == "Event(event_type='track_end', " "timestamp=100, user_id='A', " "content_id='101')")
def test_is_expired_is_false_59_seconds_after_last_event(self): session = Session() session.add_event(Event('ad_start', 50, 'A', '101')) assert not session.is_expired(50 + 59)
def test_main_image(self): event = Event(title='foo', location='bar', date='2009-01-01') event.put()
def test_NEW_file_not_in_db_not_exists( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) self.assertEqual( newEv.action, Event.ACTION.NOT_PROCESSING )
def test_session_id_comes_from_first_event(self): session = Session() session.add_event(Event('track_end', 100, 'A', '101')) session.add_event(Event('track_end', 100, 'B', '101')) assert session.session_id == ('A', '101')
def test_track_playtime_works_without_track_end(self): session = Session() session.add_event(Event('track_start', 50, 'A', '101')) session.add_event(Event('track_heartbeat', 60, 'A', '101')) assert session.track_playtime == 10
description='something', vendor='somewhere', amount_cents=1234, creator=u1) t1.participants.append(u1) t1.participants.append(u2) t2 = Transaction(name='Burgers', description='whoah', vendor='somewhere2', amount_cents=5555, creator=u2) t2.participants.append(u3) t2.participants.append(u2) db.session.add(t1) db.session.add(t2) db.session.commit() e1 = Event(name='Pennapps', description='sleeping? bah.', creator=u1, participants=[u1, u2, u3], settled=False) e1.transactions.append(t1) e1.transactions.append(t2) db.session.add(e1) db.session.commit() else: print 'dropping all tables...' db.drop_all() print 'creating all tables...' db.create_all()
def test_MISSING_file_not_in_db_not_exists( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) self.assertEqual( newEv.action, Event.ACTION.NOT_PROCESSING ) # Файл, который удалили, и так не было в базе - не обрабатываем его.