from tracker import json_utils, db from tracker.test import add_and_flush from tracker import artists from . import login_to_test_client as _login def test_put_existing(session): add_and_flush( session, db.ScUser(scid=1, name="Sc1"), db.TrackedEntity(eid=11, name="tw1", twitter_id='twitter1'), ) arid1 = artists.create_association_by_ids(scid=1, eid=11).arid session.commit() from api import api app = api.app.test_client() _login(app) # We're also testing the special case for twitter, where we pass the twitter_id not the eid rv = app.put( '/api/artist_sources/{}'.format(arid1), data=json_utils.dumps(dict( source='sc', source_id='1', source_url=None, )), content_type='application/json', ) data = json_utils.loads(rv.data) import pdb; pdb.set_trace() assert data['arid'] == arid1 assert len(data['links']) == 2 assert session.query(db.TrackedEntity).get(11).arid == arid1 assert session.query(db.ScUser).get(1).arid == arid1 def test_put_and_overwrite_association(session): # two artists, that get merged, except we remove the existing source, as we # only support 1 for now. add_and_flush( session, db.ScUser(scid=1, name="Sc1"), db.TrackedEntity(eid=11, name="tw1", twitter_id='twitter_1', twitter_data={}), db.TrackedEntity(eid=12, name="tw2", twitter_id='twitter_2', twitter_data={}), db.SpyArtist(spyid='spy2', name='spy2') ) arid1 = artists.create_association_by_ids(scid=1, eid=11).arid arid2 = artists.create_association_by_ids(eid=12, spyid='spy2').arid session.commit() from api import api app = api.app.test_client() _login(app) # We're also testing the special case for twitter, where we pass the twitter_id not the eid rv = app.put( '/api/artist_sources/{}'.format(arid1), data=json_utils.dumps(dict( source='tw', source_id='twitter_2', source_url=None, )), content_type='application/json', ) data = json_utils.loads(rv.data) assert data['arid'] == arid1 assert len(data['links']) == 3 assert set([l['id'] for l in data['links']]) == set(['1', '12', 'spy2']), "Should include the updated twitter and merged spy" assert session.query(db.TrackedEntity).get(11).artist is None, "Old association should have been removed" assert session.query(db.Artist).get(arid2).merged_to_arid == arid1