def test_form_multiple(): browser, url = setup_mock_browser(expected_post=[('foo', 'tofu'), ('foo', 'tempeh')]) browser.open_fake_page(submit_form_multiple, url=url) browser.select_form('#choose-submit-form') response = browser.submit_selected() assert response.status_code == 200 and response.text == 'Success!'
def test_form_multiple(): browser, url = setup_mock_browser(expected_post=[('foo', 'tempeh'), ('foo', 'tofu')]) browser.open_fake_page(submit_form_multiple, url=url) browser.select_form('#choose-submit-form') response = browser.submit_selected() assert(response.status_code == 200 and response.text == 'Success!')
def test_form_noaction(): browser, url = setup_mock_browser() browser.open_fake_page(submit_form_noaction, url=url) form = browser.select_form('#choose-submit-form') form['text1'] = 'newText1' res = browser.submit_selected() assert res.status_code == 200 and browser.url == url
def test_form_noname(): browser, url = setup_mock_browser(expected_post=[]) browser.open_fake_page(submit_form_noname, url=url) browser.select_form('#choose-submit-form') response = browser.submit_selected() assert (response.status_code == 200 and response.text == 'Success!') browser.close()
def test_form_noaction(): browser, url = setup_mock_browser() browser.open_fake_page(submit_form_noaction) browser.select_form('#choose-submit-form') with pytest.raises(ValueError, message="no URL to submit to"): browser.submit_selected() browser.close()
def test_submit_btnName(expected_post): '''Tests that the btnName argument chooses the submit button.''' browser, url = setup_mock_browser(expected_post=expected_post) browser.open(url) browser.select_form('#choose-submit-form') browser['text'] = expected_post[2][1] browser['comment'] = expected_post[0][1] res = browser.submit_selected(btnName=expected_post[1][0]) assert (res.status_code == 200 and res.text == 'Success!')
def test_form_action(): browser, url = setup_mock_browser() # for info about example.com see: https://tools.ietf.org/html/rfc2606 browser.open_fake_page(submit_form_action, url="http://example.com/invalid/") form = browser.select_form('#choose-submit-form') form['text1'] = 'newText1' res = browser.submit_selected() assert res.status_code == 200 and browser.url == url
def test_submit_btnName(expected_post): '''Tests that the btnName argument chooses the submit button.''' browser, url = setup_mock_browser(expected_post=expected_post) browser.open(url) browser.select_form('#choose-submit-form') browser['text'] = expected_post[2][1] browser['comment'] = expected_post[0][1] res = browser.submit_selected(btnName=expected_post[1][0]) assert(res.status_code == 200 and res.text == 'Success!')
def test_choose_submit(expected_post): browser, url = setup_mock_browser(expected_post=expected_post) browser.open(url) form = browser.select_form('#choose-submit-form') browser['text'] = dict(expected_post)['text'] browser['comment'] = dict(expected_post)['comment'] form.choose_submit(expected_post[2][0]) res = browser.submit_selected() assert res.status_code == 200 and res.text == 'Success!'
def test_set_select(option): '''Test the branch of Form.set that finds "select" elements.''' browser, url = setup_mock_browser(expected_post=option['result'], text=set_select_form) browser.open(url) browser.select_form('form') if not option['default']: browser[option['result'][0][0]] = option['result'][0][1] res = browser.submit_selected() assert res.status_code == 200 and res.text == 'Success!'
def test_request_forward(): browser, url = setup_mock_browser(expected_post=[('var1', 'val1'), ('var2', 'val2')]) r = browser.request('POST', url + '/post', data={ 'var1': 'val1', 'var2': 'val2' }) assert r.text == 'Success!'
def test_submit_btnName(expected_post): '''Tests that the btnName argument chooses the submit button.''' browser, url = setup_mock_browser(expected_post=expected_post) browser.open(url) browser.select_form('#choose-submit-form') browser['text'] = dict(expected_post)['text'] browser['comment'] = dict(expected_post)['comment'] initial_state = browser._StatefulBrowser__state res = browser.submit_selected(btnName=expected_post[2][0]) assert res.status_code == 200 and res.text == 'Success!' assert initial_state != browser._StatefulBrowser__state
def test_submit_dont_update_state(): expected_post = [('text', 'Bananas are good.'), ('preview', 'Preview Page')] browser, url = setup_mock_browser(expected_post=expected_post) browser.open(url) browser.select_form('#choose-submit-form') browser['text'] = dict(expected_post)['text'] initial_state = browser._StatefulBrowser__state res = browser.submit_selected(update_state=False) assert res.status_code == 200 and res.text == 'Success!' assert initial_state == browser._StatefulBrowser__state
def test_submit_dont_update_state(): expected_post = [ ('text', 'Bananas are good.'), ('preview', 'Preview Page')] browser, url = setup_mock_browser(expected_post=expected_post) browser.open(url) browser.select_form('#choose-submit-form') browser['text'] = dict(expected_post)['text'] initial_state = browser._StatefulBrowser__state res = browser.submit_selected(update_state=False) assert res.status_code == 200 and res.text == 'Success!' assert initial_state == browser._StatefulBrowser__state
def test_submit_dont_modify_kwargs(): """Test that submit_selected() doesn't modify the caller's passed-in kwargs, for example when adding a Referer header. """ kwargs = {'headers': {'Content-Type': 'text/html'}} saved_kwargs = copy.deepcopy(kwargs) browser, url = setup_mock_browser(expected_post=[], text='<form></form>') browser.open(url) browser.select_form() browser.submit_selected(**kwargs) assert kwargs == saved_kwargs
def test_set_select_multiple(options): """Test a <select multiple> element.""" # When a browser submits multiple selections, the qsl looks like: # name=option1&name=option2 if not isinstance(options, list) and not isinstance(options, tuple): expected = [('instrument', options)] else: expected = [('instrument', option) for option in options] browser, url = setup_mock_browser(expected_post=expected, text=set_select_multiple_form) browser.open(url) form = browser.select_form('form') form.set_select({'instrument': options}) res = browser.submit_selected() assert res.status_code == 200 and res.text == 'Success!'
def test_choose_submit_from_selector(value): """Test choose_submit by passing a CSS selector argument.""" text = """ <form method="post" action="mock://form.com/post"> <input type="submit" name="do" value="continue" /> <input type="submit" name="do" value="cancel" /> </form>""" browser, url = setup_mock_browser(expected_post=[('do', value)], text=text) browser.open(url) form = browser.select_form() submits = form.form.select(f'input[value="{value}"]') assert len(submits) == 1 form.choose_submit(submits[0]) res = browser.submit_selected() assert res.status_code == 200 and res.text == 'Success!'
def test_choose_submit_buttons(expected_post): """Buttons of type reset and button are not valid submits""" text = """ <form method="post" action="mock://form.com/post"> <button type="butTon" name="sub1" value="val1">Val1</button> <button type="suBmit" name="sub2" value="val2">Val2</button> <button type="reset" name="sub3" value="val3">Val3</button> <button name="sub4" value="val4">Val4</button> <input type="subMit" name="sub5" value="val5"> </form> """ browser, url = setup_mock_browser(expected_post=expected_post, text=text) browser.open(url) browser.select_form() res = browser.submit_selected(btnName=expected_post[0][0]) assert res.status_code == 200 and res.text == 'Success!'
def test_duplicate_submit_buttons(): """Tests that duplicate submits doesn't break form submissions See issue https://github.com/MechanicalSoup/MechanicalSoup/issues/264""" issue264_form = ''' <form method="post" action="mock://form.com/post"> <input name="box" type="hidden" value="1"/> <input name="search" type="submit" value="Search"/> <input name="search" type="submit" value="Search"/> </form> ''' expected_post = [('box', '1'), ('search', 'Search')] browser, url = setup_mock_browser(expected_post=expected_post, text=issue264_form) browser.open(url) browser.select_form() res = browser.submit_selected() assert res.status_code == 200 and res.text == 'Success!' browser.close()
def test_issue158(): """Test that form elements are processed in their order on the page and that elements with duplicate name-attributes are not clobbered.""" issue158_form = ''' <form method="post" action="mock://form.com/post"> <input name="box" type="hidden" value="1"/> <input checked="checked" name="box" type="checkbox" value="2"/> <input name="box" type="hidden" value="0"/> <input type="submit" value="Submit" /> </form> ''' expected_post = [('box', '1'), ('box', '2'), ('box', '0')] browser, url = setup_mock_browser(expected_post=expected_post, text=issue158_form) browser.open(url) browser.select_form() res = browser.submit_selected() assert res.status_code == 200 and res.text == 'Success!' browser.close()
def test_verbose(capsys): '''Tests that the btnName argument chooses the submit button.''' browser, url = setup_mock_browser() browser.open(url) out, err = capsys.readouterr() assert out == "" assert err == "" assert browser.get_verbose() == 0 browser.set_verbose(1) browser.open(url) out, err = capsys.readouterr() assert out == "." assert err == "" assert browser.get_verbose() == 1 browser.set_verbose(2) browser.open(url) out, err = capsys.readouterr() assert out == "mock://form.com\n" assert err == "" assert browser.get_verbose() == 2
def test_option_without_value(fail, selected, expected_post): """Option tag in select can have no value option""" text = """ <form method="post" action="mock://form.com/post"> <select name="selector"> <option value="with_value">We have a value here</option> <option>Without value</option> </select> <button type="submit">Submit</button> </form> """ browser, url = setup_mock_browser(expected_post=expected_post, text=text) browser.open(url) browser.select_form() if fail: with pytest.raises(mechanicalsoup.utils.LinkNotFoundError): browser['selector'] = selected else: browser['selector'] = selected res = browser.submit_selected() assert res.status_code == 200 and res.text == 'Success!'
def test_request_forward(): browser, url = setup_mock_browser(expected_post=[('var1', 'val1'), ('var2', 'val2')]) r = browser.request('POST', url + '/post', data={'var1': 'val1', 'var2': 'val2'}) assert r.text == 'Success!'
def test_form_noaction(): browser, url = setup_mock_browser() browser.open_fake_page(submit_form_noaction) browser.select_form('#choose-submit-form') with pytest.raises(ValueError, message="no URL to submit to"): browser.submit_selected()
def test_form_noname(): browser, url = setup_mock_browser(expected_post=[]) browser.open_fake_page(submit_form_noname, url=url) browser.select_form('#choose-submit-form') response = browser.submit_selected() assert(response.status_code == 200 and response.text == 'Success!')