Example #1
0
def main():
    with open('Comics.csv', 'w') as csvfile:
        fieldnames = ['Title', 'Price']
        writer = csv.DictWriter(csvfile,
                                fieldnames=fieldnames,
                                dialect='excel')
        writer.writeheader()
        request = r.get(
            "https://www.instocktrades.com/wishlists/7bffe522902943d5bbb18c9b571bf9"
        )
        clean = BeautifulSoup(request.text, "lxml")
        count = 0
        sum = 0
        for row in clean.find_all("tr", {"class": "cartlistrow"}):
            ## [1] as there are 2 <a> tags per row and the second always has the title name
            comic = row.find_all("a")[1].text
            price = row.find("span").text
            if ('$' in price):
                sum += float(price[1:])
            print(comic + " " + price)
            writer.writerow({'Title': comic, 'Price': price})
            count += 1
        print(sum)
        writer.writerow({'Title': 'Price USD', 'Price': sum})
        writer.writerow({
            'Title':
            'Price CAD',
            'Price':
            '%.2f' % (CurrencyExchange.main(sum, 'CAD', 'USD'))
        })
        writer.writerow({'Title': 'Count', 'Price': count})
class CurrencyExchangeTest(unittest.TestCase):
    def setUp(self):
        self.currencyExchange = CurrencyExchange()

    def test_canary(self):
        self.assertTrue(True)

    def test_get_currency_rate_from_0_vendor(self):
        self.assertEquals(["", 0.0], self.currencyExchange.getExchangeRate("GBP"))

    def test_adjust_rate(self):
        self.assertEquals(98, self.currencyExchange.adjustRate(100))

    def test_get_max_currency_rate_from_invalid_vendor_name(self):
        self.currencyExchange.addVendor([""])
        self.assertEquals(["", 0.0], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_currency_rate_from_1_vendor(self):
        self.currencyExchange.addVendor(["v1"])
        self.currencyExchange.getRateFromWeb = MagicMock(return_value=100.00)
        self.assertEquals(["v1", 98.00], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_2_same_vendors(self):
        self.currencyExchange.addVendor(["v1", "v1"])
        self.currencyExchange.getRateFromWeb = MagicMock()
        self.currencyExchange.getRateFromWeb.side_effect = [80.00, 90.00]
        self.assertEquals(["v1", 78.4], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_2_different_vendors(self):
        vendor = {"v1": 60.00, "v2": 100.00}
        self.currencyExchange.addVendor(["v1", "v2"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"]])
        self.assertEquals(["v2", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_if_price_of_vendor1_is_greater_than_vendor2(self):
        vendor = {"v1": 100.00, "v2": 90.00}
        self.currencyExchange.addVendor(["v1", "v2"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"]])
        self.assertEquals(["v1", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_if_rate_of_vendor1_is_equal_to_vendor2(self):
        vendor = {"v1": 100.00, "v2": 100.00}
        self.currencyExchange.addVendor(["v1", "v2"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"]])
        self.assertEquals(["v1", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_if_rate_of_vendor1_is_less_than_vendor2(self):
        vendor = {"v1": 50.00, "v2": 90.00}
        self.currencyExchange.addVendor(["v1", "v2"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"]])
        self.assertEquals(["v2", 88.2], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_3_vendors_when_vendor1_is_max(self):
        vendor = {"v1": 100.00, "v2": 80.00, "v3": 90.00}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["v1", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_3_vendors_when_vendor2_is_max(self):
        vendor = {"v1": 80.00, "v2": 100.00, "v3": 90.00}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["v2", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_3_vendors_when_vendor3_is_max(self):
        vendor = {"v1": 80.00, "v2": 90.00, "v3": 100.00}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["v3", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_3_vendors_when_vendor2_and_vendor3_are_max(self):
        vendor = {"v1": 80.00, "v2": 100.00, "v3": 100.00}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["v2", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_3_vendors_when_3_vendors_are_max(self):
        vendor = {"v1": 100.00, "v2": 100.00, "v3": 100.00}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["v1", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_1_vendor_giving_invalid_rate(self):
        vendor = {"v1": -80.00}
        self.currencyExchange.addVendor(["v1"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"]])
        self.assertEquals(["", 0.0], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_vendors_giving_invalid_rates(self):
        vendor = {"v1": -80.00, "v2": 0.0}
        self.currencyExchange.addVendor(["v1", "v2"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"]])
        self.assertEquals(["", 0.0], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_2_vendors_giving_invalid_rates_and_1_vendor_giving_valid_rate(self):
        vendor = {"v1": -80.00, "v2": 0.0, "v3": 100.0}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["v3", 98.0], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_1_vendor_giving_invalid_rates_and_2_vendors_giving_valid_rate(self):
        vendor = {"v1": -80.00, "v2": 100.0, "v3": 80.0}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["v2", 98.0], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_1_vendor_when_web_service_fails(self):
        self.currencyExchange.addVendor(["v1"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=IOError())
        self.assertEquals(["", 0.0], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_2_vendors_when_web_service_of_vendor1_fails(self):
        vendor = {"v1": IOError(), "v2": 100.00}
        self.currencyExchange.addVendor(["v1", "v2"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"]])
        self.assertEquals(["v2", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_3_vendors_when_web_service_of_vendor1_fails(self):
        vendor = {"v1": IOError(), "v2": 90.00, "v3": 100.00}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["v3", 98], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_currency_rate_from_3_vendors_when_web_service_of_all_vendors_fail(self):
        vendor = {"v1": IOError(), "v2": IOError(), "v3": IOError()}
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        self.currencyExchange.getRateFromWeb = MagicMock(side_effect=[vendor["v1"], vendor["v2"], vendor["v3"]])
        self.assertEquals(["", 0.0], self.currencyExchange.getExchangeRate("GBP"))

    def test_get_max_curency_rate_from_1_vendor_from_the_actual_web_service(self):
        self.currencyExchange.addVendor(["v1"])
        vendor = self.currencyExchange.getExchangeRate("GBP")
        self.assertTrue((vendor[0] == "" or vendor[0] in self.currencyExchange.vendorList) and vendor[1] >= 0)

    def test_get_max_curency_rate_from_2_vendors_from_the_actual_web_service(self):
        self.currencyExchange.addVendor(["v1", "v2"])
        vendor = self.currencyExchange.getExchangeRate("GBP")
        self.assertTrue((vendor[0] == "" or vendor[0] in self.currencyExchange.vendorList) and vendor[1] >= 0)

    def test_get_max_curency_rate_from_3_vendors_from_the_actual_web_service(self):
        self.currencyExchange.addVendor(["v1", "v2", "v3"])
        vendor = self.currencyExchange.getExchangeRate("GBP")
        self.assertTrue((vendor[0] == "" or vendor[0] in self.currencyExchange.vendorList) and vendor[1] >= 0)

    def test_get_rate_from_web_when_server_is_down(self):
        urllib.urlopen = MagicMock(side_effect=IOError())
        self.assertEquals(0.0, self.currencyExchange.getRateFromWeb("v1", "GBP"))
 def setUp(self):
     self.currencyExchange = CurrencyExchange()
 def adjusted_high_rate(self, vendorNames):
     currencyExchange = CurrencyExchange()
     currencyExchange.addVendor(vendorNames)
     return currencyExchange.getExchangeRate("GBP")