def test_propper_config_has_values(self): config = Config() with NamedTemporaryFile() as configfile: configfile.write( "\n".join( ( "[watchlist]", "github-login = foo", "github-oauth-token = bar", "watchlist =", " watching: foo/*", " watching: bar/bar", " not-watching: bar/*", ) ) ) configfile.file.flush() config.load(configfile.name) self.assertEquals("foo", config.github_login, "Wrong github login") self.assertEquals("bar", config.github_oauth_token, "Wrong github token") self.assertEquals( [("watching", "foo/*"), ("watching", "bar/bar"), ("not-watching", "bar/*")], config.watchlist, "Unexpected watchlist in config", )
def test_empty_lines_and_comments_in_watchlist(self): config = Config() with NamedTemporaryFile() as configfile: configfile.write( "\n".join( ( "[watchlist]", "github-login = foo", "github-oauth-token = bar", "watchlist =", " watching: foo/*", "", " watching: bar/*", "# comment", " watching: baz/*", "", ) ) ) configfile.file.flush() config.load(configfile.name) self.assertEquals( [("watching", "foo/*"), ("watching", "bar/*"), ("watching", "baz/*")], config.watchlist, "Unexpected watchlist in config", )
def update_command(): parser = argparse.ArgumentParser(description='Setup github watchlist.') add_config_argument_to_argparser(parser) add_log_argument_to_argparse(parser) parser.add_argument( '-C', '--confirmed', action='store_true', dest='confirmed', help='Update the subscriptions without user confirmation.' ' This is useful when running as cronjob.') parser.add_argument( '-D', '--debug', action='store_true', dest='debug', help='Start post mortem debugger on python exceptions.') parser.add_argument( '-v', '--verbose', action='store_true', dest='verbose', help='Print more verbose informations about whats happening.') args = parser.parse_args() if args.debug: sys.excepthook = post_mortem_debugging_hook if args.verbose: os.environ['VERBOSE'] = '1' setup_logging(args) config = Config() config.load(args.configfile) UpdateCommand(config)(confirmed=args.confirmed)
def test_empty_lines_and_comments_in_watchlist(self): config = Config() with NamedTemporaryFile() as configfile: configfile.write('\n'.join( ('[watchlist]', 'github-login = foo', 'github-oauth-token = bar', 'watchlist =', ' watching: foo/*', '', ' watching: bar/*', '# comment', ' watching: baz/*', ''))) configfile.file.flush() config.load(configfile.name) self.assertEquals([('watching', 'foo/*'), ('watching', 'bar/*'), ('watching', 'baz/*')], config.watchlist, 'Unexpected watchlist in config')
def test_no_configuration_error_when_watchlist_empty(self): with NamedTemporaryFile() as configfile: configfile.write('\n'.join( ('[watchlist]', 'github-login = foo', 'github-oauth-token = bar', 'watchlist =', ''))) configfile.file.flush() Config().load(configfile.name)
def update_command(): parser = argparse.ArgumentParser(description='Setup github watchlist.') add_config_argument_to_argparser(parser) add_log_argument_to_argparse(parser) parser.add_argument( '-C', '--confirmed', action='store_true', dest='confirmed', help='Update the subscriptions without user confirmation.' ' This is useful when running as cronjob.') args = parser.parse_args() setup_logging(args) config = Config() config.load(args.configfile) UpdateCommand(config)(confirmed=args.confirmed)
def test_propper_config_has_values(self): config = Config() with NamedTemporaryFile() as configfile: configfile.write('\n'.join( ('[watchlist]', 'github-login = foo', 'github-oauth-token = bar', 'watchlist =', ' watching: foo/*', ' watching: bar/bar', ' not-watching: bar/*'))) configfile.file.flush() config.load(configfile.name) self.assertEquals('foo', config.github_login, 'Wrong github login') self.assertEquals('bar', config.github_oauth_token, 'Wrong github token') self.assertEquals([('watching', 'foo/*'), ('watching', 'bar/bar'), ('not-watching', 'bar/*')], config.watchlist, 'Unexpected watchlist in config')
def test_configuration_error_when_no_section_in_config_file(self): with NamedTemporaryFile() as configfile: # empty config file with self.assertRaises(ConfigurationError) as cm: Config().load(configfile.name) self.assertEquals( 'The config file should have exactly one section called "watchlist",' ' got: none', str(cm.exception))
def test_parsing_errors_are_reported(self): with NamedTemporaryFile() as configfile: configfile.write('\n'.join(('[watchlist', ))) configfile.file.flush() with self.assertRaises(ConfigurationError) as cm: Config().load(configfile.name) self.assertIn( 'MissingSectionHeaderError: File contains no section headers.', str(cm.exception))
def test_configuration_error_when_missing_configuration_options(self): with NamedTemporaryFile() as configfile: configfile.write('\n'.join(('[watchlist]', ''))) configfile.file.flush() with self.assertRaises(ConfigurationError) as cm: Config().load(configfile.name) self.assertEquals( 'Missing configuration options: github-login, github-oauth-token,' ' watchlist', str(cm.exception))
def test_configuration_error_when_wrong_sections_in_config_file(self): with NamedTemporaryFile() as configfile: configfile.write('\n'.join(('[foo]', '[bar]'))) configfile.file.flush() with self.assertRaises(ConfigurationError) as cm: Config().load(configfile.name) self.assertEquals( 'The config file should have exactly one section called "watchlist",' ' got: bar, foo', str(cm.exception))
def test_login_and_token_value_required(self): with NamedTemporaryFile() as configfile: configfile.write('\n'.join( ('[watchlist]', 'github-login ='******'github-oauth-token =', 'watchlist ='))) configfile.file.flush() with self.assertRaises(ConfigurationError) as cm: Config().load(configfile.name) self.assertEquals( 'Values required for the options github-login and github-oauth-token.', str(cm.exception))
def test_configuration_error_on_bad_indent_in_watchlist(self): with NamedTemporaryFile() as configfile: configfile.write('\n'.join(('[watchlist]', 'github-login = foo', 'github-oauth-token = bar', 'watchlist =', 'watching: foo/*'))) configfile.file.flush() with self.assertRaises(ConfigurationError) as cm: Config().load(configfile.name) self.assertEquals( 'Unexpected configuration options: watching.' ' Is the watchlist not properly indented?', str(cm.exception))
def test_configuration_error_when_watchlist_item_is_invalid(self): with NamedTemporaryFile() as configfile: configfile.write('\n'.join( ('[watchlist]', 'github-login = foo', 'github-oauth-token = bar', 'watchlist =', ' watching: foo/*', ' bar/bar', ' not-watching: bar/*'))) configfile.file.flush() with self.assertRaises(ConfigurationError) as cm: Config().load(configfile.name) self.assertEquals('Unexpected format of watchlist item: bar/bar', str(cm.exception))