예제 #1
0
def test_subentry_palette_subreddits_filter():
    api = MagicMock()
    api.user_name = 'username'
    api.user_subs = ['/r/linux', '/r/gnu']
    root = subentry.SubEntry(api)
    poproot = root._palette  # err IDK about this

    entry = find_widget(root, kind=Gtk.Entry)
    entry.props.text = '/r/l'

    # When using the button, all should be visible
    down_button = find_widget(root, kind=Gtk.Button)
    down_button.emit('clicked')
    wait_for(lambda: poproot.props.visible)

    assert find_widget(poproot, label='/r/linux', many=True)
    assert find_widget(poproot, label='/r/gnu', many=True)

    # err IDK about this
    entry.is_focus = lambda: True
    entry.props.text = '/r/li'
    wait_for(lambda: poproot.props.visible)

    assert find_widget(poproot, label='/r/linux', many=True)
    assert not find_widget(poproot, label='/r/gnu', many=True)
def test_reply_palette(datadir):
    api = MagicMock()
    toplevel_cv = MagicMock()
    with open(datadir / 'posttopbar--comment.json') as f:
        data = json.load(f)

    bar = posttopbar.PostTopBar(api, data, toplevel_cv)
    bar.get_toplevel = lambda: api
    poproot = Gtk.Popover()
    with patch('gi.repository.Gtk.Popover') as Popover:
        Popover.return_value = poproot
        bar.do_event(fake_event('r'))

        wait_for(lambda: Popover.called)

    assert poproot.props.visible
    tv = find_widget(poproot, kind=Gtk.TextView)
    tv.props.buffer.set_text('hello')

    btn = find_widget(poproot, kind=Gtk.Button, label='Post Reply')
    btn.emit('clicked')
    wait_for(lambda: btn.props.sensitive is False)
    (name, text, cb), _ = api.reply.call_args
    assert name == 't1_e9nhj7n'
    assert text == 'hello'

    cb({'json': {'data': {'things': [{'data': {'id': 'MYID'}}]}}})
    assert poproot.props.visible == False
def test_subentry_palette_subreddits_filter():
    api = MagicMock()
    api.user_name = 'username'
    api.user_subs = ['/r/linux', '/r/gnu']
    root = subentry.SubEntry(api)
    poproot = root._palette  # err IDK about this

    entry = find_widget(root, kind=Gtk.Entry)
    entry.props.text = '/r/l'


    # When using the button, all should be visible
    down_button = find_widget(root, kind=Gtk.Button)
    down_button.emit('clicked')
    wait_for(lambda: poproot.props.visible)

    assert find_widget(poproot, label='/r/linux', many=True)
    assert find_widget(poproot, label='/r/gnu', many=True)

    # err IDK about this
    entry.is_focus = lambda: True
    entry.props.text = '/r/li'
    wait_for(lambda: poproot.props.visible)

    assert find_widget(poproot, label='/r/linux', many=True)
    assert not find_widget(poproot, label='/r/gnu', many=True)
def test_subreddit_submit(SubmitWindow):
        api = MagicMock()
        root = aboutrow.get_about_row(api, '/r/linux')

        find_widget(root, label='Submit', kind=Gtk.Button).emit('clicked')
        wait_for(lambda: SubmitWindow.called)
        SubmitWindow.assert_called_with(api, sub='linux')
예제 #5
0
def test_subreddit_submit(SubmitWindow):
    api = MagicMock()
    root = aboutrow.get_about_row(api, '/r/linux')

    find_widget(root, label='Submit', kind=Gtk.Button).emit('clicked')
    wait_for(lambda: SubmitWindow.called)
    SubmitWindow.assert_called_with(api, sub='linux')
def test_reply_palette(datadir):
    api = MagicMock()
    toplevel_cv = MagicMock()
    with open(datadir / 'posttopbar--comment.json') as f:
        data = json.load(f)

    bar = posttopbar.PostTopBar(api, data, toplevel_cv)
    bar.get_toplevel = lambda: api
    poproot = Gtk.Popover()
    with patch('gi.repository.Gtk.Popover') as Popover:
        Popover.return_value = poproot
        bar.do_event(fake_event('r'))

        wait_for(lambda: Popover.called)

    assert poproot.props.visible
    tv = find_widget(poproot, kind=Gtk.TextView)
    tv.props.buffer.set_text('hello')

    btn = find_widget(poproot, kind=Gtk.Button, label='Post Reply')
    btn.emit('clicked')
    wait_for(lambda: btn.props.sensitive is False)
    (name, text, cb), _ = api.reply.call_args
    assert name == 't1_e9nhj7n'
    assert text == 'hello'

    cb({'json': {'data': {'things': [{'data': {'id': 'MYID'}}]}}})
    assert poproot.props.visible == False
예제 #7
0
def test_submit_empty():
    api = MagicMock()
    window = submit.SubmitWindow(api)
    root = window.window

    submit_button = find_widget(root, label='Submit', kind=Gtk.Button)
    submit_button.emit('clicked')

    wait_for(lambda: api.submit.called)

    loading = find_widget(root, label='Submitting...', kind=Gtk.Button)
    assert loading.props.sensitive == False
def test_submit_empty():
    api = MagicMock()
    window = submit.SubmitWindow(api)
    root = window.window

    submit_button = find_widget(root, label='Submit', kind=Gtk.Button)
    submit_button.emit('clicked')

    wait_for(lambda: api.submit.called)

    loading = find_widget(root, label='Submitting...', kind=Gtk.Button)
    assert loading.props.sensitive == False
def test_user_about_row():
    api = MagicMock()
    root = aboutrow.get_about_row(api, '/u/bob')

    assert find_widget(root, label='bob')

    wait_for(lambda: api.get_user_info.called)
    (name, cb), _ = api.get_user_info.call_args
    assert name == 'bob'
    cb({'data': {'link_karma': 2, 'comment_karma': 1}})

    assert find_widget(root, label='2l / 1c')
예제 #10
0
def test_user_about_row():
    api = MagicMock()
    root = aboutrow.get_about_row(api, '/u/bob')

    assert find_widget(root, label='bob')

    wait_for(lambda: api.get_user_info.called)
    (name, cb), _ = api.get_user_info.call_args
    assert name == 'bob'
    cb({'data': {'link_karma': 2, 'comment_karma': 1}})

    assert find_widget(root, label='2l / 1c')
def test_subreddit_subscribe_button_toggle():
    api = MagicMock()
    root = aboutrow.get_about_row(api, '/r/linux')
    btn = find_widget(root, label='Subscribe', kind=Gtk.Button)
    btn.emit('clicked')

    wait_for(lambda: api.set_subscribed.called)
    (name, active, cb), _ = api.set_subscribed.call_args
    assert name == 'linux'
    assert active == True
    
    cb(None)
    assert btn == find_widget(root, label='Subscribed', kind=Gtk.Button)
예제 #12
0
def test_subreddit_subscribe_button_toggle():
    api = MagicMock()
    root = aboutrow.get_about_row(api, '/r/linux')
    btn = find_widget(root, label='Subscribe', kind=Gtk.Button)
    btn.emit('clicked')

    wait_for(lambda: api.set_subscribed.called)
    (name, active, cb), _ = api.set_subscribed.call_args
    assert name == 'linux'
    assert active == True

    cb(None)
    assert btn == find_widget(root, label='Subscribed', kind=Gtk.Button)
def test_subentry_palette_activate():
    api = MagicMock()
    api.user_name = 'username'
    root = subentry.SubEntry(api)
    root.activate = MagicMock()

    down_button = find_widget(root, kind=Gtk.Button)
    down_button.emit('clicked')
    poproot = root._palette  # err IDK about this
    wait_for(lambda: poproot.props.visible)

    btn = find_widget(
            poproot, label='/user/username/submitted', kind=Gtk.Button)
    btn.emit('clicked')
    wait_for(lambda: root.activate.emit.called)
    assert root.activate.emit.call_args[0][0] == '/user/username/submitted'
def test_subreddit_info():
    api = MagicMock()
    root = aboutrow.get_about_row(api, '/r/linux')

    expander = find_widget(root, kind=Gtk.Expander)
    expander.activate()
    wait_for(lambda: api.get_subreddit_info.called)

    (name, cb), _ = api.get_subreddit_info.call_args
    assert name == 'linux'
    cb({'data': {'description': 'hello'}})

    assert find_widget(root, label='hello').props.visible == True

    expander.activate()
    expander.activate()
    assert api.get_subreddit_info.call_count == 1
예제 #15
0
def test_subreddit_info():
    api = MagicMock()
    root = aboutrow.get_about_row(api, '/r/linux')

    expander = find_widget(root, kind=Gtk.Expander)
    expander.activate()
    wait_for(lambda: api.get_subreddit_info.called)

    (name, cb), _ = api.get_subreddit_info.call_args
    assert name == 'linux'
    cb({'data': {'description': 'hello'}})

    assert find_widget(root, label='hello').props.visible == True

    expander.activate()
    expander.activate()
    assert api.get_subreddit_info.call_count == 1
예제 #16
0
def test_subentry_palette_activate():
    api = MagicMock()
    api.user_name = 'username'
    root = subentry.SubEntry(api)
    root.activate = MagicMock()

    down_button = find_widget(root, kind=Gtk.Button)
    down_button.emit('clicked')
    poproot = root._palette  # err IDK about this
    wait_for(lambda: poproot.props.visible)

    btn = find_widget(poproot,
                      label='/user/username/submitted',
                      kind=Gtk.Button)
    btn.emit('clicked')
    wait_for(lambda: root.activate.emit.called)
    assert root.activate.emit.call_args[0][0] == '/user/username/submitted'
예제 #17
0
def test_submit_good(datadir):
    api = MagicMock()
    window = submit.SubmitWindow(api)
    window.done = MagicMock()
    root = window.window

    submit_button = find_widget(root, label='Submit', kind=Gtk.Button)
    submit_button.emit('clicked')
    wait_for(lambda: api.submit.called)
    (data, callback), _ = api.submit.call_args

    with open(datadir / 'submit--good-response.json') as f:
        callback(json.load(f))

    assert window.done.emit.called
    (sub, uri), _ = window.done.emit.call_args
    assert uri == 'https://www.reddit.com/r/test/comments/9teb69/test/'
def test_submit_good(datadir):
    api = MagicMock()
    window = submit.SubmitWindow(api)
    window.done = MagicMock()
    root = window.window

    submit_button = find_widget(root, label='Submit', kind=Gtk.Button)
    submit_button.emit('clicked')
    wait_for(lambda: api.submit.called)
    (data, callback), _ = api.submit.call_args

    with open(datadir / 'submit--good-response.json') as f:
        callback(json.load(f))

    assert window.done.emit.called
    (sub, uri), _ = window.done.emit.call_args
    assert uri == 'https://www.reddit.com/r/test/comments/9teb69/test/'
def test_submit_error(datadir):
    api = MagicMock()
    window = submit.SubmitWindow(api)
    root = window.window

    submit_button = find_widget(root, label='Submit', kind=Gtk.Button)
    submit_button.emit('clicked')
    wait_for(lambda: api.submit.called)
    (data, callback), _ = api.submit.call_args

    with open(datadir / 'submit--ratelimit-response.json') as f:
        data = json.load(f)
        msg = data['json']['errors'][0][1]
        callback(data)

    assert submit_button.props.sensitive
    label = find_widget(root, label=msg)
    assert label.props.visible
def test_submit_link():
    api = MagicMock()
    window = submit.SubmitWindow(api)
    root = window.window

    find_widget(root, placeholder='Title').props.text = 'Some Title'
    find_widget(root, placeholder='Link').props.text = 'example.com'
    find_widget(root, placeholder='Subreddit').props.text = 'test'
    find_widget(root, label='Submit', kind=Gtk.Button).emit('clicked')

    wait_for(lambda: api.submit.called)
    (data, cb), _ = api.submit.call_args
    assert data == {
        'kind': 'link',
        'sr': 'test',
        'title': 'Some Title',
        'url': 'example.com',
    }
예제 #21
0
def test_submit_error(datadir):
    api = MagicMock()
    window = submit.SubmitWindow(api)
    root = window.window

    submit_button = find_widget(root, label='Submit', kind=Gtk.Button)
    submit_button.emit('clicked')
    wait_for(lambda: api.submit.called)
    (data, callback), _ = api.submit.call_args

    with open(datadir / 'submit--ratelimit-response.json') as f:
        data = json.load(f)
        msg = data['json']['errors'][0][1]
        callback(data)

    assert submit_button.props.sensitive
    label = find_widget(root, label=msg)
    assert label.props.visible
예제 #22
0
def test_submit_link():
    api = MagicMock()
    window = submit.SubmitWindow(api)
    root = window.window

    find_widget(root, placeholder='Title').props.text = 'Some Title'
    find_widget(root, placeholder='Link').props.text = 'example.com'
    find_widget(root, placeholder='Subreddit').props.text = 'test'
    find_widget(root, label='Submit', kind=Gtk.Button).emit('clicked')

    wait_for(lambda: api.submit.called)
    (data, cb), _ = api.submit.call_args
    assert data == {
        'kind': 'link',
        'sr': 'test',
        'title': 'Some Title',
        'url': 'example.com',
    }
예제 #23
0
def test_subentry_palette_subreddits():
    api = MagicMock()
    api.user_name = 'username'
    api.user_subs = ['/r/linux']
    root = subentry.SubEntry(api)

    down_button = find_widget(root, kind=Gtk.Button)
    down_button.emit('clicked')
    poproot = root._palette  # err IDK about this
    wait_for(lambda: poproot.props.visible)

    assert find_widget(poproot, label='/r/linux', many=True)
    assert not find_widget(poproot, label='/r/gnu', many=True)

    api.user_subs = ['/r/gnu']
    (cb, ), _ = api.subs_changed.connect.call_args
    cb(api)
    assert not find_widget(poproot, label='/r/linux', many=True)
    assert find_widget(poproot, label='/r/gnu', many=True)
def test_subentry_palette_subreddits():
    api = MagicMock()
    api.user_name = 'username'
    api.user_subs = ['/r/linux']
    root = subentry.SubEntry(api)

    down_button = find_widget(root, kind=Gtk.Button)
    down_button.emit('clicked')
    poproot = root._palette  # err IDK about this
    wait_for(lambda: poproot.props.visible)

    assert find_widget(poproot, label='/r/linux', many=True)
    assert not find_widget(poproot, label='/r/gnu', many=True)

    api.user_subs = ['/r/gnu']
    (cb,), _ = api.subs_changed.connect.call_args
    cb(api)
    assert not find_widget(poproot, label='/r/linux', many=True)
    assert find_widget(poproot, label='/r/gnu', many=True)
def test_subentry_open_uri():
    api = MagicMock()
    api.user_name = 'username'
    root = subentry.SubEntry(api)
    toplevel = MagicMock()

    entry = find_widget(root, kind=Gtk.Entry)
    # err IDK about this
    entry.is_focus = lambda: True
    entry.props.text = 'https://reddit.com/r/yes'

    poproot = root._palette  # err IDK about this
    poproot.get_toplevel = lambda: toplevel
    wait_for(lambda: poproot.props.visible)

    btn = find_widget(poproot, label='Open this reddit.com URI',
                      kind=Gtk.Button)
    btn.emit('clicked')
    wait_for(lambda: toplevel.goto_reddit_uri.called)
    toplevel.goto_reddit_uri.assert_called_once_with(
        'https://reddit.com/r/yes')
예제 #26
0
def test_subentry_open_uri():
    api = MagicMock()
    api.user_name = 'username'
    root = subentry.SubEntry(api)
    toplevel = MagicMock()

    entry = find_widget(root, kind=Gtk.Entry)
    # err IDK about this
    entry.is_focus = lambda: True
    entry.props.text = 'https://reddit.com/r/yes'

    poproot = root._palette  # err IDK about this
    poproot.get_toplevel = lambda: toplevel
    wait_for(lambda: poproot.props.visible)

    btn = find_widget(poproot,
                      label='Open this reddit.com URI',
                      kind=Gtk.Button)
    btn.emit('clicked')
    wait_for(lambda: toplevel.goto_reddit_uri.called)
    toplevel.goto_reddit_uri.assert_called_once_with(
        'https://reddit.com/r/yes')
def test_submit_self():
    api = MagicMock()
    window = submit.SubmitWindow(api)
    root = window.window

    self_post = find_widget(root, kind=Gtk.Button, label='Self Post')
    self_post.props.active = True
    stack = find_widget(root, kind=Gtk.Stack)
    wait_for(lambda: stack.props.visible_child_name == 'self')

    find_widget(root, placeholder='Title').props.text = 'Some Title'
    find_widget(root, kind=Gtk.TextView).props.buffer.set_text('self')
    find_widget(root, placeholder='Subreddit').props.text = 'test'
    find_widget(root, label='Submit', kind=Gtk.Button).emit('clicked')

    wait_for(lambda: api.submit.called)
    (data, cb), _ = api.submit.call_args
    assert data == {
        'kind': 'self',
        'sr': 'test',
        'title': 'Some Title',
        'text': 'self',
    }
예제 #28
0
def test_submit_self():
    api = MagicMock()
    window = submit.SubmitWindow(api)
    root = window.window

    self_post = find_widget(root, kind=Gtk.Button, label='Self Post')
    self_post.props.active = True
    stack = find_widget(root, kind=Gtk.Stack)
    wait_for(lambda: stack.props.visible_child_name == 'self')

    find_widget(root, placeholder='Title').props.text = 'Some Title'
    find_widget(root, kind=Gtk.TextView).props.buffer.set_text('self')
    find_widget(root, placeholder='Subreddit').props.text = 'test'
    find_widget(root, label='Submit', kind=Gtk.Button).emit('clicked')

    wait_for(lambda: api.submit.called)
    (data, cb), _ = api.submit.call_args
    assert data == {
        'kind': 'self',
        'sr': 'test',
        'title': 'Some Title',
        'text': 'self',
    }
예제 #29
0
def test_popover_selects_row():
    ic = MagicMock()
    ic.all_tokens = [(1, MagicMock(user_name='user name 1')),
                     (2, MagicMock(user_name='user name 2'))]
    ic.active_token = ic.all_tokens[0][1]

    popover = identitybutton._IdentityPopover(ic)

    def get_row(text: str):
        label = find_widget(popover, label=text)
        while not isinstance(label, Gtk.ListBoxRow):
            assert label
            label = label.get_parent()
        return label

    row1 = get_row('user name 1')
    row2 = get_row('user name 2')
    listbox = find_widget(popover, kind=Gtk.ListBox)

    assert listbox.get_selected_rows() == [row1]
    listbox.emit('row-selected', row2)
    wait_for(lambda: ic.switch_account.called)
    assert ic.switch_account.call_args[0][0] == 2
def test_popover_selects_row():
    ic = MagicMock()
    ic.all_tokens = [
            (1, MagicMock(user_name='user name 1')),
            (2, MagicMock(user_name='user name 2'))]
    ic.active_token = ic.all_tokens[0][1]

    popover = identitybutton._IdentityPopover(ic)

    def get_row(text: str):
        label = find_widget(popover, label=text)
        while not isinstance(label, Gtk.ListBoxRow):
            assert label
            label = label.get_parent()
        return label

    row1 = get_row('user name 1')
    row2 = get_row('user name 2')
    listbox = find_widget(popover, kind=Gtk.ListBox)

    assert listbox.get_selected_rows() == [row1]
    listbox.emit('row-selected', row2)
    wait_for(lambda: ic.switch_account.called)
    assert ic.switch_account.call_args[0][0] == 2
def test_emptyview_with_action():
    root = emptyview.EmptyView('yo', action='do')
    root.action = MagicMock()
    find_widget(root, label='do', kind=Gtk.Button).emit('clicked')
    wait_for(lambda: root.action.emit.called)