def test_notebook_view_old_revision(client, test_notebook): initial_revision = NotebookRevision.objects.filter( notebook=test_notebook).last() new_revision_content = "My new fun content" NotebookRevision.objects.create(content=new_revision_content, notebook=test_notebook, title="Second revision") resp = client.get( reverse("notebook-view", args=[str(test_notebook.id)]) + f"?revision={initial_revision.id}") assert resp.status_code == 200 assert get_title_block(resp.content) == initial_revision.title print(str(resp.content)) assert get_script_block(resp.content, "iomd", "text/iomd") == initial_revision.content assert get_script_block_json(resp.content, "notebookInfo") == { "connectionMode": "SERVER", "files": [], "forked_from": False, "notebook_id": test_notebook.id, "revision_id": initial_revision.id, "revision_is_latest": False, "title": "First revision", "user_can_save": False, "username": "******", "max_filename_length": MAX_FILENAME_LENGTH, "max_file_size": MAX_FILE_SIZE, }
def test_notebook_revisions_page(fake_user, test_notebook, client): # create another notebook revision NotebookRevision.objects.create(notebook=test_notebook, title="second revision", content="*fake notebook content 2*") resp = client.get( reverse("notebook-revisions", args=[str(test_notebook.id)])) assert get_title_block( resp.content) == f"Revisions - {test_notebook.title}" assert get_script_block_json(resp.content, "pageData") == { "files": [], "ownerInfo": { "avatar": None, "full_name": fake_user.get_full_name(), "notebookId": test_notebook.id, "title": test_notebook.title, "username": fake_user.username, }, "revisions": [{ "date": r.created.isoformat(), "id": r.id, "notebookId": test_notebook.id, "title": r.title, } for r in NotebookRevision.objects.filter(notebook_id=test_notebook.id) ], "userInfo": {}, }
def test_notebook_view(client, test_notebook): initial_revision = NotebookRevision.objects.filter( notebook=test_notebook).last() resp = client.get(reverse("notebook-view", args=[str(test_notebook.id)])) assert resp.status_code == 200 assert get_title_block(resp.content) == initial_revision.title expected_content = '<script id="iomd" type="text/iomd">{}</script>'.format( initial_revision.content) assert expected_content in str(resp.content) assert get_script_block_json(resp.content, "notebookInfo") == { "connectionMode": "SERVER", "files": [], "forked_from": False, "notebook_id": test_notebook.id, "revision_id": initial_revision.id, "revision_is_latest": True, "title": "First revision", "user_can_save": False, "username": "******", "max_filename_length": MAX_FILENAME_LENGTH, "max_file_size": MAX_FILE_SIZE, } # add a new revision, verify that a fresh load gets it new_revision_content = "My new fun content" new_revision = NotebookRevision.objects.create( content=new_revision_content, notebook=test_notebook, title="Second revision") resp = client.get(reverse("notebook-view", args=[str(test_notebook.id)])) assert resp.status_code == 200 assert get_title_block(resp.content) == new_revision.title new_expected_content = '<script id="iomd" type="text/iomd">{}</script>'.format( new_revision_content) assert new_expected_content in str(resp.content)
def test_user_view_with_different_names(transactional_db, client, username, first_name, last_name): test_user = User.objects.create( username=username, first_name=first_name, last_name=last_name, email="*****@*****.**", password="******", ) notebook = Notebook.objects.create(owner=test_user, title="Fake notebook") revision = NotebookRevision.objects.create( notebook=notebook, title="First revision", content="*fake notebook content*") resp = client.get(reverse("user", kwargs={"name": test_user.username})) assert resp.status_code == 200 if test_user.get_full_name(): assert (get_title_block(resp.content) == f"{test_user.username} ({test_user.get_full_name()})") else: assert get_title_block(resp.content) == f"{test_user.username}" assert get_script_block_json(resp.content, "pageData") == { "notebookList": [{ "id": notebook.id, "last_revision": revision.created.isoformat(), "title": revision.title, }], "thisUser": { "avatar": None, "full_name": test_user.get_full_name(), "name": username }, "userInfo": {}, }
def test_user_view_github(settings, transactional_db, client, fake_user): settings.SOCIAL_AUTH_GITHUB_KEY = "yabbadabbadoo" resp = client.get(reverse("user", kwargs={"name": fake_user.username})) assert resp.status_code == 200 assert get_script_block_json(resp.content, "pageData") == { "notebookList": [], "thisUser": { "avatar": None, "full_name": fake_user.get_full_name(), "name": fake_user.username, "github_url": "https://github.com/{}/".format(fake_user.username), }, "userInfo": {}, }
def test_index_view(client, ten_test_notebooks, fake_user, logged_in): if logged_in: client.force_login(fake_user) resp = client.get(reverse("index")) assert resp.status_code == 200 # if user logged in, they should have an avatar defined fake_user.refresh_from_db() if logged_in: assert fake_user.avatar.startswith("https://www.gravatar.com/avatar/") else: assert fake_user.avatar is None listed_notebooks = ten_test_notebooks[::2] revisions = NotebookRevision.objects expected_gravatar_url = ( "https://www.gravatar.com/avatar/eaee5961bc7ad96538a4933cb069fda9?d=identicon" ) # assert that the pageData element has the expected structure assert get_title_block(resp.content) == "Iodide" assert get_script_block_json(resp.content, "pageData") == { "notebookList": [{ "avatar": fake_user.avatar, "id": test_notebook.id, "latestRevision": (revisions.filter(notebook=test_notebook)[0].created.isoformat()), "owner": test_notebook.owner.username, "title": test_notebook.title, } for test_notebook in reversed(listed_notebooks)], "userInfo": { "name": fake_user.username, "avatar": expected_gravatar_url, "notebooks": [{ "id": test_notebook.id, "latestRevision": (revisions.filter( notebook=test_notebook)[0].created.isoformat()), "title": test_notebook.title, } for test_notebook in reversed(ten_test_notebooks)], } if logged_in else {}, }