def test_inventory_price_invalid_bulk(self): """ Tests that a price invalid characters cannot be entered """ bip = BulkPageInventoryPrice(self.driver, self.ts) input_field = bip.operation_input() send_keys(input_field, 'foo') err = bip.error_baloon() assert err == "Must be a number" assert bip.operation_apply().is_enabled( ) is False, 'Apply button is not disabled' send_keys(input_field, BACKSPACE_KEYS + ' 123') err = bip.error_baloon() assert err == "Must be a number" send_keys(input_field, BACKSPACE_KEYS + '0x10') err = bip.error_baloon() assert err == "Must be a number" send_keys(input_field, BACKSPACE_KEYS + '-1') err = bip.error_baloon() assert err == "Must be positive number"
def test_etsy_upload(self): """ Verify that listings can be fetched from Etsy, changed in vela GUI and pushed back to Etsy """ # debug # with open('tests-etsy/data.json') as f: # data = json.load(f) # self.validate_listings(data, '20161124_184056') # return # Delete log files logs = Logs(os.environ['LOG_CLEAN_SCRIPT'], os.environ['LOG_GREP_SCRIPT']) logs.empty() timestamp = strftime("%Y%m%d_%H%M%S") credentials = self.get_credentials() etsy = EtsyApiForATs(credentials) # Delete our section from Etsy log("Deleting section from Etsy") etsy.remove_at_section(AT_SECTION) # Delete and re-create listings on Etsy log("Removing AT listings from Etsy") etsy.remove_at_listings() log("Creating AT listings on Etsy") st_id = etsy.get_shipping_template_id() for i in range(3): title = "{}_{:02d}".format(AT_TITLE, i) etsy.create_listing( dict(self.NEW_LISTING, title=title, taxonomy_id=1, shipping_template_id=st_id)) listings = etsy.get_listings() for listing_id, title in ((l['listing_id'], l['title']) for l in listings if l['title'][:len(AT_TITLE)] == AT_TITLE): print(listing_id, title) # Clean up Vela DB, Load new shop log("Cleaning Vela DB") # Reset feature flags for features that are not in production yet self.db.reset_user_profile_flags(self.user_id, BETA_FEATURE_FLAGS) self.reload_shop() log("Making UI changes") self.go_to_bulk() bp = BulkPage(self.driver) # Edit title log(" title") bp.edit_part('Title').click() bp.select_operation('Add After') send_keys(bp.operation_input(), ' ' + timestamp) bp.operation_apply().click() # Edit description log(" description") bp.edit_part('Description').click() bp.select_operation('Add After') send_keys(bp.operation_input_description(), ' ' + timestamp) bp.operation_apply().click() # Edit category log(" category") bp.edit_part('Category').click() bp.select_category(AT_CATEGORIES) bp.operation_apply().click() # Edit photos log(" photos") bp.edit_part('Photos').click() with Photos(self.driver) as photos: for i, img in enumerate(AT_IMAGES): photos.select_photo( i, os.path.join(photos.photo_dir, img['file'])) bp.operation_apply().click() # Edit tags log(" tags") bp.edit_part('Tags').click() send_keys(bp.operation_input(), ', '.join(AT_TAGS)) bp.operation_apply().click() # Edit materials log(" materials") bp.edit_part('Materials').click() send_keys(bp.operation_input(), ', '.join(AT_MATERIALS)) bp.operation_apply().click() # Edit section log(" section") bp.edit_part('Section').click() bp.operation_select().click() sleep(2) send_keys(bp.operation_menu_new_item_input(), AT_SECTION + Keys.RETURN) bp.operation_apply().click() # Edit Occasion log(" occasion") bp.edit_part('Occasion').click() bp.select_occasion(AT_OCCASION) bp.operation_apply().click() # Edit Holiday log(" holiday") bp.edit_part('Holiday').click() bp.select_holiday(AT_HOLIDAY) bp.operation_apply().click() # Edit variations log(" variations") bp.edit_part('Variations').click() biv = BulkPageInventoryVariations(self.driver, self.ts) bp.select_category(AT_CATEGORIES) bulk_row = biv.bulk_edit_row biv.set_property(bulk_row, 0, AT_VAR_PROPERTY_NAME) for option_name in AT_VAR_OPTION_VALUES: biv.add_option(bulk_row, 0, option_name) bp.operation_apply().click() # Edit price log(" price") bp.edit_part('Price').click() bip = BulkPageInventoryPrice(self.driver, self.ts) bip.select_operation('Change To') input_field = bip.operation_input() send_keys(input_field, AT_PRICE) bp.operation_apply().click() # Edit quantity log(" quantity") bp.edit_part('Quantity').click() biq = BulkPageInventoryQuantity(self.driver, self.ts) biq.select_operation('Change To') input_field = biq.operation_input() send_keys(input_field, str(AT_QUANTITY)) biq.operation_apply().click() # Edit Sku log(" sku") bp.edit_part('SKU').click() bis = BulkPageInventorySku(self.driver, self.ts) input_field = bis.operation_input() send_keys(input_field, AT_SKU) bis.operation_apply().click() # Sync Updates log("Syncing Updates") bp.sync_updates_button().click() sleep(10) self.wait_for_synced() # Get listings from Etsy data = etsy.get_at_listings_details() self.validate_listings(data, timestamp) # Check logs for errors logs.check_for_errors()
def test_inventory_set_price_normal(self): """ Tests that a price can be set in bulk edit inventory """ expected_listings_02 = { 'Product #1 without variations': '$42.00', 'Product #2 with one variation with pricing': [('Beige', '$42.00'), ('Black', '$42.00'), ('Blue', '$42.00'), ('Silver', '$42.00'), ('White', '$42.00'), ('Yellow', '$42.00'), ('Custom color 1', '$42.00'), ('Custom color 2', '$42.00')], 'Product #3 with two variations with quantity on both and pricing on both': [('XXS US Women\'s', 'Material 1', '$42.00'), ('XXS US Women\'s', 'Material 2', '$42.00'), ('XXS US Women\'s', 'Material 3', '$42.00'), ('One size (plus) US Women\'s', 'Material 1', '$42.00'), ('One size (plus) US Women\'s', 'Material 2', '$42.00'), ('One size (plus) US Women\'s', 'Material 3', '$42.00'), ('Custom size 1 US Women\'s', 'Material 1', '$42.00'), ('Custom size 1 US Women\'s', 'Material 2', '$42.00'), ('Custom size 1 US Women\'s', 'Material 3', '$42.00')] } expected_listings_03 = { 'Product #1 without variations': '$123.46', 'Product #2 with one variation with pricing': [('Beige', '$123.46'), ('Black', '$123.46'), ('Blue', '$123.46'), ('Silver', '$123.46'), ('White', '$123.46'), ('Yellow', '$123.46'), ('Custom color 1', '$123.46'), ('Custom color 2', '$123.46')], 'Product #3 with two variations with quantity on both and pricing on both': [ ('XXS US Women\'s', 'Material 1', '$123.46'), ('XXS US Women\'s', 'Material 2', '$123.46'), ('XXS US Women\'s', 'Material 3', '$123.46'), ('One size (plus) US Women\'s', 'Material 1', '$123.46'), ('One size (plus) US Women\'s', 'Material 2', '$123.46'), ('One size (plus) US Women\'s', 'Material 3', '$123.46'), ('Custom size 1 US Women\'s', 'Material 1', '$123.46'), ('Custom size 1 US Women\'s', 'Material 2', '$123.46'), ('Custom size 1 US Women\'s', 'Material 3', '$123.46'), ] } operation = 'Change To' bip = BulkPageInventoryPrice(self.driver, self.ts) actual_listings = bip.listing_details() self.check_listing_options(actual_listings, expected_listings_01) bip.select_operation(operation) input_field = bip.operation_input() send_keys(input_field, '42') actual_listings = bip.listing_details() self.check_listing_options(actual_listings, expected_listings_02) # Apply changes click(bip.operation_apply()) actual_listings = bip.listing_details() self.check_listing_options(actual_listings, expected_listings_02) assert bip.operation_apply().is_enabled( ) is False, 'Apply button is enabled' bip.select_operation(operation) input_field = bip.operation_input() send_keys(input_field, '123.456') # Apply changes click(bip.operation_apply()) actual_listings = bip.listing_details() self.check_listing_options(actual_listings, expected_listings_03) assert bip.operation_apply().is_enabled( ) is False, 'Apply button is enabled'