Exemple #1
0
 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'
Exemple #2
0
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()