class CollectionsApiTestCase(TestCase): def setUp(self): super(CollectionsApiTestCase, self).setUp() self.rolex = self.create_user(foreign_id='user_3') self.col = Collection() self.col.label = 'Test Collection' self.col.foreign_id = 'test_coll_entities_api' db.session.add(self.col) db.session.flush() self.ent = Entity() self.ent.collection = self.col self.ent.update({ 'name': 'Winnie the Pooh' }) db.session.add(self.ent) db.session.commit() def test_index(self): res = self.client.get('/api/1/collections') assert res.status_code == 200, res assert res.json['total'] == 0, res.json self.login(is_admin=True) res = self.client.get('/api/1/collections') assert res.status_code == 200, res assert res.json['total'] == 1, res.json def test_view(self): res = self.client.get('/api/1/collections/%s' % self.col.id) assert res.status_code == 403, res self.login(is_admin=True) res = self.client.get('/api/1/collections/%s' % self.col.id) assert res.status_code == 200, res assert 'test_coll' in res.json['foreign_id'], res.json assert 'Winnie' not in res.json['label'], res.json def test_update(self): self.login(is_admin=True) url = '/api/1/collections/%s' % self.col.id res = self.client.get(url) assert res.status_code == 200, res data = res.json data['label'] = 'Collected Collection' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, res.json assert 'Collected' in res.json['label'], res.json res = self.client.get(url) data['label'] = '' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 400, res.json res = self.client.get(url) data['category'] = 'banana' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 400, res.json def test_delete(self): self.login(is_admin=True) url = '/api/1/collections/%s' % self.col.id res = self.client.get(url) assert res.status_code == 200, res res = self.client.delete(url) assert res.status_code == 200, res res = self.client.get(url) assert res.status_code == 404, res
class EntitiesApiTestCase(TestCase): def setUp(self): super(EntitiesApiTestCase, self).setUp() self.rolex = self.create_user(foreign_id='user_3') self.col = Collection() self.col.label = 'Test Collection' self.col.foreign_id = 'test_coll_entities_api' db.session.add(self.col) db.session.flush() self.ent = Entity() self.ent.collections = [self.col] self.ent.update({ 'name': 'Winnie the Pooh', 'jurisdiction_code': 'pa', 'identifiers': [{ 'scheme': 'wikipedia', 'identifier': 'en:Winnie-the-Pooh' }] }) db.session.add(self.ent) db.session.commit() def test_index(self): index_entity(self.ent) optimize_search() res = self.client.get('/api/1/entities?facet=collections') assert res.status_code == 200, res assert res.json['total'] == 0, res.json assert len(res.json['facets']['collections']['values']) == 0, res.json self.login(is_admin=True) res = self.client.get('/api/1/entities?facet=collections') assert res.status_code == 200, res assert res.json['total'] == 1, res.json assert len(res.json['facets']['collections']['values']) == 1, res.json col0 = res.json['facets']['collections']['values'][0] assert col0['id'] == self.col.id, res.json assert col0['label'] == self.col.label, res.json assert len(res.json['facets']) == 1, res.json res = self.client.get('/api/1/entities?facet=jurisdiction_code') assert len(res.json['facets']) == 2, res.json assert 'values' in res.json['facets']['jurisdiction_code'], res.json def test_all(self): res = self.client.get('/api/1/entities/_all') assert res.status_code == 200, res assert res.json['total'] == 0, res.json self.login(is_admin=True) res = self.client.get('/api/1/entities/_all') assert res.status_code == 200, res assert res.json['total'] == 1, res.json assert res.json['results'][0]['id'] == self.ent.id, res.json def test_view(self): res = self.client.get('/api/1/entities/%s' % self.ent.id) assert res.status_code == 403, res self.login(is_admin=True) res = self.client.get('/api/1/entities/%s' % self.ent.id) assert res.status_code == 200, res assert 'entity/entity' in res.json['$schema'], res.json assert 'Winnie' in res.json['name'], res.json def test_lookup(self): args = '?scheme=wikipedia&identifier=en:Winnie-the-Pooh' res = self.client.get('/api/1/entities/_lookup%s' % args) assert res.status_code == 403, res self.login(is_admin=True) res = self.client.get('/api/1/entities/_lookup%s' % args) assert res.status_code == 200, res assert 'entity/entity' in res.json['$schema'], res.json assert 'Winnie' in res.json['name'], res.json args = args + 'xxx' res = self.client.get('/api/1/entities/_lookup%s' % args) assert res.status_code == 404, res def test_update(self): self.login(is_admin=True) url = '/api/1/entities/%s' % self.ent.id res = self.client.get(url) assert res.status_code == 200, res data = res.json data['name'] = 'Winne the little Shit' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, res.json assert 'little' in res.json['name'], res.json data['name'] = '' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 400, res.json def test_create(self): self.login(is_admin=True) url = '/api/1/entities' data = { '$schema': '/entity/building.json', 'name': "Our house", 'collection_id': [self.col.id], 'summary': "In the middle of our street" } res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, res.json assert 'middle' in res.json['summary'], res.json def test_create_nested(self): self.login(is_admin=True) url = '/api/1/entities' data = { '$schema': '/entity/person.json#', 'name': "Osama bin Laden", 'collection_id': [self.col.id], 'other_names': [ {'name': "Usama bin Laden"}, {'name': "Osama bin Ladin"}, ], 'residential_address': { 'text': 'Home', 'region': 'Netherlands', 'country': 'nl' } } res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, res.json assert 2 == len(res.json.get('other_names', [])), res.json def test_merge_nested(self): self.login(is_admin=True) url = '/api/1/entities' data = { '$schema': '/entity/person.json#', 'name': "Osama bin Laden", 'collection_id': [self.col.id], 'other_names': [ {'name': "Usama bin Laden"}, {'name': "Osama bin Ladin"}, ], 'residential_address': { 'text': 'Home', 'region': 'Netherlands', 'country': 'nl' } } res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, (res.status_code, res.json) data = res.json data['other_names'] = [ {'name': "Usama bin Laden"}, {'name': "Usama bin Ladin"}, ] url = '/api/1/entities/%s?merge=true' % data['id'] res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, (res.status_code, res.json) assert 3 == len(res.json.get('other_names', [])), res.json def test_remove_nested(self): self.login(is_admin=True) url = '/api/1/entities' data = { '$schema': '/entity/person.json#', 'name': "Osama bin Laden", 'collection_id': [self.col.id], 'other_names': [ {'name': "Usama bin Laden"}, {'name': "Osama bin Ladin"}, ], 'residential_address': { 'text': 'Home', 'region': 'Netherlands', 'country': 'nl' } } res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, (res.status_code, res.json) data = res.json data['other_names'].pop() assert 1 == len(data['other_names']), data del data['residential_address'] url = '/api/1/entities/%s' % data['id'] res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, (res.status_code, res.json) assert 1 == len(res.json.get('other_names', [])), res.json def test_edit_nested_object(self): self.login(is_admin=True) url = '/api/1/entities' data = { '$schema': '/entity/person.json#', 'name': "Osama bin Laden", 'collection_id': [self.col.id], 'residential_address': { 'text': 'Home', 'region': 'Netherlands', 'country': 'nl' } } assert not EntityAddress.all().count(), EntityAddress.all().all() res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, (res.status_code, res.json) addr_count = EntityAddress.all().count() assert addr_count, EntityAddress.all().all() data = res.json url = '/api/1/entities/%s' % data['id'] data['residential_address']['region'] = 'Amsterdam' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, (res.status_code, res.json) assert res.json['residential_address']['region'] == 'Amsterdam', res.json assert EntityAddress.all().count() == addr_count, EntityAddress.all().all() def test_delete_entity(self): self.login(is_admin=True) url = '/api/1/entities' data = { '$schema': '/entity/person.json#', 'name': "Osama bin Laden", 'collection_id': [self.col.id] } res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, (res.status_code, res.json) data = res.json url = '/api/1/entities/%s' % data['id'] res = self.client.delete(url) assert res.status_code == 200, (res.status_code, res.json) res = self.client.get(url) assert res.status_code == 404, (res.status_code, res.json) def test_suggest_entity(self): self.login(is_admin=True) url = '/api/1/entities' data = { '$schema': '/entity/person.json#', 'name': "Osama bin Laden", 'collection_id': [self.col.id] } res = self.client.post(url, data=json.dumps(data), content_type='application/json') optimize_search() res = self.client.get('/api/1/entities/_suggest?prefix=osa') assert res.status_code == 200, (res.status_code, res.json) data = res.json assert len(data['results']) == 1, data assert 'Laden' in data['results'][0]['name'], data def test_similar_entity(self): self.login(is_admin=True) url = '/api/1/entities' data = { '$schema': '/entity/person.json#', 'name': "Osama bin Laden", 'collection_id': [self.col.id] } res = self.client.post(url, data=json.dumps(data), content_type='application/json') data = { '$schema': '/entity/person.json#', 'name': "Osama ben Ladyn", 'collection_id': [self.col.id] } res = self.client.post(url, data=json.dumps(data), content_type='application/json') optimize_search() res = self.client.get('/api/1/entities/%s/similar' % res.json['id']) assert res.status_code == 200, (res.status_code, res.json) data = res.json assert len(data['results']) == 1, data assert 'Laden' in data['results'][0]['name'], data assert 'Pooh' not in res.data, res.data
class CollectionsApiTestCase(TestCase): def setUp(self): super(CollectionsApiTestCase, self).setUp() self.rolex = self.create_user(foreign_id='user_3') self.col = Collection() self.col.label = 'Test Collection' self.col.foreign_id = 'test_coll_entities_api' db.session.add(self.col) db.session.flush() self.ent = Entity() self.ent.collection = self.col self.ent.update({'name': 'Winnie the Pooh'}) db.session.add(self.ent) db.session.commit() def test_index(self): res = self.client.get('/api/1/collections') assert res.status_code == 200, res assert res.json['total'] == 0, res.json self.login(is_admin=True) res = self.client.get('/api/1/collections') assert res.status_code == 200, res assert res.json['total'] == 1, res.json def test_view(self): res = self.client.get('/api/1/collections/%s' % self.col.id) assert res.status_code == 403, res self.login(is_admin=True) res = self.client.get('/api/1/collections/%s' % self.col.id) assert res.status_code == 200, res assert 'test_coll' in res.json['foreign_id'], res.json assert 'Winnie' not in res.json['label'], res.json def test_update(self): self.login(is_admin=True) url = '/api/1/collections/%s' % self.col.id res = self.client.get(url) assert res.status_code == 200, res data = res.json data['label'] = 'Collected Collection' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 200, res.json assert 'Collected' in res.json['label'], res.json res = self.client.get(url) data['label'] = '' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 400, res.json res = self.client.get(url) data['category'] = 'banana' res = self.client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 400, res.json def test_delete(self): self.login(is_admin=True) url = '/api/1/collections/%s' % self.col.id res = self.client.get(url) assert res.status_code == 200, res res = self.client.delete(url) assert res.status_code == 200, res res = self.client.get(url) assert res.status_code == 404, res