Esempio n. 1
0
    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
Esempio n. 2
0
    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)
Esempio n. 3
0
 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']
Esempio n. 4
0
 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')
Esempio n. 5
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()

            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()
Esempio n. 6
0
 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")
Esempio n. 7
0
    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()
Esempio n. 8
0
 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)
Esempio n. 9
0
 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')
Esempio n. 10
0
 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'], '')
Esempio n. 11
0
    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']
Esempio n. 12
0
 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, [])
Esempio n. 13
0
 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'), '')
Esempio n. 14
0
 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()
Esempio n. 15
0
 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)
Esempio n. 16
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()
Esempio n. 17
0
    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()
Esempio n. 18
0
 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')
Esempio n. 19
0
 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)
Esempio n. 20
0
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()
Esempio n. 21
0
    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)