def setup(self): from imgurup import MacImgur self.imgur = MacImgur() self._enter_token_msg = self.imgur._enter_token_msg self._auth_url = self.imgur._auth_url self._auth_msg = self.imgur._auth_msg self._no_album_msg = self.imgur._no_album_msg self._albums = [ { 'id': '1', 'title': 'hello', 'privacy': 'public' }, { 'id': '2', 'title': 'hello2', 'privacy': 'private' } ] self._image_link = 'http://i.imgur.com/xxxxxxx.jpg' self._delete_hash = 'xxxxxxxxxxxxxxx'
class TestMacImgur: def setup(self): from imgurup import MacImgur self.imgur = MacImgur() self._enter_token_msg = self.imgur._enter_token_msg self._auth_url = self.imgur._auth_url self._auth_msg = self.imgur._auth_msg self._no_album_msg = self.imgur._no_album_msg self._albums = [ { 'id': '1', 'title': 'hello', 'privacy': 'public' }, { 'id': '2', 'title': 'hello2', 'privacy': 'private' } ] self._image_link = 'http://i.imgur.com/xxxxxxx.jpg' self._delete_hash = 'xxxxxxxxxxxxxxx' def test_get_error_dialog_args(self): result = self.imgur.get_error_dialog_args() args = [ 'osascript', '-e', ( 'tell app "Finder" to display alert ' '"Error" as warning' ), ] assert result == args def test_get_auth_msg_dialog_args(self): result = self.imgur.get_auth_msg_dialog_args(self._auth_msg, self._auth_url) args = [ 'osascript', '-e', ( 'tell app "SystemUIServer" to display dialog ' '"This is the first time you use this program, ' 'you have to visit this URL in your browser ' 'and copy the PIN code: \n" ' 'default answer ' '"https://api.imgur.com/oauth2/authorize?' 'client_id=55080e3fd8d0644&response_type=pin&state=carlcarl" ' 'with icon 1' ), ] assert result == args def test_get_enter_pin_dialog_args(self): result = self.imgur.get_enter_pin_dialog_args(self._enter_token_msg) args = [ 'osascript', '-e', ( 'tell app "SystemUIServer" to display dialog ' '"Enter PIN code displayed in the browser: " ' 'default answer "" with icon 1' ), '-e', 'text returned of result', ] assert result == args def test_get_ask_image_path_dialog_args(self): result = self.imgur.get_ask_image_path_dialog_args() args = [ 'osascript', '-e', ( 'tell app "Finder" to POSIX path of ' '(choose file with prompt "Choose Image:")' ), ] assert result == args def test_get_ask_album_id_dialog_args(self): albums = [] no_album_msg = self._no_album_msg assert self.imgur.get_ask_album_id_dialog_args(albums, no_album_msg) is None @pytest.fixture(scope='function') def mock_subprocess(self, request): m = mock.patch('imgurup.subprocess') ret = m.start() request.addfinalizer(m.stop) return ret def test_ask_album_id(self, mock_subprocess): mock_subprocess.Popen.return_value.communicate = lambda: ['1 Public(public)'] assert self.imgur.ask_album_id(self._albums) == '1' mock_subprocess.Popen.return_value.communicate = lambda: ['1Public(public)'] with pytest.raises(SystemExit): self.imgur.ask_album_id(self._albums) mock_subprocess.Popen.return_value.communicate = lambda: [' Public(public)'] with pytest.raises(SystemExit): self.imgur.ask_album_id(self._albums) def test_get_show_link_dialog_args(self): links = ( 'http://imgur.com/aaaaa\n' 'Delete link: http://imgur.com/delete/bbbbb' ) assert self.imgur.get_show_link_dialog_args(links) is None def test_show_link(self, mock_subprocess): show_link_args = [ 'osascript', '-e', ( 'tell app "Finder" to display dialog "Image Link" ' 'default answer "{link}" ' 'buttons {{"Show delete link", "OK"}} ' 'default button 2'.format(link=self._image_link) ), ] delete_link = 'http://imgur.com/delete/{delete}'.format(delete=self._delete_hash) delete_link_args = [ 'osascript', '-e', ( 'tell app "Finder" to display dialog "Delete link" ' 'default answer "{link}"'.format(link=delete_link) ), ] def _test_show_link(args, stdout, stderr): from mock import MagicMock m = MagicMock() if args == show_link_args: m.communicate = lambda: [ ( 'button returned:Show delete link, ' 'text returned:http://i.imgur.com/xxxxxxx.jpg' ) ] elif args == delete_link_args: m.communicate = lambda: [''] return m mock_subprocess.Popen.side_effect = _test_show_link self.imgur.show_link(self._image_link, self._delete_hash) mock_subprocess.Popen.assert_has_calls( [ call( show_link_args, stdout=mock_subprocess.PIPE, stderr=mock_subprocess.PIPE ), call( delete_link_args, stdout=mock_subprocess.PIPE, stderr=mock_subprocess.PIPE ) ] ) @pytest.fixture(scope='function') def mock_copy2(self, request): m = mock.patch('imgurup.shutil.copy2') ret = m.start() request.addfinalizer(m.stop) return ret @pytest.fixture(scope='function') def mock_argparse(self, request): m = mock.patch('imgurup.argparse') ret = m.start() request.addfinalizer(m.stop) return ret def test_main(self, mock_argparse, mock_copy2): from argparse import Namespace n = Namespace() n.s = True mock_argparse.ArgumentParser.return_value.parse_args = lambda: n from imgurup import main main()