def test_invalidateReleaseDate(self): # Given sut = Product() givenDatetime = dtt.datetime(2028, 2, 27, 13, 5, 55) sut.setReleaseDate(givenDatetime, timezone="Africa/Bissau") # See also: pytz.all_timezones # When sut.invalidateReleaseDate() # Then self.assertEqual(None, sut.releaseDateStamp)
def test_getReleaseDate_shouldRaiseOnInvalidTimezoneString(self): # Given sut = Product() givenDatetime = dtt.datetime(2022, 12, 1, 8, 32, 59) sut.setReleaseDate(givenDatetime, timezone="Indian/Kerguelen") # When (forType str) with self.assertRaises(pytz.UnknownTimeZoneError): sut.getReleaseDate(forTimezone="Invalid/Something", forType=str) # When (forType datetime) with self.assertRaises(pytz.UnknownTimeZoneError): sut.getReleaseDate(forTimezone="EvenMoreInvalid/Stuff", forType=dtt.datetime)
def test_getReleaseDate_shouldReturnReadableString(self): # Given sut = Product() givenDatetime = dtt.datetime(2023, 11, 28, 13, 30, 12) givenTimezoneString = "Europe/Berlin" # See also: pytz.all_timezones expectedString = "28.11.2023, 13:30:12" sut.setReleaseDate(givenDatetime, timezone=givenTimezoneString) # When result = sut.getReleaseDate(forTimezone=givenTimezoneString, forType=str) # Then self.assertEqual(expectedString, result)
def test_setReleaseDate_shouldSetCorrectDate(self): # Given sut = Product() berlinZone = pytz.timezone("Pacific/Fiji") # See also: pytz.all_timezones givenDatetime = dtt.datetime(2020, 4, 18, 16, 00, 00) # Leave datetime itself untouched, just add the timezone-data: berlinDatetime = berlinZone.localize(givenDatetime) # Convert to UTC time: utcDatetime: dtt.datetime = berlinDatetime.astimezone(pytz.utc) # Convert to UNIX epoch float: expectedUtcTimestamp = utcDatetime.timestamp() # 1587218400.0 # When sut.setReleaseDate(givenDatetime, timezone="Pacific/Fiji") self.assertEqual(expectedUtcTimestamp, sut.releaseDateStamp)
def test_getReleaseDate_shouldReturnDatetime(self): # Given sut = Product() givenTimezoneString = "US/Alaska" # See also: pytz.all_timezones timezone = pytz.timezone(givenTimezoneString) givenDatetime = dtt.datetime(2035, 7, 15, 9, 00, 00) # Leave datetime itself untouched, just add the timezone-data: expectedLocalDatetime = timezone.localize(givenDatetime) sut.setReleaseDate(givenDatetime, timezone=givenTimezoneString) # When result = sut.getReleaseDate(forTimezone=givenTimezoneString, forType=dtt.datetime) # Then self.assertEqual(expectedLocalDatetime, result)
def test_setReleaseDate_shouldLogOnError(self): # Given sut = Product() givenDatetime = dtt.datetime(2020, 1, 30, 15, 40, 00) invalidTimezone = "very/invalid" loggerName = "shop.product" loggerUnderTest = clog.getLogger(loggerName) expectedLogLevel = "ERROR" expectedPartOfLogMessage = "Could not set product release date" # When with self.assertLogs(loggerUnderTest, level=expectedLogLevel) as tlog: sut.setReleaseDate(givenDatetime, timezone=invalidTimezone) # Then self.assertEqual(1, len(tlog.output)) # expect one single log message in array self.assertIn(f"{expectedLogLevel}:{loggerName}:{expectedPartOfLogMessage}", tlog.output[0])
def create2Shops(self) -> None: """ Caution: Do not change values as they are tested against :return: None """ size01 = Size() size01.uid = str( uuid.UUID(hex="1528dae6-188f-4d7e-8a6c-5af44ce5c222", version=4)) size01.sizeEU = "40 1/3" size01.isInStock = True size01.price = 56.99 size01.url = "http://oneshop.com/bottles/92743867ACTFGJ-UTU/40.1.3.htm" size01.urlAddToCart = "http://oneshop.com/bottles/atc/40.1.3-92743867ACTFGJ-UTU.htm" size02 = Size() size02.uid = str( uuid.UUID(hex="5f561c62-8502-4ec1-8f46-f0adb5e8254c", version=4)) size02.sizeEU = "43" size02.isInStock = False size02.price = 54.99 size02.url = "http://oneshop.com/bottles/92743867ACTFGJ-UTU/43.htm" size02.urlAddToCart = "http://oneshop.com/bottles/atc/43-92743867ACTFGJ-UTU.htm" size03 = Size() size03.uid = str( uuid.UUID(hex="e070b0c9-769d-4c13-a208-f7207f0970db", version=4)) size03.sizeEU = "44.5" size03.isInStock = True size03.price = 189.50 size03.url = "https://megashop.com/shoes/44.5-9a734hd78.htm" size03.urlAddToCart = "https://megashop.com/shoes/atc/44.5-9a734hd78#g89.php" product01 = Product() product01.uid = str( uuid.UUID(hex="2857027b-cf25-4639-965e-0e22f9f4c755", version=4)) product01.url = "http://oneshop.com/bottles/92743867ACTFGJ-UTU" product01.name = "Biggest Corona Bottle ever" product01.setReleaseDate(dtt.datetime(2020, 9, 30, 13, 50, 59), timezone="Europe/Berlin") product01.basePrice = 55.49 product01.lastScanStamp = 1588548868.304869 # setLastScanNow() product01.sizes = [size01, size02] product02 = Product() product02.uid = str( uuid.UUID(hex="9cab557a-419a-4883-8287-f09f7244b225", version=4)) product02.url = "http://oneshop.com/bottles/1362836400447GT-UTU" product02.name = "Neck Bottle" product02.setReleaseDate(dtt.datetime(2023, 1, 30, 15, 40, 35), timezone="Europe/Berlin") product02.basePrice = 3.22 product02.lastScanStamp = 1588548911.230381 # setLastScanNow() product02.sizes = [] product03 = Product() product03.uid = str( uuid.UUID(hex="f0700293-693c-48a6-8f01-014e07151d99", version=4)) product03.url = "https://www.megashop.com/shoes/9a734hd78.html" product03.urlThumb = "https://www.megashop.com/shoes/thumb-9a734hd78.html" product03.name = "Hey Bro Male" product03.setReleaseDate(dtt.datetime(2028, 11, 1, 8, 2, 40), timezone="Europe/Berlin") product03.basePrice = 190 product03.lastScanStamp = 1588548274.102859 # setLastScanNow() product03.sizes = [size03] shop01 = Shop() # ID is usually set by the DBMS, we explicitly set it for equality checks, too: shop01.uid = str( uuid.UUID(hex="73f9cac8-ebdc-4d9b-8163-d04d09f06cd9", version=4)) shop01.name = "Bottle shop" shop01.url = "http://oneshop.com/bottles" shop01.products = [product01, product02] shop02 = Shop() # ID is usually set by the DBMS, we explicitly set it for equality checks, too: shop02.uid = str( uuid.UUID(hex="69ec8e1b-8812-4413-ad72-b74364e2fa7a", version=4)) shop02.name = "Megashop" shop02.url = "https://www.megashop.com/shoes" shop02.products = [product03] self.shops = [shop01, shop02]