def test_add_cultivar_successful_submit_no_stock_and_inactive(self, mock_save, app, db):
     """Flash messages if cultivar is not in stock and has been dropped."""
     bn = BotanicalName()
     cn = CommonName()
     idx = Index()
     db.session.add_all([bn, cn, idx])
     bn.name = "Digitalis purpurea"
     idx.name = "Perennial Flower"
     cn.name = "Foxglove"
     cn.index = idx
     bn.common_names.append(cn)
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.post(
             url_for("seeds.add_cultivar", cn_id=cn.id),
             data=dict(
                 botanical_name=str(bn.id),
                 index=str(idx.id),
                 description="Very foxy.",
                 active="",
                 in_stock="",
                 name="Foxy",
                 section="0",
                 thumbnail=(io.BytesIO(b"fawks"), "foxy.jpg"),
             ),
             follow_redirects=True,
         )
     assert '"Foxy Foxglove" is not in stock' in str(rv.data)
     assert '"Foxy Foxglove" is currently inactive' in str(rv.data)
 def test_remove_botanical_name_renders_page(self, app, db):
     """Render seeds/remove_botanical_name.html with valid bn_id."""
     bn = BotanicalName()
     db.session.add(bn)
     bn.name = "Asclepias incarnata"
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.remove_botanical_name", bn_id=bn.id))
     assert "Remove Botanical Name" in str(rv.data)
 def test_select_botanical_name_selected(self, app, db):
     """Redirect to dest if a botanical name is selected."""
     bn = BotanicalName()
     db.session.add(bn)
     bn.name = "Asclepias incarnata"
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.post(
             url_for("seeds.select_botanical_name", dest="seeds.edit_botanical_name"),
             data=dict(botanical_name=bn.id),
         )
     assert rv.status_code == 302
     assert rv.location == url_for("seeds.edit_botanical_name", bn_id=bn.id, _external=True)
 def test_remove_botanical_name_verified(self, app, db):
     """Delete BotanicalName from db if verify_removal checked."""
     bn = BotanicalName()
     db.session.add(bn)
     bn.name = "Asclepias incarnata"
     db.session.commit()
     assert BotanicalName.query.count() == 1
     with app.test_client() as tc:
         tc.post(
             url_for("seeds.remove_botanical_name", bn_id=bn.id),
             data=dict(verify_removal=True),
             follow_redirects=True,
         )
     assert BotanicalName.query.count() == 0
def foxy_cultivar():
    """Generate a Cultivar object based on Foxy Foxglove."""
    cultivar = Cultivar()
    cultivar.name = "Foxy"
    cultivar.description = "Not to be confused with that Hendrix song."
    bn = BotanicalName()
    bn.name = "Digitalis purpurea"
    cultivar.botanical_name = bn
    idx = Index()
    idx.name = "Perennial Flower"
    cn = CommonName()
    cn.name = "Foxglove"
    cn.index = idx
    cultivar.common_name = cn
    return cultivar
 def test_remove_botanical_name_not_verified(self, app, db):
     """Redirect to self and flash message if verify_removal unchecked."""
     bn = BotanicalName()
     bn.name = "Asclepias incarnata"
     db.session.add(bn)
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.post(url_for("seeds.remove_botanical_name", bn_id=bn.id), data=dict(verify_removal=""))
     assert rv.status_code == 302
     assert rv.location == url_for("seeds.remove_botanical_name", bn_id=bn.id, _external=True)
     with app.test_client() as tc:
         rv = tc.post(
             url_for("seeds.remove_botanical_name", bn_id=bn.id), data=dict(verify_removal=""), follow_redirects=True
         )
     assert "Botanical name was not removed" in str(rv.data)