def test_edit_packet_submission_no_changes(self, app, db):
     """Flash a message if no changes are made in a form submission."""
     cultivar = Cultivar()
     packet = Packet()
     db.session.add(packet, cultivar)
     packet.price = Decimal("2.99")
     packet.quantity = Quantity(value=100, units="seeds")
     packet.sku = "8675309"
     cultivar.name = "Foxy"
     cultivar.common_name = CommonName(name="Foxglove")
     cultivar.packets.append(packet)
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.post(
             url_for("seeds.edit_packet", pkt_id=packet.id),
             data=dict(
                 id=packet.id,
                 price=packet.price,
                 qty_val=str(packet.quantity.value),
                 units=packet.quantity.units,
                 sku=packet.sku,
             ),
             follow_redirects=True,
         )
     assert "No changes to" in str(rv.data)
 def test_cultivar_bad_slugs(self, app, db):
     """Return 404 if any slug given does not correspond to a db entry."""
     app.config["SHOW_CULTIVAR_PAGES"] = True
     idx = Index()
     cn = CommonName()
     cultivar = Cultivar()
     db.session.add_all([idx, cn, cultivar])
     idx.name = "Perennial Flower"
     cn.name = "Foxglove"
     cultivar.name = "Foxy"
     cultivar.common_name = cn
     cultivar.description = "Like that Hendrix song."
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.cultivar", idx_slug=idx.slug, cn_slug=cn.slug, cv_slug="no-biscuit"))
     assert rv.status_code == 404
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.cultivar", idx_slug="no_biscuit", cn_slug=cn.slug, cv_slug=cultivar.slug))
     assert rv.status_code == 404
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.cultivar", idx_slug=idx.slug, cn_slug="no-biscuit", cv_slug=cultivar.slug))
     assert rv.status_code == 404
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.cultivar", idx_slug="no-biscuit", cn_slug="no-biscuit", cv_slug="no-biscuit"))
     assert rv.status_code == 404
 def test_add_packet_renders_page(self, app, db):
     """Render form page given a valid cv_id."""
     cultivar = Cultivar()
     db.session.add(cultivar)
     cultivar.name = "Foxy"
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.add_packet", cv_id=cultivar.id))
     assert "Add a Packet" in str(rv.data)
 def test_validate_sku(self, db):
     """Raise ValidationError if SKU already exists in db."""
     packet = Packet()
     cultivar = Cultivar()
     db.session.add_all([packet, cultivar])
     packet.sku = '8675309'
     cultivar.name = 'Jenny'
     packet.cultivar = cultivar
     db.session.commit()
     form = AddPacketForm(cultivar=cultivar)
     form.sku.data = '8675309'
     with pytest.raises(ValidationError):
         form.validate_sku(form.sku)
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_edit_packet_renders_page(self, app, db):
     """Render form page with valid pkt_id and no post data."""
     cultivar = Cultivar()
     packet = Packet()
     db.session.add_all([packet, cultivar])
     packet.price = Decimal("2.99")
     packet.quantity = Quantity(value=100, units="seeds")
     packet.sku = "8675309"
     cultivar.name = "Foxy"
     cultivar.common_name = CommonName(name="Foxglove")
     cultivar.packets.append(packet)
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.edit_packet", pkt_id=packet.id))
     assert "Edit Packet" in str(rv.data)
 def test_select_packet_valid_submission(self, app, db):
     """Redirect to dest given valid selection."""
     cultivar = Cultivar()
     packet = Packet()
     db.session.add_all([cultivar, packet])
     cultivar.name = "Foxy"
     cultivar.common_name = CommonName(name="Foxglove")
     cultivar.packets.append(packet)
     packet.price = Decimal("1.99")
     packet.quantity = Quantity(value=100, units="seeds")
     packet.sku = "8675309"
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.post(url_for("seeds.select_packet", dest="seeds.edit_packet"), data=dict(packet=packet.id))
     assert rv.location == url_for("seeds.edit_packet", pkt_id=packet.id, _external=True)
 def test_cv_slugs_not_in_cultivar(self, app, db):
     """Return 404 if slugs return db entries, but entry not in cultivar."""
     app.config["SHOW_CULTIVAR_PAGES"] = True
     idx1 = Index()
     idx2 = Index()
     cn1 = CommonName()
     cn2 = CommonName()
     cultivar = Cultivar()
     db.session.add_all([idx1, idx2, cn1, cn2, cultivar])
     idx1.name = "Perennial Flower"
     idx2.name = "Long Hair"
     cn1.name = "Foxglove"
     cn2.name = "Persian"
     cultivar.name = "Foxy"
     cultivar.common_name = cn1
     db.session.commit()
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.cultivar", idx_slug=idx1.slug, cn_slug=cn2.slug, cv_slug=cultivar.slug))
     assert rv.status_code == 404
     with app.test_client() as tc:
         rv = tc.get(url_for("seeds.cultivar", idx_slug=idx2.slug, cn_slug=cn1.slug, cv_slug=cultivar.slug))
     assert rv.status_code == 404