| 1773 | @pytest.mark.parametrize('enforce_required', [True, False]) |
| 1774 | @pytest.mark.parametrize('implicit_flags_mode', [None, True, 'dual', 'toggle']) |
| 1775 | def test_cli_bool_flags(monkeypatch, enforce_required, implicit_flags_mode): |
| 1776 | class FlagSettings(BaseSettings, cli_implicit_flags=implicit_flags_mode, cli_enforce_required=enforce_required): |
| 1777 | explicit_req: CliExplicitFlag[bool] |
| 1778 | explicit_opt: CliExplicitFlag[bool] = False |
| 1779 | dual_req: CliDualFlag[bool] |
| 1780 | dual_opt: CliDualFlag[bool] = False |
| 1781 | toggle_def_t: CliToggleFlag[bool] = True |
| 1782 | toggle_def_f: CliToggleFlag[bool] = False |
| 1783 | implicit_req: bool |
| 1784 | implicit_opt: bool = False |
| 1785 | |
| 1786 | expected = { |
| 1787 | 'explicit_req': True, |
| 1788 | 'explicit_opt': False, |
| 1789 | 'implicit_req': True, |
| 1790 | 'implicit_opt': False, |
| 1791 | 'dual_req': True, |
| 1792 | 'dual_opt': False, |
| 1793 | 'toggle_def_t': True, |
| 1794 | 'toggle_def_f': False, |
| 1795 | } |
| 1796 | flag_args = [ |
| 1797 | '--explicit_req', |
| 1798 | 'True', |
| 1799 | '--dual_req', |
| 1800 | ] |
| 1801 | flag_args += ['--implicit_req'] if implicit_flags_mode is not None else ['--implicit_req', 'True'] |
| 1802 | implicit_settings = CliApp.run(FlagSettings, cli_args=flag_args) |
| 1803 | assert implicit_settings.model_dump() == expected |
| 1804 | serialized_args = CliApp.serialize(implicit_settings) |
| 1805 | assert serialized_args == flag_args |
| 1806 | |
| 1807 | expected = { |
| 1808 | 'explicit_req': False, |
| 1809 | 'explicit_opt': False, |
| 1810 | 'implicit_req': False, |
| 1811 | 'implicit_opt': False, |
| 1812 | 'dual_req': False, |
| 1813 | 'dual_opt': False, |
| 1814 | 'toggle_def_t': False, |
| 1815 | 'toggle_def_f': False, |
| 1816 | } |
| 1817 | flag_args = [ |
| 1818 | '--explicit_req', |
| 1819 | 'False', |
| 1820 | '--no-dual_req', |
| 1821 | '--no-toggle_def_t', |
| 1822 | ] |
| 1823 | flag_args += ['--no-implicit_req'] if implicit_flags_mode is not None else ['--implicit_req', 'False'] |
| 1824 | implicit_settings = CliApp.run(FlagSettings, cli_args=flag_args) |
| 1825 | assert implicit_settings.model_dump() == expected |
| 1826 | serialized_args = CliApp.serialize(implicit_settings) |
| 1827 | assert serialized_args == flag_args |
| 1828 | |
| 1829 | expected = { |
| 1830 | 'explicit_req': True, |
| 1831 | 'explicit_opt': True, |
| 1832 | 'implicit_req': True, |