def test_delete_deletes(test_app, logged_in, dummy_item, csrf_token): assert Item.fetch_by_name_and_catagory_name(dummy_item.name, dummy_item.catagory) test_app.post(url_for('delete_item_page', item_name=dummy_item.name, catagory_name=dummy_item.catagory), data={'_csrf_token': csrf_token}) with pytest.raises(NoResultFound): Item.fetch_by_name_and_catagory_name(dummy_item.name, dummy_item.catagory)
def update_item(item_name, catagory_name): """Post endpoint to update an item. If form is invalid will return create item page with errors displayed, otherwise update item and redirect to item page. """ try: item = Item.fetch_by_name_and_catagory_name(item_name, catagory_name) except NoResultFound: abort(404) errors = form_errors(request.form) new_item_name = request.form.get('name') new_catagory_name = request.form.get('catagory') new_description = request.form.get('description') if errors: values = { 'name': new_item_name, 'catagory': new_catagory_name, 'description': new_description } catagories = [c.name for c in Catagory.fetch_all()] return render_template( 'add_item.html', catagories=catagories, values=values, errors=errors ) item.update( name=new_item_name, catagory_name=new_catagory_name, description=new_description ) return redirect(url_for( 'read_item', item_name=new_item_name, catagory_name=new_catagory_name ))
def delete_item(item_name, catagory_name): """Post endpoint to delete item. Redirects to home.""" try: item = Item.fetch_by_name_and_catagory_name(item_name, catagory_name) except NoResultFound: abort(404) item.delete() return redirect(url_for('home'))
def test_post_adds_to_db(test_app, logged_in, csrf_token): test_app.post(url_for('create_item'), data={ 'name': 'fork', 'catagory': 'soccer', 'description': 'a descripticon', '_csrf_token': csrf_token }) item = Item.fetch_by_name_and_catagory_name('fork', 'soccer') assert item.description == 'a descripticon'
def update_item_page(item_name, catagory_name): """Endpoint to display update item page.""" item = Item.fetch_by_name_and_catagory_name(item_name, catagory_name) catagories = [c.name for c in Catagory.fetch_all()] return render_template( 'edit_item.html', catagories=catagories, values={ 'name': item.name, 'catagory': item.catagory_name, 'description': item.description }, )
def test_post_form_updates_item(test_app, dummy_items, logged_in, csrf_token): item_tuple = dummy_items[0] test_app.post(url_for('update_item', item_name=item_tuple.name, catagory_name=item_tuple.catagory), data={ 'name': 'fork', 'catagory': 'soccer', 'description': 'a new description', '_csrf_token': csrf_token }) item = Item.fetch_by_name_and_catagory_name('fork', 'soccer') assert item.description == 'a new description'
def read_item(item_name, catagory_name): """Endpoint to display individual item.""" item = Item.fetch_by_name_and_catagory_name(item_name, catagory_name) return render_template('item.html', item=item)
def test_edit_item(test_app, dummy_items): # User visits home page and logs in. current_page = HomePage(test_app).visit() current_page.login() current_page = HomePage(test_app).visit() assert current_page.is_logged_in # User clicks link to add item. current_page = CreateItemPage( test_app, current_page.add_item_link.url ).visit() # User submits add item form and is redirected to the new item's # page. assert current_page.header.text == 'Add Item' current_page.add_item( catagory='soccer', name='Corner Flag', description='A clag for a forner.' ) assert current_page.response.status_code == 302 current_page = ItemPage(test_app, current_page.response.location).visit() assert current_page.header == 'Corner Flag' # User decides to edit item. edit_item_page = EditItemPage(test_app, current_page.edit_item_link.url) current_page = edit_item_page.visit() assert current_page.header.text == 'Edit Item' assert 'Corner Flag' in current_page.html.decode() assert 'A clag for a forner.' in current_page.html.decode() assert current_page.html.find('option', selected=True).text == 'soccer' # User submits edit item form and is redirected to the item's page. current_page.edit_item( catagory='soccer', name='Corner Flag', description='A flag for a corner.' ) assert current_page.response.status_code == 302 current_page = ItemPage(test_app, current_page.response.location).visit() assert current_page.header == 'Corner Flag' assert 'A flag for a corner.' in current_page.html.decode() # User decides to delete item. current_page = delete_item_page = DeleteItemPage( test_app, current_page.delete_item_link.url ).visit() assert current_page.header.text == 'Delete Item' # User clicks the confirm delete buttom and is redirected to # home page. current_page.confirm_delete() assert current_page.response.status_code == 302 current_page = ItemPage(test_app, current_page.response.location).visit() sections = current_page.html.find_all('h2') assert sections[0].text == 'Catagories' assert sections[1].text == 'Latest Items' with pytest.raises(NoResultFound): Item.fetch_by_name_and_catagory_name('Corner Flag', 'Soccer')