def setUp(self): self.app = create_app() self.client = self.app.test_client() with self.app.app_context(): self.bucket_name = self.app.config['S3_BUCKET_NAME'] db.drop_all() db.create_all() self.user = User() self.user.id = self.user_id self.user.email, self.user.name, self.user.secret = \ '*****@*****.**', self.publisher_name, 'super_secret' self.publisher = Publisher(name=self.publisher_name) association = PublisherUser(role=UserRoleEnum.owner) association.publisher = self.publisher metadata = MetaDataDB(name=self.package) self.publisher.packages.append(metadata) self.user.publishers.append(association) self.user_not_allowed = User() self.user_not_allowed.id = self.user_not_allowed_id self.user_not_allowed.email, self.user_not_allowed.name, \ self.user_not_allowed.secret = \ '*****@*****.**', self.user_not_allowed_name, 'super_secret' self.publisher_not_allowed = Publisher( name=self.user_not_allowed_name) association_not_allowed = PublisherUser(role=UserRoleEnum.owner) association_not_allowed.publisher = self.publisher_not_allowed metadata = MetaDataDB(name=self.package) self.publisher_not_allowed.packages.append(metadata) self.user_not_allowed.publishers.append(association_not_allowed) self.user_member = User() self.user_member.id = self.user_member_id self.user_member.email, self.user_member.name, self.user_member.secret = \ '*****@*****.**', self.user_member_name, 'super_secret' association_member = PublisherUser(role=UserRoleEnum.member) association_member.publisher = self.publisher self.user_member.publishers.append(association_member) db.session.add(self.user) db.session.add(self.user_not_allowed) db.session.commit() response = self.client.post(self.jwt_url, data=json.dumps({ 'username': self.publisher_name, 'secret': 'super_secret' }), content_type='application/json') data = json.loads(response.data) self.jwt = data['token'] self.auth = "bearer %s" % self.jwt
def test_data_package_page_load_without_views(self): descriptor = {"data": [], "resources": []} with self.app.app_context(): publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() rv = self.client.get('/{publisher}/{package}'.\ format(publisher=self.publisher, package=self.package)) self.assertNotEqual(404, rv.status_code) self.assertIn('Data Files', rv.data.decode("utf8")) # cheks handsontable load self.assertIn('handsontable', rv.data.decode("utf8")) # cheks Vega graph load self.assertIn('vega', rv.data.decode("utf8")) rv = self.client.get('/non-existing/demo-package') self.assertEqual(404, rv.status_code) # cheks handsontable not loaded self.assertNotIn('handsontable', rv.data) # cheks graph not loaded self.assertNotIn('vega', rv.data)
def setUp(self): self.app = create_app() # self.app.app_context().push() self.client = self.app.test_client() with self.app.app_context(): db.drop_all() db.create_all() self.user = User() self.user.id = self.user_id self.user.email, self.user.name, self.user.secret = \ '*****@*****.**', self.publisher, 'super_secret' publisher = Publisher(name=self.publisher) association = PublisherUser(role="OWNER") association.publisher = publisher self.user.publishers.append(association) db.session.add(self.user) db.session.commit() response = self.client.post(self.jwt_url, data=json.dumps({ 'username': self.publisher, 'secret': 'super_secret' }), content_type='application/json') data = json.loads(response.data) self.jwt = data['token']
def test_adds_local_urls(self): descriptor = { 'name': 'test', 'resources': [{ 'name': 'first' }, { 'name': 'second' }] } with self.app.app_context(): db.drop_all() db.create_all() publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client.get('/api/package/%s/%s'%\ (self.publisher, self.package)) catalog = Catalog(json.loads(response.data)) dataset = catalog.construct_dataset('http://example.com/') self.assertEqual(dataset.\ get('resources')[0].get('localurl'), 'http://example.com/api/dataproxy/demo/demo-package/r/first.csv') self.assertEqual(dataset.\ get('resources')[1].get('localurl'), 'http://example.com/api/dataproxy/demo/demo-package/r/second.csv')
def setUp(self): self.app = create_app() self.app.app_context().push() with self.app.test_request_context(): db.drop_all() db.create_all() self.user = User(id=11, name=self.user_name, secret='supersecret', auth0_id="123|auth0") self.publisher = Publisher(name=self.user_name) self.publisher.packages.append(MetaDataDB(name='test_package')) association = PublisherUser(role=UserRoleEnum.owner) association.publisher = self.publisher self.user.publishers.append(association) self.publisher1 = Publisher(name="test_publisher") self.publisher1.packages.append(MetaDataDB(name='test_package')) association1 = PublisherUser(role=UserRoleEnum.member) association1.publisher = self.publisher1 self.user.publishers.append(association1) db.session.add(self.user) self.sysadmin = User(id=12, name='admin', sysadmin=True) db.session.add(self.sysadmin) self.random_user = User(id=13, name='random') db.session.add(self.random_user) self.publisher2 = Publisher(name="test_publisher1", private=True) self.publisher2.packages.append( MetaDataDB(name='test_package', private=True)) db.session.add(self.publisher2) self.publisher3 = Publisher(name="test_publisher2", private=False) self.publisher3.packages.append(MetaDataDB(name='test_package')) db.session.add(self.publisher3) db.session.commit()
def test_throw_error_if_role_is_invalid(self): with self.app.test_request_context(): db.drop_all() db.create_all() publisher = Publisher(name='test_pub_id') association = PublisherUser() association.publisher = publisher self.assertRaises(ValueError, association.role, "NOT_MEMBER")
def setUp(self): self.publisher_one = 'test_publisher1' self.publisher_two = 'test_publisher2' self.package_one = 'test_package1' self.package_two = 'test_package2' self.app = create_app() self.app.app_context().push() with self.app.test_request_context(): db.drop_all() db.create_all() user1 = User(name=self.publisher_one) publisher1 = Publisher(name=self.publisher_one) association1 = PublisherUser(role="OWNER") association1.publisher = publisher1 user1.publishers.append(association1) user2 = User(name=self.publisher_two) publisher2 = Publisher(name=self.publisher_two) association2 = PublisherUser(role="OWNER") association2.publisher = publisher2 user2.publishers.append(association2) metadata1 = MetaDataDB(name=self.package_one) metadata1.descriptor = json.dumps(dict(name='test_one')) publisher1.packages.append(metadata1) metadata2 = MetaDataDB(name=self.package_two) metadata2.descriptor = json.dumps(dict(name='test_two')) publisher1.packages.append(metadata2) metadata3 = MetaDataDB(name=self.package_one) metadata3.descriptor = json.dumps(dict(name='test_three')) publisher2.packages.append(metadata3) metadata4 = MetaDataDB(name=self.package_two) metadata4.descriptor = json.dumps(dict(name='test_four')) publisher2.packages.append(metadata4) db.session.add(user1) db.session.add(user2) db.session.commit()
def test_return_200_if_meta_data_found(self): descriptor = {'name': 'test description'} with self.app.app_context(): publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client.\ get('/api/package/%s/%s' % (self.publisher, self.package)) data = json.loads(response.data) self.assertEqual(response.status_code, 200)
def test_return_generic_error_if_descriptor_is_not_json(self): descriptor = 'test description' with self.app.app_context(): publisher = Publisher(name='pub') metadata = MetaDataDB(name=self.package) metadata.descriptor = descriptor publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client\ .get('/api/package/%s/%s' % ('pub', self.package)) data = json.loads(response.data) self.assertEqual(response.status_code, 500) self.assertEqual(data['error_code'], 'GENERIC_ERROR')
def test_return_empty_string_if_readme_not_there(self): descriptor = {'name': 'test description'} with self.app.app_context(): publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client.get('/api/package/%s/%s'%\ (self.publisher, self.package)) data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual(data['readme'], '')
def setUp(self): self.app = create_app() self.client = self.app.test_client() with self.app.app_context(): db.drop_all() db.create_all() self.user = User() self.user.id = self.user_id self.user.email, self.user.name, self.user.secret = \ '*****@*****.**', self.publisher_name, 'super_secret' self.user_member = User() self.user_member.id = self.user_id_member self.user_member.email, self.user_member.name, self.user_member.secret = \ '*****@*****.**', self.user_member_name, 'super_secret' self.publisher = Publisher(name=self.publisher_name) association = PublisherUser(role=UserRoleEnum.owner) association.publisher = self.publisher association1 = PublisherUser(role=UserRoleEnum.member) association1.publisher = self.publisher metadata = MetaDataDB(name=self.package) self.publisher.packages.append(metadata) self.user.publishers.append(association) self.user_member.publishers.append(association1) db.session.add(self.user) db.session.add(self.user_member) db.session.commit() response = self.client.post(self.jwt_url, data=json.dumps({ 'username': self.publisher_name, 'secret': 'super_secret' }), content_type='application/json') data = json.loads(response.data) self.jwt = data['token'] response = self.client.post(self.jwt_url, data=json.dumps({ 'username': self.user_member_name, 'secret': 'super_secret' }), content_type='application/json') data = json.loads(response.data) self.jwt_member = data['token']
def test_get_views_if_views_dont_exist(self): descriptor = {'name': 'test', 'resources': []} with self.app.app_context(): db.drop_all() db.create_all() publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client.get('/api/package/%s/%s'%\ (self.publisher, self.package)) catalog = Catalog(json.loads(response.data)) views = catalog.get_views() self.assertEqual(views, [])
def test_adds_empty_readme_if_there_is_not(self): descriptor = {'name': 'test', 'resources': []} with self.app.app_context(): db.drop_all() db.create_all() publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client.get('/api/package/%s/%s'%\ (self.publisher, self.package)) catalog = Catalog(json.loads(response.data)) dataset = catalog.construct_dataset() self.assertEqual(dataset.get('readme'), '')
def setUp(self): self.publisher = 'test_publisher' self.package1 = 'test_package1' self.package2 = 'test_package2' self.app = create_app() self.client = self.app.test_client() with self.app.app_context(): db.drop_all() db.create_all() publisher = Publisher(name=self.publisher) metadata1 = MetaDataDB(name=self.package1) metadata2 = MetaDataDB(name=self.package2) publisher.packages.append(metadata1) publisher.packages.append(metadata2) db.session.add(publisher) db.session.commit()
def test_construct_dataset(self): descriptor = json.loads(open('fixtures/datapackage.json').read()) with self.app.app_context(): db.drop_all() db.create_all() publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client.get('/api/package/%s/%s'%\ (self.publisher, self.package)) catalog = Catalog(json.loads(response.data)) dataset = catalog.construct_dataset() self.assertEqual(dataset.get('name'), descriptor.get('name')) self.assertIn('localurl', dataset.get('resources')[0]) self.assertNotEqual(len(dataset.get('views')), 0)
def setUp(self): self.app = create_app() self.app.app_context().push() with self.app.test_request_context(): db.drop_all() db.create_all() user = User(id=11, name='test_user_id', secret='supersecret', auth0_id="123|auth0") publisher = Publisher(name='test_pub_id') association = PublisherUser(role="OWNER") association.publisher = publisher user.publishers.append(association) db.session.add(user) db.session.commit()
def setUp(self): self.app = create_app() self.client = self.app.test_client() with self.app.app_context(): db.drop_all() db.create_all() self.user = User() self.user.id = 1 self.user.email, self.user.name, self.user.secret = \ '*****@*****.**', self.publisher, 'super_secret' self.publisherObj = Publisher(name=self.publisher) association = PublisherUser(role=UserRoleEnum.owner) association.publisher = self.publisherObj self.user.publishers.append(association) db.session.add(self.user) db.session.commit()
def test_get_views(self): descriptor = { 'name': 'test', 'resources': [], 'views': [{"type": "graph"}] } with self.app.app_context(): db.drop_all() db.create_all() publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client.get('/api/package/%s/%s'%\ (self.publisher, self.package)) catalog = Catalog(json.loads(response.data)) views = catalog.get_views() self.assertNotEqual(len(views), 0) self.assertEqual(views[0].get('type'), 'graph')
def test_return_all_metadata_is_there(self): descriptor = {'name': 'test description'} readme = 'README' with self.app.app_context(): publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) metadata.descriptor = json.dumps(descriptor) metadata.readme = readme publisher.packages.append(metadata) db.session.add(publisher) db.session.commit() response = self.client.get('/api/package/%s/%s'%\ (self.publisher, self.package)) data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual(len(data), 5) self.assertEqual(data['descriptor']['name'], 'test description') self.assertEqual(data['readme'], 'README') self.assertEqual(data['id'], 1) self.assertEqual(data['name'], self.package) self.assertEqual(data['publisher'], self.publisher)
def populate_db(auth0_id, email, user_name, full_name): user = User.query.filter_by(name=user_name).first() publisher = Publisher.query.filter_by(name=user_name).first() if publisher: db.session.delete(publisher) db.session.commit() if user: db.session.delete(user) db.session.commit() user = User() user.auth0_id, user.email, user.name, user.full_name, user.secret \ = auth0_id, email, user_name, full_name, \ "c053521f4f3331908d89df39bba922190a69f0ea99f7ca00" publisher = Publisher(name=user_name) association = PublisherUser(role="OWNER") association.publisher = publisher user.publishers.append(association) db.session.add(user) db.session.commit()
def test_publish_end_to_end(self, save, signed_url, get_s3_object, get_metadata_body, create_or_update, get_readme_object_key): # Sending Username & Secret key rv = self.client.post(self.auth_token_url, data=json.dumps({ 'username': '******', 'email': None, 'secret': 'super_secret' }), content_type='application/json') # Testing Token received self.assertIn('token', rv.data) self.assertEqual(200, rv.status_code) # Sending recived token to server with Authentication Header token = json.loads(rv.data)['token'] self.auth = "bearer %s" % token # Saving token for future use save.return_value = None rv = self.client.put(self.meta_data_url, headers=dict(Authorization=self.auth), data=json.dumps(self.test_data_package)) # Testing Authentication status self.assertEqual({'status': 'OK'}, json.loads(rv.data)) self.assertEqual(200, rv.status_code) # Adding to Meta Data descriptor = {'name': 'test description'} with self.app.app_context(): publisher = Publisher(name=self.publisher) metadata = MetaDataDB(name=self.package) publisher.packages.append(metadata) metadata.descriptor = json.dumps(descriptor) db.session.add(publisher) db.session.commit() rv = self.client.get('/api/package/%s' % (self.publisher, )) data = json.loads(rv.data) # Testing Meta Data self.assertEqual(len(data['data']), 1) self.assertEqual(rv.status_code, 200) # Get S3 link for uploading Data file signed_url.return_value = 'https://trial_url' rv = self.client.post(self.bitstore_url, data=json.dumps({ 'publisher': self.publisher, 'package': self.package, 'md5': '' }), content_type='application/json') # Testing S3 link self.assertEqual({'key': 'https://trial_url'}, json.loads(rv.data)) self.assertEqual(200, rv.status_code) # Finalize get_metadata_body.return_value = json.dumps(dict(name='package')) create_or_update.return_value = None get_readme_object_key.return_value = '' get_s3_object.return_value = '' rv = self.client.post(self.finalize_url, data=json.dumps(dict()), headers=dict(Authorization=self.auth)) # Test Data self.assertEqual(200, rv.status_code)