blob: a8b001defe3317ec6ad57d3ec0ce548199fcb143 [file]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from __future__ import annotations
from enum import Enum
import pytest
from airflow.utils.weekday import WeekDay
class TestWeekDay:
def test_weekday_enum_length(self):
assert len(WeekDay) == 7
def test_weekday_name_value(self):
weekdays = "MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY"
weekdays = weekdays.split()
for i, weekday in enumerate(weekdays, start=1):
weekday_enum = WeekDay(i)
assert weekday_enum == i
assert int(weekday_enum) == i
assert weekday_enum.name == weekday
assert weekday_enum in WeekDay
assert 0 < weekday_enum < 8
assert isinstance(weekday_enum, WeekDay)
assert isinstance(weekday_enum, int)
assert isinstance(weekday_enum, Enum)
@pytest.mark.parametrize(
"weekday, expected",
[
("Monday", 1),
(WeekDay.MONDAY, 1),
],
ids=["with-string", "with-enum"],
)
def test_convert(self, weekday, expected):
result = WeekDay.convert(weekday)
assert result == expected
def test_convert_with_incorrect_input(self):
invalid = "Sun"
error_message = rf'Invalid Week Day passed: "{invalid}"'
with pytest.raises(AttributeError, match=error_message):
WeekDay.convert(invalid)
@pytest.mark.parametrize(
"weekday, expected",
[
("Monday", {WeekDay.MONDAY}),
(WeekDay.MONDAY, {WeekDay.MONDAY}),
({"Thursday": "1"}, {WeekDay.THURSDAY}),
(["Thursday"], {WeekDay.THURSDAY}),
(["Thursday", WeekDay.MONDAY], {WeekDay.MONDAY, WeekDay.THURSDAY}),
],
ids=[
"with-string",
"with-enum",
"with-dict",
"with-list",
"with-mix",
],
)
def test_validate_week_day(self, weekday, expected):
result = WeekDay.validate_week_day(weekday)
assert expected == result
def test_validate_week_day_with_invalid_type(self):
invalid_week_day = 5
with pytest.raises(
TypeError,
match=f"Unsupported Type for week_day parameter: {type(invalid_week_day)}."
"Input should be iterable type:"
"str, set, list, dict or Weekday enum type",
):
WeekDay.validate_week_day(invalid_week_day)