##// END OF EJS Templates
changes after session manager code review
changes after session manager code review

File last commit:

r13057:c4a6408b
r13057:c4a6408b
Show More
test_sessions_api.py
95 lines | 3.3 KiB | text/x-python | PythonLexer
"""Test the sessions web service API."""
import os
import sys
import json
import requests
from IPython.utils.jsonutil import date_default
from IPython.html.utils import url_path_join
from IPython.html.tests.launchnotebook import NotebookTestBase
class SessionAPITest(NotebookTestBase):
"""Test the sessions web service API"""
def notebook_url(self):
return url_path_join(super(SessionAPITest,self).base_url(), 'api/notebooks')
def session_url(self):
return super(SessionAPITest,self).base_url() + 'api/sessions'
def mknb(self, name='', path='/'):
url = self.notebook_url() + path
return url, requests.post(url)
def delnb(self, name, path='/'):
url = self.notebook_url() + path + name
r = requests.delete(url)
return r.status_code
def test_no_sessions(self):
"""Make sure there are no sessions running at the start"""
url = self.session_url()
r = requests.get(url)
self.assertEqual(r.json(), [])
def test_session_root_handler(self):
# POST a session
url, nb = self.mknb()
notebook = nb.json()
model = {'notebook': {'name':notebook['name'], 'path': notebook['path']}}
r = requests.post(self.session_url(), data=json.dumps(model, default=date_default))
data = r.json()
assert isinstance(data, dict)
self.assertIn('name', data['notebook'])
self.assertEqual(data['notebook']['name'], notebook['name'])
# GET sessions
r = requests.get(self.session_url())
assert isinstance(r.json(), list)
assert isinstance(r.json()[0], dict)
self.assertEqual(r.json()[0]['id'], data['id'])
# Clean up
self.delnb('Untitled0.ipynb')
sess_url = self.session_url() +'/'+data['id']
r = requests.delete(sess_url)
self.assertEqual(r.status_code, 204)
def test_session_handler(self):
# Create a session
url, nb = self.mknb()
notebook = nb.json()
model = {'notebook': {'name':notebook['name'], 'path': notebook['path']}}
r = requests.post(self.session_url(), data=json.dumps(model, default=date_default))
session = r.json()
# GET a session
sess_url = self.session_url() + '/' + session['id']
r = requests.get(sess_url)
assert isinstance(r.json(), dict)
self.assertEqual(r.json(), session)
# PATCH a session
model = {'notebook': {'name':'test.ipynb', 'path': '/'}}
r = requests.patch(sess_url, data=json.dumps(model, default=date_default))
# Patching the notebook webservice too (just for consistency)
requests.patch(self.notebook_url() + '/Untitled0.ipynb',
data=json.dumps({'name':'test.ipynb'}))
print r.json()
assert isinstance(r.json(), dict)
self.assertIn('name', r.json()['notebook'])
self.assertIn('id', r.json())
self.assertEqual(r.json()['notebook']['name'], 'test.ipynb')
self.assertEqual(r.json()['id'], session['id'])
# DELETE a session
r = requests.delete(sess_url)
self.assertEqual(r.status_code, 204)
r = requests.get(self.session_url())
self.assertEqual(r.json(), [])
# Clean up
r = self.delnb('test.ipynb')
self.assertEqual(r, 204)