def test_create_sale(self): sale_items = [SaleItem(1, 1, 110500.99), SaleItem(4, 1, 65198.90)] sale = Sale(1, sale_items, 'John H. Patterson') self.assertEqual(1, sale.sale_id) self.assertEqual(sale_items, sale.items) self.assertEqual('John H. Patterson', sale.salesman_name)
def test_analyze_data(self): salesmen = [ Salesman('12312312312', 'John H. Patterson', 192000.00), Salesman('45645645645', 'David Ogilvy', 167500.00), ] customers = [ Customer('12312312312312', 'Dale Carnegie', 'Farming'), Customer('45645645645645', 'Joe Girard', 'Automotive Retail'), ] sales = [ Sale(1, [SaleItem(1, 1, 110500.99)], 'John H. Patterson'), Sale(2, [SaleItem(2, 25, 230.45)], 'David Ogilvy'), Sale(4, [SaleItem(4, 1, 65198.90)], 'John H. Patterson'), Sale(5, [SaleItem(5, 5, 470.10)], 'David Ogilvy'), ] data_summary: DataSummary = analyze_data({ 'salesmen': salesmen, 'customers': customers, 'sales': sales, }) expected_data_summary: DataSummary = { 'customers_amount': 2, 'salesmen_amount': 2, 'most_expensive_sale_id': 1, 'worst_salesman_name': 'David Ogilvy', } self.assertDictEqual(expected_data_summary, data_summary)
def test_get_most_expensive_sale(self): sale = get_most_expensive_sale([ Sale(1, [SaleItem(1, 1, 110500.99)], 'John H. Patterson'), Sale(2, [SaleItem(2, 25, 230.45)], 'David Ogilvy'), ]) self.assertEqual(1, sale.sale_id) self.assertEqual(1, sale.items[0].item_id) self.assertEqual(1, sale.items[0].quantity) self.assertEqual(110500.99, sale.items[0].price) self.assertEqual('John H. Patterson', sale.salesman_name)
def parse_sale_item(item: str) -> SaleItem: """Parses a string containing raw sale item data and returns a SaleItem object. Raises WrongNumberOfFieldsError if the string contains a number of fields different than expected for the SaleItem object. Validated fields: item_id: raises InvalidItemIdPatternError quantity: raises InvalidQuantityPatternError price: raises InvalidPricePatternError """ try: item_id, quantity, price = item.split(ITEM_FIELD_SEPARATOR) except ValueError: raise WrongNumberOfFieldsError(f'"{item}" (expected ' f'"<item_id>-<quantity>-<price>")') if re.fullmatch(ITEM_ID_PATTERN, item_id) is None: raise InvalidItemIdPatternError(f'"{item_id}" (expected int)') if re.fullmatch(QUANTITY_PATTERN, quantity) is None: raise InvalidQuantityPatternError(f'"{quantity}" (expected int)') if re.fullmatch(PRICE_PATTERN, price) is None: raise InvalidPricePatternError(f'"{price}" (expected float)') return SaleItem(int(item_id), int(quantity), float(price))
def test_get_worst_salesman(self): salesman = get_worst_salesman([ Salesman('12312312312', 'John H. Patterson', 192000.00), Salesman('45645645645', 'David Ogilvy', 167500.00), ], [ Sale(1, [SaleItem(1, 1, 110500.99)], 'John H. Patterson'), Sale(2, [SaleItem(2, 25, 230.45)], 'David Ogilvy'), ], ) self.assertEqual(Salesman('45645645645', 'David Ogilvy', 167500.00), salesman)
def test_parse_data(self): data = parse_data([ '001ç12312312312çJohn H. Pattersonç192000.00', '002ç12312312312312çDale CarnegieçFarming', '003ç001ç[01-1-110500.99]çJohn H. Patterson', ]) self.assertEqual( { 'salesmen': [ Salesman('12312312312', 'John H. Patterson', 192000.00), ], 'customers': [ Customer('12312312312312', 'Dale Carnegie', 'Farming'), ], 'sales': [ Sale(1, [SaleItem(1, 1, 110500.99)], 'John H. Patterson'), ], }, data)
def test_create_sale_item(self): sale_item = SaleItem(1, 1, 110500.99) self.assertEqual(1, sale_item.item_id) self.assertEqual(1, sale_item.quantity) self.assertEqual(110500.99, sale_item.price)
def test_parse_sale_items_list(self): sale_items = parse_sale_items_list('[04-1-65198.90,07-2-7200.00]') self.assertEqual([SaleItem(4, 1, 65198.90), SaleItem(7, 2, 7200.00)], sale_items)
def test_parse_sale(self): sale = parse_sale('003ç001ç[01-1-110500.99]çJohn H. Patterson') self.assertEqual( Sale(1, [SaleItem(1, 1, 110500.99)], 'John H. Patterson'), sale)
def test_parse_sale_item(self): sale_item = parse_sale_item('01-1-110500.99') self.assertEqual(SaleItem(1, 1, 110500.99), sale_item)