예제 #1
0
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)
예제 #2
0
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
    ))
예제 #3
0
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'
예제 #5
0
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
        },
    )
예제 #6
0
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'
예제 #7
0
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')