def test_multiple_users_with_home_project(self): from pillar.api.blender_cloud import home_project from pillar.api.utils.authentication import validate_token uid1 = self._create_user_with_token(roles={'subscriber'}, token='token1', user_id=24 * 'a') uid2 = self._create_user_with_token(roles={'subscriber'}, token='token2', user_id=24 * 'b') # Create home projects with self.app.test_request_context(headers={'Authorization': self.make_header('token1')}): validate_token() proj1 = home_project.create_home_project(uid1, write_access=True) db_proj1 = self.app.data.driver.db['projects'].find_one(proj1['_id']) with self.app.test_request_context(headers={'Authorization': self.make_header('token2')}): validate_token() proj2 = home_project.create_home_project(uid2, write_access=True) db_proj2 = self.app.data.driver.db['projects'].find_one(proj2['_id']) # Test availability at end-point resp1 = self.client.get('/api/bcloud/home-project', headers={'Authorization': self.make_header('token1')}) resp2 = self.client.get('/api/bcloud/home-project', headers={'Authorization': self.make_header('token2')}) self.assertEqual(200, resp1.status_code) self.assertEqual(200, resp2.status_code) json_proj1 = json.loads(resp1.data) json_proj2 = json.loads(resp2.data) self.assertEqual(ObjectId(json_proj1['_id']), proj1['_id']) self.assertEqual(ObjectId(json_proj2['_id']), proj2['_id']) self.assertEqual(json_proj1['_etag'], db_proj1['_etag']) self.assertEqual(json_proj2['_etag'], db_proj2['_etag']) self.assertNotEqual(db_proj1['_etag'], db_proj2['_etag']) self.assertNotEqual(db_proj1['_id'], db_proj2['_id'])
def test_create_home_project(self): from pillar.api.blender_cloud import home_project from pillar.api.utils.authentication import validate_token user_id = self._create_user_with_token(roles={'subscriber'}, token='token') # Test home project creation with self.app.test_request_context( headers={'Authorization': self.make_header('token')}): validate_token() proj = home_project.create_home_project(user_id, write_access=True) self.assertEqual('home', proj['category']) self.assertEqual({'group', 'asset', 'comment'}, set(nt['name'] for nt in proj['node_types'])) endpoint = url_for('blender_cloud.home_project.home_project') db_proj = self.app.data.driver.db['projects'].find_one(proj['_id']) # Test availability at end-point resp = self.client.get(endpoint) # While we're still AB-testing, unauthenticated users should get a 404. # When that's over, it should result in a 403. self.assertEqual(403, resp.status_code) resp = self.client.get( endpoint, headers={'Authorization': self.make_header('token')}) self.assertEqual(200, resp.status_code) json_proj = json.loads(resp.data) self.assertEqual(ObjectId(json_proj['_id']), proj['_id']) self.assertEqual(json_proj['_etag'], db_proj['_etag'])
def test_has_home_project(self): from pillar.api.blender_cloud import home_project from pillar.api.utils.authentication import validate_token user_id = self._create_user_with_token(roles={'subscriber'}, token='token') # Test home project creation with self.app.test_request_context( headers={'Authorization': self.make_header('token')}): validate_token() self.assertFalse(home_project.has_home_project(user_id)) proj = home_project.create_home_project(user_id, write_access=True) self.assertTrue(home_project.has_home_project(user_id)) # Delete the project. resp = self.client.delete('/api/projects/%s' % proj['_id'], headers={ 'Authorization': self.make_header('token'), 'If-Match': proj['_etag'] }) self.assertEqual(204, resp.status_code, resp.data) self.assertFalse(home_project.has_home_project(user_id))
def test_revoking_subscriber_role(self): from pillar.api.blender_cloud import home_project from pillar.api.utils.authentication import validate_token self.user_id = self.create_user(roles=set('subscriber')) self.create_valid_auth_token(self.user_id, 'token') with self.app.test_request_context(headers={'Authorization': self.make_header('token')}): validate_token() home_proj = home_project.create_home_project(self.user_id, write_access=True) changed = home_project.user_changed_role(None, {'_id': self.user_id, 'roles': []}) self.assertTrue(changed) # The home project should NOT be writable, so we should NOT be able to create a node. self.create_test_node(home_proj['_id'], 403)