Пример #1
0
def test_decide_message_outputs(monkeypatch):
    def mock_compose_output_gmail_sender(creds):
        assert creds == 'sup'
        return 'test gmail sender'

    monkeypatch.setattr(shell, "compose_output_gmail_sender",
                        mock_compose_output_gmail_sender)

    options = Options(args.get_parsed_args(['--stdout-email', '--skip-send']))
    outputs = shell.decide_message_outputs(options=options, creds='sup')
    assert len(outputs) == 1, "should have a stdout sender"
    # pylint: disable=comparison-with-callable
    assert outputs[0] == shell.output_stdout_email

    options = Options(args.get_parsed_args(['--stdout-email']))
    outputs = shell.decide_message_outputs(options=options, creds='sup')
    assert len(outputs) == 2, "should have both stdout and gmail senders"
    # pylint: disable=comparison-with-callable
    assert outputs[0] == shell.output_stdout_email
    assert outputs[1] == 'test gmail sender'

    options = Options(args.get_parsed_args([]))
    outputs = shell.decide_message_outputs(options=options, creds='sup')
    assert len(outputs) == 1, "should have a gmail sender"
    assert outputs[0] == 'test gmail sender'

    options = Options(args.get_parsed_args(['--skip-send']))
    outputs = shell.decide_message_outputs(options=options, creds='sup')
    assert len(outputs) == 0, "should have zero senders"
Пример #2
0
def test_process(monkeypatch):
    mock_sheet = {'mock_sheet': {}}
    output_sheet_called = False

    def mock_input_source(options, config, creds):
        assert options.group == 'test'
        assert config is not None
        assert creds is None
        return lambda: [mock_sheet]

    def mock_output_sheet(options, config, markdown_outputs, message_outputs,
                          sheet):
        nonlocal output_sheet_called
        output_sheet_called = True
        assert options.group == 'test'
        assert config is not None
        assert markdown_outputs is not None
        assert message_outputs is not None
        assert sheet == mock_sheet

    monkeypatch.setattr(shell, "decide_input_source", mock_input_source)
    monkeypatch.setattr(shell, "output_sheet", mock_output_sheet)
    monkeypatch.setattr(shell, "needs_valid_creds", lambda _: False)
    monkeypatch.setattr(shell, "load_config", lambda _: Config())
    monkeypatch.setattr(shell, "compose_output_gmail_sender",
                        lambda _: lambda _: None)

    opts = Options(args.get_parsed_args(['--test']))
    shell.process(opts)
    assert output_sheet_called
Пример #3
0
def test_validate_creds_heuristic_for_when_not_used(monkeypatch):
    options = Options(args.get_parsed_args(['--stdin', '--skip-send']))
    config = Config()
    monkeypatch.setattr(shell, 'needs_valid_creds', lambda _: False)
    new_config, creds = shell.validate_creds(options, config)
    assert new_config is config
    assert creds is None
Пример #4
0
def test_main_no_group(main_spies, monkeypatch):
  args = args_mod.get_parsed_args(['--skip-send', '--test'])
  monkeypatch.setattr(main, 'get_parsed_args', lambda: args)
  main.main()
  assert (main_spies['get_version']) == 0
  assert (main_spies['get_sample_config']) == 0
  assert (main_spies['process']) == 1
Пример #5
0
def test_decide_input_from_stdin():
    """Given the --stdin argument, Then the input source should be stdin."""
    options = Options(args.get_parsed_args(['--stdin']))
    config = Config()
    creds = None
    # pylint: disable=comparison-with-callable
    assert shell.decide_input_source(options, config,
                                     creds) == shell.input_sheet_from_stdin
Пример #6
0
def test_name_main(monkeypatch, capsys):
  args = args_mod.get_parsed_args(['--skip-send'])
  monkeypatch.setattr(main, 'get_parsed_args', lambda: args)
  monkeypatch.setattr(main, '__name__', '__main__')
  monkeypatch.setattr(sys, 'exit', lambda _code: None)
  main.init()
  out, err = capsys.readouterr()
  assert out == 'No group provided\n'
  assert err == ''
Пример #7
0
def test_main(main_spies, monkeypatch, capsys):
  args = args_mod.get_parsed_args(['--skip-send'])
  monkeypatch.setattr(main, 'get_parsed_args', lambda: args)
  main.main()
  assert (main_spies['get_version']) == 0
  assert (main_spies['get_sample_config']) == 0
  assert (main_spies['process']) == 0
  out, err = capsys.readouterr()
  assert out == 'No group provided\n'
  assert err == ''
Пример #8
0
def test_output_no_message_handlers(output_fixture):
    config = Config(keys={'a': 1, 'b': 2})
    options = Options(
        args.get_parsed_args(['-d', '2019-10-17', '--all-keys', '--test']))
    markdown_outputs = [output_fixture.stub_markdown_output]
    message_outputs = []
    shell.output_sheet(options, config, markdown_outputs, message_outputs,
                       output_fixture.sheet)
    assert output_fixture.markdown_called
    assert not output_fixture.message_called
Пример #9
0
def test_validate_creds(monkeypatch):
    options = Options(args.get_parsed_args(['--all-keys']))
    config = Config()
    monkeypatch.setattr(config_module, 'find_config_file', lambda _: None)
    monkeypatch.setattr(Config, 'validate', lambda _: None)
    monkeypatch.setattr(Config, 'creds', 'sup')
    monkeypatch.setattr(auth, 'serialize', lambda _: 'sup')
    monkeypatch.setattr(Config, 'set_serialized_creds', lambda _self, _: _self)
    monkeypatch.setattr(Config, 'save_to_file', lambda _self, _: None)
    new_config, creds = shell.validate_creds(options, config)
    assert new_config is config
    assert creds == 'sup'
Пример #10
0
def test_args_defaults():
  options = args.get_parsed_args([])
  assert options.config_dir == os.getcwd()
  assert options.key_names is None
  assert options.date == datetime.date.today().isoformat()
  assert not options.verbose
  assert not options.sample_config
  assert not options.version
  assert not options.active
  assert not options.dryrun
  assert not options.test
  assert not options.all_keys
  assert not options.skip_send
Пример #11
0
def test_google_sheets_fetcher_called_with_ids(monkeypatch):
    monkeypatch.setattr(fetcher, "values",
                        lambda sheet_id, _: 'fetched_' + sheet_id)
    monkeypatch.setattr(api, "sheets", lambda creds: None)

    config = Config(keys={'a': '1', 'b': '2'})
    options = Options(args.get_parsed_args(['--all-keys']))
    sheets_fetcher = shell.compose_input_google_sheets(options=options,
                                                       config=config,
                                                       creds='sup')
    sheets = sheets_fetcher()

    assert set(sheets) == {'fetched_1', 'fetched_2'}
Пример #12
0
def test_args_defaults():
  options = args.get_parsed_args([])
  assert options.config_dir == os.getcwd()
  assert options.key_names is None
  assert options.date == datetime.date.today().isoformat()
  assert not options.verbose
  assert not options.sample_config
  assert not options.version
  assert not options.active
  assert not options.dryrun
  assert not options.test
  assert not options.all_keys
  assert not options.skip_send
  assert not options.save_sheet_to
  assert not options.stdout_markdown
  assert not options.stdout_email
Пример #13
0
def test_decide_input_from_google(monkeypatch):
    """Given --stdin is not set, Then the input source should be Google Sheets."""
    def mock_sheets_fetcher():
        """fake Google Sheets fetcher"""

    def mock_input_google_sheets(options, config, creds):
        """internal function that generates a google sheets fetcher"""
        assert not options.stdin
        assert config is not None
        assert creds == 'uh... sure'
        return mock_sheets_fetcher

    monkeypatch.setattr(shell, "compose_input_google_sheets",
                        mock_input_google_sheets)

    opts = Options(args.get_parsed_args([]))
    cfg = Config()
    # pylint: disable=comparison-with-callable
    assert shell.decide_input_source(opts, cfg,
                                     'uh... sure') == mock_sheets_fetcher
    mock_sheets_fetcher()  # 100% coverage
Пример #14
0
def test_key_names_collects_values():
  assert args.get_parsed_args(['--key-names', 'a']).key_names == ['a']
  assert args.get_parsed_args(['-k', 'a']).key_names == ['a']
  assert args.get_parsed_args(
      ['--key-names', 'a', 'b']).key_names == ['a', 'b']
  assert args.get_parsed_args(['-k', 'a', 'b']).key_names == ['a', 'b']
Пример #15
0
def test_gets_selected_sheet_ids():
    options = Options(args.get_parsed_args(['-k', 'a', 'b']))
    config = Config(keys={'a': '1', 'b': '2', 'c': '3'})
    assert shell.google_sheet_ids(options, config) == {'1', '2'}
Пример #16
0
def test_gets_all_sheet_ids():
    options = Options(args.get_parsed_args(['--all-keys']))
    config = Config(keys={'a': 1, 'b': 2})
    assert shell.google_sheet_ids(options, config) == {1, 2}
Пример #17
0
def test_verbose_stores_true_if_passed():
  assert args.get_parsed_args(['--verbose']).verbose
  assert args.get_parsed_args(['-v']).verbose
Пример #18
0
def test_key_names_collects_values():
  assert args.get_parsed_args(['--key-names', 'a']).key_names == ['a']
  assert args.get_parsed_args(['-k', 'a']).key_names == ['a']
  assert args.get_parsed_args(['--key-names', 'a', 'b']).key_names == ['a', 'b']
  assert args.get_parsed_args(['-k', 'a', 'b']).key_names == ['a', 'b']
Пример #19
0
def test_version_stores_true_if_passed():
  assert args.get_parsed_args(['--version']).version
  assert args.get_parsed_args(['-V']).version
Пример #20
0
def test_args_returns_default_namespace():
  assert isinstance(args.get_parsed_args([]), argparse.Namespace)
Пример #21
0
def test_decide_markdown_outputs():
    options = Options(args.get_parsed_args(['--stdout-markdown']))
    subject = shell.decide_markdown_outputs(options)
    assert subject == [shell.output_stdout_markdown]
Пример #22
0
def test_each_group_can_be_set():
  assert args.get_parsed_args(['--active']).active
  assert args.get_parsed_args(['--dryrun']).dryrun
  assert args.get_parsed_args(['--test']).test
Пример #23
0
def test_each_group_can_be_set():
  assert args.get_parsed_args(['--active']).active
  assert args.get_parsed_args(['--dryrun']).dryrun
  assert args.get_parsed_args(['--test']).test
Пример #24
0
def test_date_returns_date_if_passed():
  assert args.get_parsed_args(['--date', '2018-04-04']).date == '2018-04-04'
Пример #25
0
def test_version_stores_true_if_passed():
  assert args.get_parsed_args(['--version']).version
  assert args.get_parsed_args(['-V']).version
Пример #26
0
def test_verbose_stores_true_if_passed():
  assert args.get_parsed_args(['--verbose']).verbose
  assert args.get_parsed_args(['-v']).verbose
Пример #27
0
def test_only_one_group_can_be_set():
  with pytest.raises(SystemExit):
    args.get_parsed_args(['--active', '--dryrun'])
Пример #28
0
def test_date_returns_date_if_passed():
  assert args.get_parsed_args(['--date', '2018-04-04']).date == '2018-04-04'
Пример #29
0
def test_stdin():
  assert args.get_parsed_args(['--stdin']).stdin
Пример #30
0
def test_only_one_group_can_be_set():
  with pytest.raises(SystemExit):
    args.get_parsed_args(['--active', '--dryrun'])
Пример #31
0
def test_save_sheet_to_gets_value():
  subject = args.get_parsed_args(['--save-sheet-to', 'b.json']).save_sheet_to
  assert subject == 'b.json'
Пример #32
0
def test_args_returns_default_namespace():
  assert isinstance(args.get_parsed_args([]), argparse.Namespace)