Example #1
0
    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"})
Example #2
0
    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)
Example #4
0
 def convertPhoneToDBData(phone: PhoneData):
     return {
         'BRAND': phone.getBrand(),
         'MODEL': phone.getDBModel(),
         'TYPE': 'Mobile',
         'PRICE': phone.getPrice(),
         'VENDOR': phone.getVendor(),
         'INFO': phone.getInfo()
     }
Example #5
0
 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:")