def test_init_string(self): phone = PhoneData(brand="test", model="Megatron", price="500000 VND", vendor="unitTest") self.assertEqual(phone.getPrice(), 500000) self.assertEqual(phone.getName(), "test Megatron") phone2 = PhoneData(brand="test", model="Megatron XL", price="1000000 VND", vendor="unitTest", info={"url": "https:/testURL.com"}) self.assertEqual(phone2.getPrice(), 1000000) self.assertEqual(phone2.getName(), "test Megatron XL") self.assertEqual(phone2.getInfo()["url"], "https:/testURL.com") phone3 = PhoneData(brand="test 1", model="Decepticon", price="$SGD 300000", vendor="unitTest", info={"url": "https:/testURL.com"}) self.assertEqual(phone3.getPrice(), 300000) self.assertEqual(phone3.getName(), "test 1 Decepticon") self.assertEqual(phone3.getInfo()["currency"], "SGD") with self.assertRaises(PhoneDataInvalidException): phone4 = PhoneData(brand="test 1", model="Decepticon", price="$SGD abc 300000 ", vendor="unitTest", info={"url": "https:/testURL.com"})
def test_init_decimal(self): phone = PhoneData(brand="test", model="Megatron", price=500000, vendor="unitTest", info={"currency": "SGD"}) self.assertEqual(phone.getPrice(), 500000) self.assertEqual(phone.getName(), "test Megatron") phone2 = PhoneData(brand="test", model="Decepticon", price=300.123, vendor="unitTest", info={ "url": "https:/testURL.com", "currency": "VND" }) self.assertEqual(phone2.getPrice(), 300.123) self.assertEqual(phone2.getName(), "test Decepticon") self.assertEqual(phone2.getInfo()["url"], "https:/testURL.com") self.assertEqual(phone2.getInfo()["currency"], "VND") with self.assertRaises(PhoneDataInvalidException): phone3 = PhoneData(brand="test", model="Decepticon", price=-300.123, vendor="unitTest", info={ "url": "https:/testURL.com", "currency": "VND" })
class TestDatabaseFunctional(unittest.TestCase): def setUp(self) -> None: self.phone = PhoneData(brand="test", model="Megatron", price="500000 VND", vendor="unitTest") self.phone2 = PhoneData(brand="test", model="Megatron XL", price="1000000 VND", vendor="unitTest", info={"url": "https:/testURL.com"}) self.phone3 = PhoneData(brand="test 1", model="Decepticon", price="$SGD 300000", vendor="unitTest", info={"url": "https:/testURL.com"}) self.data = [self.phone, self.phone2, self.phone3] self.tableName = "test_table" self.pElements = constants.phonePrimaryElements self.sElements = constants.phoneSecondaryElements self.dynamoElements = [DynamoElement('DeviceName', 'HASH', 'S')] DatabaseEngine.createTable(self.tableName, self.pElements, self.sElements) self.db = phoneDBEngine(self.tableName) def tearDown(self) -> None: DatabaseEngine.deleteTable(self.tableName) def test_insert_update_deleteData(self): # Insert self.db.pushAllDataToDB(self.data) retriveData = self.db.getAllDataFromTable() ok = True for item in self.data: if item not in retriveData: ok = False break self.assertTrue(ok, "Push data failed") # Update self.phone.price = 12345 self.phone.info["currency"] = "Yolo Dollar" self.db.updateItemToDB(self.phone) try: result = self.db.getPhoneFromDB(brand=self.phone.getBrand(), model=self.phone.getModel(), vendor=self.phone.getVendor()) self.assertEqual(result.getPrice(), self.phone.getPrice()) self.assertEqual(result.getInfo().get("currency"), self.phone.getInfo().get("currency")) except ClientError as e: self.fail("update Data failed") # Delete self.db.deleteItemFromDB(self.phone) temp = self.db.getPhoneFromDB(brand=self.phone.getBrand(), model=self.phone.getModel(), vendor=self.phone.getVendor()) self.assertIsNone(temp)
def convertPhoneToDBData(phone: PhoneData): return { 'BRAND': phone.getBrand(), 'MODEL': phone.getDBModel(), 'TYPE': 'Mobile', 'PRICE': phone.getPrice(), 'VENDOR': phone.getVendor(), 'INFO': phone.getInfo() }
def updateItemToDB(self, item: PhoneData): try: response = self.table.update_item( Key={ 'BRAND': item.getBrand(), 'MODEL': item.getDBModel() }, UpdateExpression="set INFO = :i, PRICE = :p", ExpressionAttributeValues={ ':p': item.getPrice(), ':i': item.getInfo() }, ReturnValues="UPDATED_NEW" ) except ClientError as e: print(e.response['Error']['Message']) else: print("UpdateItem succeeded:")