class VendorTests(CRUDTest): """Test cases for the Vendors class""" def __init__(self): """Constructor""" CRUDTest.__init__(self) self.vendors = None self.last_id = None self.vendors = None def set_up(self, mysql_x, user=None, passwd=None): """Setup the test cases""" self.mygarage = self.begin(mysql_x, "Vendors", user, passwd) self.vendors = Vendors(self.mygarage) def create(self): """Run Create test case""" print("\nCRUD: Create test case") vendor_data = { "name": "ACME Bolt Company", "url": "www.acme.org", "sources": "looney toons" } self.vendors.create(vendor_data) self.last_id = self.vendors.get_last_docid() print("\tLast insert id = {0}".format(self.last_id)) def read_all(self): """Run Read(all) test case""" print("\nCRUD: Read (all) test case") docs = self.vendors.read() self.show_docs(docs, 5) def read_one(self): """Run Read(record) test case""" print("\nCRUD: Read (doc) test case") docs = self.vendors.read(self.last_id) self.show_docs(docs, 1) def update(self): """Run Update test case""" print("\nCRUD: Update test case") vendor_data = { "_id": self.last_id, "name": "ACME Nut Company", "url": "www.weesayso.co", } self.vendors.update(vendor_data) def delete(self): """Run Delete test case""" print("\nCRUD: Delete test case") self.vendors.delete(self.last_id) docs = self.vendors.read(self.last_id) if not docs: print("\tNot found (deleted).")
def vendor(vendor_id=None): """Manage vendor CRUD operations.""" vendor_collection = Vendors(mygarage) form = VendorForm() # Get data from the form if present form_vendorid = form.vendorid.data form_name = form.name.data form_url = form.url.data form_sources = form.sources.data # If the route with the variable is called, change the create button to update # then populate the form with the data from the row in the table. Otherwise, # remove the delete button because this will be a new data item. if vendor_id: form.create_button.label.text = "Update" # Here, we get the data and populate the form data = vendor_collection.read(vendor_id) if data == []: flash("Vendor not found!") data_dict = dict(data[0]) form.vendorid.data = data_dict.get("_id", None) form.name.data = data_dict.get("name", None) form.url.data = data_dict.get("url", None) form.sources.data = data_dict.get("sources", None) else: del form.del_button if request.method == 'POST': # First, determine if we must create, update, or delete when form posts. operation = "Create" if form.close_button.data: return redirect('/list/vendors') if form.create_button.data: if form.create_button.label.text == "Update": operation = "Update" if form.del_button and form.del_button.data: operation = "Delete" if form.validate_on_submit(): # Get the data from the form here if operation == "Create": try: vendor_data = { "name": form_name, "url": form_url, "sources": form_sources, } res = vendor_collection.create(vendor_data) if res[0]: flash("Added.") else: flash("Cannot add vendor: {0}".format(res[1])) return redirect('/list/vendors') except Exception as err: flash(err) elif operation == "Update": try: vendor_data = { "_id": form.vendorid.data, "name": form_name, "url": form_url, "sources": form_sources, } res = vendor_collection.update(vendor_data) if res[0]: flash("Updated.") else: flash("Cannot update vendor: {0}".format(res[1])) return redirect('/list/vendors') except Exception as err: flash(err) else: try: if not mygarage.vendor_in_use(form_vendorid): res = vendor_collection.delete(form_vendorid) if res[0]: flash("Deleted.") else: flash("Cannot delete vendor: {0}".format(res[1])) else: flash("Vendor {0} in use. Cannot delete.".format( form_name)) return redirect('/list/vendors') except Exception as err: flash(err) else: flash_errors(form) return render_template("vendor.html", form=form)