def setUp(self): self.soup = BeautifulSoup(FAKE_CONTENT) self.bad_soup = BeautifulSoup(FAKE_CONTENT_INVALID) self.empty_soup = BeautifulSoup(EMPTY_CONTENT) self.test_date = { 'month': 12, 'day': 2, 'year': 1984 } self.card = BreezeCard(last_loaded=datetime(year=self.test_date['year'], month=self.test_date['month'], day=self.test_date['day'])) self.card_number = '1111222233334444' self.card.set_number(self.card_number)
class BreezeCardTestCase(TestCase): def setUp(self): self.soup = BeautifulSoup(FAKE_CONTENT) self.bad_soup = BeautifulSoup(FAKE_CONTENT_INVALID) self.empty_soup = BeautifulSoup(EMPTY_CONTENT) self.test_date = { 'month': 12, 'day': 2, 'year': 1984 } self.card = BreezeCard(last_loaded=datetime(year=self.test_date['year'], month=self.test_date['month'], day=self.test_date['day'])) self.card_number = '1111222233334444' self.card.set_number(self.card_number) def test_number_masked(self): self.assertEquals('************4444', self.card.number_masked) def test_next_refresh(self): mock_config = {'REFRESH_INTERVAL': timedelta(days=1)} with patch.dict(app.config, values=mock_config, clear=True): self.assertEquals(self.card.next_refresh, datetime(year=self.test_date['year'], month=self.test_date['month'], day=self.test_date['day'] + 1)) def test_can_refresh_with_limiting(self): mock_config = { 'REFRESH_INTERVAL': timedelta(days=1), 'REFRESH_LIMITING': True } with patch.dict(app.config, values=mock_config, clear=True): self.assertFalse(self.card.can_refresh) def test_can_refresh_without_limiting(self): mock_config = { 'REFRESH_INTERVAL': timedelta(days=1), 'REFRESH_LIMITING': False } # Test with date before now with patch.dict(app.config, values=mock_config, clear=True): self.assertTrue(self.card.can_refresh) # Test with date after now with patch.dict(app.config, values=mock_config, clear=True): old_val = self.card.last_loaded self.card.last_loaded = datetime(year=2999, month=1, day=1) self.assertFalse(self.card.can_refresh) self.card.last_loaded = old_val def test_set_number(self): # Check 4 characters num = '1234' self.card.set_number(num) self.assertEquals(num, self.card.number) self.assertEquals(num, self.card.last_four) # Edge case - less than four numbers num = '1' self.card.set_number(num) self.assertEquals(num, self.card.number) self.assertEquals(num, self.card.last_four) # With more than four numbers num = '11112222' self.card.set_number(num) self.assertEquals(num, self.card.number) self.assertEquals('2222', self.card.last_four) # With many non-numeric num = 'abc1X2X3xyz' self.card.set_number(num) self.assertEquals('123', self.card.number) self.assertEquals('123', self.card.last_four) # No Numbers num = 'foo_bar_baz' self.card.set_number(num) self.assertEquals('', self.card.number) self.assertEquals('', self.card.last_four) @silence_is_golden def test_parse_expiration_date(self, *args): self.assertEquals(self.card._parse_expiration_date(self.soup), datetime(year=1984, month=12, day=2)) self.assertIsNone(self.card._parse_expiration_date(self.bad_soup)) self.assertIsNone(self.card._parse_expiration_date(self.empty_soup)) @silence_is_golden def test_parse_stored_value(self, *args): self.assertEquals(self.card._parse_stored_value(self.soup), '100.00') self.assertIsNone(self.card._parse_stored_value(self.bad_soup)) self.assertIsNone(self.card._parse_stored_value(self.empty_soup)) @silence_is_golden def test_parse_products(self, *args): prod_soup = BeautifulSoup(PRODUCT_CONTENT) products = self.card._parse_products(prod_soup) expect_date = datetime(year=1984, month=12, day=2) self.assertEquals(5, len(products)) self.assertEquals(products[0], {'name': 'Foo', 'remaining_rides': 100, 'expiration_date': expect_date}) self.assertEquals(products[1], {'name': '', 'remaining_rides': None, 'expiration_date': None}) self.assertEquals(products[2], {'name': 'Bar', 'remaining_rides': 100, 'expiration_date': None}) self.assertEquals(products[3], {'name': 'Baz', 'remaining_rides': None, 'expiration_date': expect_date}) self.assertEquals(products[4], {'name': 'Xyz', 'remaining_rides': None, 'expiration_date': None}) empty_products = self.card._parse_products(self.empty_soup) self.assertEquals(0, len(empty_products)) @silence_is_golden def test_parse_pending_transactions(self, *args): trans_soup = BeautifulSoup(AUTOLOAD_CONTENT) autoloads = self.card._parse_pending_transactions(trans_soup) self.assertEquals(3, len(autoloads)) self.assertEquals(autoloads[0], {'name': 'Foo', 'value': 100}) self.assertEquals(autoloads[1], {'name': '', 'value': 0.0}) self.assertEquals(autoloads[2], {'name': 'Xyz', 'value': 0.0}) empty_autoloads = self.card._parse_pending_transactions(self.empty_soup) self.assertEquals(0, len(empty_autoloads))