def test_search(self): body_token = { "access_token": "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl", "expires_in": 3600, "restricted_to": [], "token_type": "bearer", "refresh_token": "new_refresh_token!!" } httpretty.register_uri(httpretty.POST, "https://www.box.com/api/oauth2/token", body=json.dumps(body_token), status=200, content_type='text/json') folder_id = 168 body = get_dummy_search_result() body["entries"][0]['id'] = folder_id httpretty.register_uri( httpretty.GET, "https://api.box.com/2.0/search?query=Empowering", body=json.dumps(body), status=200, match_querystring=True, content_type='application/json') refresh_token = "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl" access_token = "new_refresh_token!!" box = boxpython.BoxSession(self.client_id, self.client_secret, refresh_token, access_token) search_result = box.search(query="Empowering") self.assertTrue(search_result["entries"] is not None) self.assertEqual(folder_id, search_result["entries"][0]["id"])
def test_get_folder_info(self): folder_id = 165 body = get_dummy_folder_result() body['id'] = folder_id httpretty.register_uri(httpretty.GET, "https://api.box.com/2.0/folders/%s" % folder_id, body=json.dumps(body), status=200, content_type='text/json') refresh_token = "refresh_token_dummy#!" access_token = "access_token_dummy#!" box = boxpython.BoxSession(self.client_id, self.client_secret, refresh_token, access_token) resp = box.get_folder_info(folder_id) expect(httpretty.last_request()).have.property("querystring").\ should.be.equal({}) expect(httpretty.last_request()).have.property("body").\ should.be.equal('') expect(httpretty.last_request().headers['Authorization']).\ to.equal('Bearer %s' % access_token) (resp).should.be.equal(body)
def test_create_boxsession(self): body = { "access_token": "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl", "expires_in": 3600, "restricted_to": [], "token_type": "bearer", "refresh_token": "new_refresh_token!!" } httpretty.register_uri(httpretty.POST, "https://www.box.com/api/oauth2/token", body=json.dumps(body), status=200, content_type='text/json') refresh_token = "refresh_token_dummy#!" box = boxpython.BoxSession(self.client_id, self.client_secret, refresh_token, last_access_token=None) query_body = httpretty.last_request().body self.assertEqual( urlparse.parse_qs(query_body), { "client_id": [self.client_id], "client_secret": [self.client_secret], "grant_type": ["refresh_token"], "refresh_token": [refresh_token], }) self.assertEqual(body['refresh_token'], box.refresh_token) self.assertEqual(body['access_token'], box.access_token)
def test_create_boxsession_no_refresh_token(self): refresh_token = "refresh_token_dummy#!" access_token = "access_token_dummy#!" boxpython.BoxSession(self.client_id, self.client_secret, refresh_token, access_token) self.assertIsInstance(httpretty.httpretty.last_request, httpretty.core.HTTPrettyRequestEmpty)
def run_big_file_senario(self): (client_id, client_secret, refresh_token, access_token) = self.__get_box_data(interactive=True) box = boxpython.BoxSession(client_id, client_secret, refresh_token, access_token, self.__new_tokens_callback) folder_id = self.__create_boxpython_test_folder(box) self.passed_in_progress_callback = False my_file_content2 = os.urandom(1024 * 1024 * 1) #1 MO my_file2 = self.__create_file(my_file_content2, "/tmp/test_big_file.bin") try: resp = box.chunk_upload_file( "test_big_file.bin", folder_id, my_file2, progress_callback=self.__progress_callback, chunk_size=int(len(my_file_content2) / 10.0)) my_file2_id = int(resp['entries'][0]['id']) self.assertTrue(self.passed_in_progress_callback) self.passed_in_progress_callback = False try: my_file2_dl = my_file2 + 'dl' resp = box.download_file( my_file2_id, my_file2_dl, progress_callback=self.__progress_callback, chunk_size=int(len(my_file_content2) / 10.0)) self.assertTrue(filecmp.cmp(my_file2, my_file2_dl)) self.assertTrue(self.passed_in_progress_callback) finally: os.remove(my_file2_dl) finally: os.remove(my_file2)
def test_get_folder_info_with_expired_refresh_token(self): body_token = { "access_token": "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl", "expires_in": 3600, "restricted_to": [], "token_type": "bearer", "refresh_token": "new_refresh_token!!" } httpretty.register_uri(httpretty.POST, "https://www.box.com/api/oauth2/token", body=json.dumps(body_token), status=200, content_type='text/json') folder_id = 168 body = get_dummy_folder_result() body['id'] = folder_id httpretty.register_uri(httpretty.GET, "https://api.box.com/2.0/folders/%s" % folder_id, responses=[ httpretty.Response(body=json.dumps({}), status=401), httpretty.Response(body=json.dumps({}), status=401), ]) refresh_token = "refresh_token_dummy expired #!" access_token = "access_token_dummy expired #!" box = boxpython.BoxSession(self.client_id, self.client_secret, refresh_token, access_token) with self.assertRaises(boxpython.BoxError) as cm: resp = box.get_folder_info(folder_id) self.assertEqual(cm.exception.status, 401)
def run_full_scenario(self): (client_id, client_secret, refresh_token, access_token) = self.__get_box_data(interactive=True) box = boxpython.BoxSession(client_id, client_secret, refresh_token, access_token, self.__new_tokens_callback) box.get_folder_info(0) folder_id = self.__create_boxpython_test_folder(box) resp = box.get_user_info() self.assertTrue('login' in resp) self.assertTrue('job_title' in resp) self.assertTrue('avatar_url' in resp) resp = box.get_folder_items(folder_id) self.assertEqual( resp, { u'total_count': 0, u'offset': 0, u'limit': 100, u'order': [{ u'direction': u'ASC', u'by': u'type' }, { u'direction': u'ASC', u'by': u'name' }], u'entries': [] }) resp = box.get_folder_items(folder_id, limit=1000, offset=2) self.assertEqual( resp, { u'total_count': 0, u'offset': 2, u'limit': 1000, u'order': [{ u'direction': u'ASC', u'by': u'type' }, { u'direction': u'ASC', u'by': u'name' }], u'entries': [] }) resp = box.get_folder_items(folder_id, limit=1000, offset=2, fields_list=['name', 'created_at']) self.assertEqual( resp, { u'total_count': 0, u'offset': 2, u'limit': 1000, u'order': [{ u'direction': u'ASC', u'by': u'type' }, { u'direction': u'ASC', u'by': u'name' }], u'entries': [] }) resp = box.create_folder("new_folder", folder_id) new_folder = int(resp['id']) resp = box.get_folder_items(folder_id) self.assertEqual(resp['total_count'], 1) self.assertEqual(int(resp['entries'][0]['id']), new_folder) my_file_content1 = "content of my file" my_file1 = self.__create_file(my_file_content1) try: resp = box.upload_file("my_file1.txt", new_folder, my_file1) my_file1_id = int(resp['entries'][0]['id']) finally: os.remove(my_file1) resp = box.get_file_info(my_file1_id) self.assertEqual(resp['name'], "my_file1.txt") box.delete_file(my_file1_id) with self.assertRaises(boxpython.BoxError) as cm: box.get_file_info(my_file1_id) # Create file my_file_content1 = "content of my file " * 20 my_file1 = self.__create_file(my_file_content1) try: resp = box.upload_file("my_file1.txt", new_folder, my_file1) my_file1_id = int(resp['entries'][0]['id']) except: os.remove(my_file1) raise try: resp = box.upload_file("my_file1.txt", new_folder, my_file1) raise Exception( "Uploading existing file should raise an error 409") except: pass finally: os.remove(my_file1) self.__check_uploaded_file(box, my_file1_id, my_file_content1) # Update file my_file_content1 = "content of my file updated " * 20 my_file1 = self.__create_file(my_file_content1) try: resp = box.upload_new_file_version("my_file1.txt", new_folder, my_file1_id, my_file1) except: pass finally: os.remove(my_file1) self.__check_uploaded_file(box, my_file1_id, my_file_content1) # Copy file resp = box.create_folder("sub_folder", new_folder) sub_folder = int(resp['id']) resp = box.copy_file(my_file1_id, sub_folder) my_file1_copied_id = int(resp['id']) self.__check_uploaded_file(box, my_file1_id, my_file_content1) self.__check_uploaded_file(box, my_file1_copied_id, my_file_content1) # Chunk upload self.passed_in_progress_callback = False my_file_content2 = os.urandom(1024 * 1024 * 1) #1 MO my_file2 = self.__create_file(my_file_content2) try: resp = box.chunk_upload_file( "my_file2.txt", new_folder, my_file2, progress_callback=self.__progress_callback) my_file2_id = int(resp['entries'][0]['id']) finally: os.remove(my_file2) self.assertTrue(self.passed_in_progress_callback) self.passed_in_progress_callback = False my_file_content3 = b'' my_file3 = self.__create_file(my_file_content3) try: resp = box.chunk_upload_file( "my_file3.txt", new_folder, my_file3, progress_callback=self.__progress_callback) my_file3_id = int(resp['entries'][0]['id']) finally: os.remove(my_file3) self.assertTrue(self.passed_in_progress_callback) self.passed_in_progress_callback = False my_file_content4 = b'' my_file4 = self.__create_file(my_file_content4) try: resp = box.chunk_upload_file( "my_file4.txt", new_folder, my_file4, progress_callback=self.__progress_callback) my_file4_id = int(resp['entries'][0]['id']) finally: os.remove(my_file4) self.assertTrue(self.passed_in_progress_callback) self.__check_uploaded_file(box, my_file2_id, my_file_content2) self.__check_uploaded_file(box, my_file3_id, my_file_content3) self.__check_uploaded_file(box, my_file4_id, my_file_content4) # Search search_result = box.search(query="boxpython_test_folder") self.assertTrue(search_result["entries"] is not None) # Sometimes, it takes a little bit of time for the search indexes to be # updated with the new file/folder metadata. So we do not check values. #self.assertEqual(folder_id, search_result['entries'][0]['id']) resp = box.delete_folder(folder_id)