import os from datetime import datetime, timedelta from tracker import json_utils, db from api import api from . import login_to_test_client as _login def test_can_list_spotify_playlists(session): if not session.query(db.SpyPlaylist).get('abc'): session.add(db.SpyPlaylist( spyid='abc', user='test', name='joels mix' )) session.commit() app = api.app.test_client() _login(app) rv = app.get('/api/admin/spotify_playlists') data = json_utils.loads(rv.data) assert len(data) == 1 assert data[0]['name'] == 'joels mix' def test_can_check_spotify_playlist(session): link = 'https://open.spotify.com/user/spotify/playlist/37i9dQZF1DX0AMssoUKCz7' uri = 'spotify:user:spotify:playlist:37i9dQZF1DX0AMssoUKCz7' _add_spotify_auth_data(session) app = api.app.test_client() _login(app) using_link = app.post('/api/admin/spotify_playlist/check', data=json_utils.dumps({'url':link}), content_type='application/json') using_link_data = json_utils.loads(using_link.data) using_uri = app.post('/api/admin/spotify_playlist/check', data=json_utils.dumps({'url':uri}), content_type='application/json') using_uri_data = json_utils.loads(using_uri.data) assert using_link_data['preview_text'] == 'Tropical House' assert using_uri_data['preview_text'] == 'Tropical House' def test_can_add_spotify_playlist(session): link = 'https://open.spotify.com/user/spotify/playlist/37i9dQZF1DX0AMssoUKCz7' uri = 'spotify:user:spotify:playlist:37i9dQZF1DX0AMssoUKCz7' _add_spotify_auth_data(session) app = api.app.test_client() _login(app) using_uri = app.post('/api/admin/spotify_playlist/add', data=json_utils.dumps({'url': uri}), content_type='application/json') assert using_uri.status_code == 201 assert session.query(db.SpyPlaylist).get('37i9dQZF1DX0AMssoUKCz7').name == 'Tropical House' assert session.query(db.UsersSpyPlaylists).filter(db.UsersSpyPlaylists.spyid == '37i9dQZF1DX0AMssoUKCz7').one() def test_can_edit_spotify_playlist_fields(session): _add_spotify_auth_data(session) if not session.query(db.SpyPlaylist).get('abc'): session.add(db.SpyPlaylist( spyid='abc', user='test', name='joels mix' )) db.Session.commit() app = api.app.test_client() _login(app) using_uri = app.post('/api/admin/spotify_playlist/edit', data=json_utils.dumps( dict(spyid='abc', name='cannot be changed', active=False, category='Launch')), content_type='application/json') assert using_uri.status_code == 200 record = session.query(db.SpyPlaylist).get('abc') assert record.category == 'Launch' assert not record.active assert record.name == 'joels mix' # YouTube def test_can_list_youtube_channels(session): if not session.query(db.YtChannel).get('abc'): session.add(db.YtChannel( ytid='abc', name='joel channel', )) session.commit() app = api.app.test_client() _login(app) rv = app.get('/api/admin/youtube_channels') data = json_utils.loads(rv.data) assert len(data) == 1 assert data[0]['name'] == 'joel channel' def test_can_edit_youtube_channel(session): if not session.query(db.YtChannel).get('abc'): session.add(db.YtChannel( ytid='abc', name='joel channel', )) session.commit() app = api.app.test_client() _login(app) using_uri = app.post('/api/admin/youtube_channel/edit', data=json_utils.dumps( dict(ytid='abc', name='cannot be changed', active=False, category='Grind')), content_type='application/json') assert using_uri.status_code == 200 record = session.query(db.YtChannel).get('abc') assert record.category == 'Grind' assert not record.active assert record.name == 'joel channel' def test_can_check_youtube_channel(session): link = "https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw" app = api.app.test_client() _login(app) res = app.post('/api/admin/youtube_channel/check', data=json_utils.dumps({'url': link}), content_type='application/json') assert res.status_code == 200 data = json_utils.loads(res.data) assert data['preview_text'] == "Google Developers" def test_can_add_youtube_channel(session): link = "https://www.youtube.com/channel/UCa10nxShhzNrCE1o2ZOPztg" app = api.app.test_client() _login(app) res = app.post('/api/admin/youtube_channel/add', data=json_utils.dumps({'url': link}), content_type='application/json') assert res.status_code == 201 assert db.Session.query(db.UsersYtChannels).filter(db.UsersYtChannels.ytid == 'UCa10nxShhzNrCE1o2ZOPztg').one() # SoundCloud def test_can_list_soundcloud_influencers(session): if not session.query(db.ScUser).get(123): session.add(db.ScUser( scid=123, name='joel leslie', is_influencer=True )) session.add(db.ScUser( scid=124, name='non influencer', is_influencer=False )) session.add(db.UsersScInfluencers(username='test', scid=123 )) session.commit() app = api.app.test_client() _login(app) rv = app.get('/api/admin/soundcloud_influencers') data = json_utils.loads(rv.data) assert rv.status_code == 200 assert len(data) == 1 assert data[0]['name'] == 'joel leslie' def test_can_edit_soundcloud_influencer(session): if not session.query(db.ScUser).get(123): session.add(db.ScUser( scid=123, name='joel leslie', is_influencer=True )) session.commit() app = api.app.test_client() _login(app) using_uri = app.post('/api/admin/soundcloud_influencer/edit', data=json_utils.dumps( dict(scid=123, name='cannot be changed', active=False, category='Grind')), content_type='application/json') assert using_uri.status_code == 200 record = session.query(db.ScUser).get(123) assert record.category == 'Grind' assert not record.active assert record.name == 'joel leslie' def test_can_check_soundcloud_channel(session): link = "https://soundcloud.com/shivas_regal" app = api.app.test_client() _login(app) res = app.post('/api/admin/soundcloud_influencer/check', data=json_utils.dumps({'url': link}), content_type='application/json') data = json_utils.loads(res.data) assert res.status_code == 200 assert data['preview_text'] == 'Shivas Regal' def test_can_add_soundcloud_influencer(session): link = "https://soundcloud.com/shivas_regal" app = api.app.test_client() _login(app) res = app.post('/api/admin/soundcloud_influencer/add', data=json_utils.dumps({'url': link}), content_type='application/json') assert res.status_code == 201 # Twitter def test_can_list_twitter_influencers(session): session.add(db.TrackedEntity( eid=10000, twitter_id="twt1", name='Joel Leslie', is_influencer=True, twitter_last_update=None )) session.add(db.UsersTwInfluencers( username='test', eid=10000 )) session.add(db.TrackedEntity( twitter_id="twt4", name='Not influencer', is_influencer=False, twitter_last_update=None )) session.add(db.TrackedEntity( twitter_id="twt5", name='Others influencer', is_influencer=True, twitter_last_update=None )) session.commit() app = api.app.test_client() _login(app) rv = app.get('/api/admin/twitter_influencers') data = json_utils.loads(rv.data) print(json_utils.dumps(data, indent=2)) assert rv.status_code == 200 assert len(data) == 1 assert data[0]['name'] == 'Joel Leslie' def test_can_edit_twitter_influencer(session): session.add(db.TrackedEntity( eid=4000, twitter_id="twt1", name='Joel Leslie', is_influencer=True, twitter_last_update=None )) session.commit() app = api.app.test_client() _login(app) using_uri = app.post('/api/admin/twitter_influencer/edit', data=json_utils.dumps( dict(eid=4000, name='cannot be changed', active=False, category='Grind')), content_type='application/json') assert using_uri.status_code == 200 record = session.query(db.TrackedEntity).get(4000) assert record.category == 'Grind' assert not record.active assert record.name == 'Joel Leslie' def test_can_check_twitter_channel(session): link = "https://twitter.com/Imaginedragons" app = api.app.test_client() _login(app) res = app.post('/api/admin/twitter_influencer/check', data=json_utils.dumps({'url': link}), content_type='application/json') data = json_utils.loads(res.data) assert res.status_code == 200 assert data['preview_text'] == 'Imaginedragons' def test_can_add_twitter_influencer(session): link = "https://twitter.com/whtlst" app = api.app.test_client() _login(app) res = app.post('/api/admin/twitter_influencer/add', data=json_utils.dumps({'url': link}), content_type='application/json') assert res.status_code == 201 twitter_record = db.Session.query(db.TrackedEntity).one() assert twitter_record.twitter_id == '918499361629392902' assert twitter_record.is_influencer == True user_influencer = db.Session.query(db.UsersTwInfluencers).one() assert user_influencer.eid == twitter_record.eid assert user_influencer.username == 'test' # Instagram def test_can_list_insta_influencers(session): session.add(db.InUser( inid='in1', is_influencer=True, )) session.add(db.UsersInInfluencers(username='test', inid='in1')) session.add(db.InUser( inid='in2', is_influencer=False, )) session.add(db.InUser( inid='in3', is_influencer=True, )) session.add(db.UsersInInfluencers(username='other-user', inid='in1')) session.commit() app = api.app.test_client() _login(app) rv = app.get('/api/admin/instagram_influencers') data = json_utils.loads(rv.data) assert rv.status_code == 200 assert len(data) == 1 assert data[0]['inid'] == 'in1' def test_can_edit_insta_influencer(session): session.add(db.InUser( inid='in1', is_influencer=True, )) session.commit() app = api.app.test_client() _login(app) using_uri = app.post('/api/admin/instagram_influencer/edit', data=json_utils.dumps( dict(inid='in1', active=False, category='Grind')), content_type='application/json') assert using_uri.status_code == 200 record = session.query(db.InUser).get('in1') assert record.category == 'Grind' assert not record.active def test_can_check_insta_influence(session): link = "https://instagram.com/sophiebloggs" app = api.app.test_client() _login(app) res = app.post('/api/admin/instagram_influencer/check', data=json_utils.dumps({'url': link}), content_type='application/json') assert res.status_code == 200 data = json_utils.loads(res.data) assert data['preview_text'].startswith('Sophie Bloggs (@sophiebloggs)') def test_can_add_insta_influencer(session): link = "https://instagram.com/sophiebloggs" app = api.app.test_client() _login(app) res = app.post('/api/admin/instagram_influencer/add', data=json_utils.dumps({'url': link}), content_type='application/json') assert res.status_code == 201 assert session.query(db.InUser).one().inid == 'sophiebloggs' assert session.query(db.UsersInInfluencers).one().inid == 'sophiebloggs' # Helpers def _add_spotify_auth_data(session): from tracker import spotify spotify.manual_oauth()