Skip to content
This repository has been archived by the owner on Feb 8, 2018. It is now read-only.

Commit

Permalink
Make tests work under multiple notifications
Browse files Browse the repository at this point in the history
  • Loading branch information
chadwhitacre authored and rohitpaulk committed Jun 13, 2017
1 parent ad0b51d commit a42f002
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 20 deletions.
29 changes: 18 additions & 11 deletions gratipay/testing/browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,27 +113,34 @@ def wait_for(self, selector, timeout=2):
return element
raise NeverShowedUp(selector)

def wait_for_notification(self, type='notice'):
"""Wait for a certain ``type`` of notification. Dismiss the
notification and return the message.
def wait_for_notification(self, type='notice', message=None, timeout=2):
"""Wait for a certain ``type`` of notification, with a certain message
(if specified). Dismiss the notification and return the message.
"""
notification_selector = '.notifications-fixed .notification-{}'.format(type)
close_button_selector = 'span.btn-close'
notification = self.wait_for(notification_selector).first
message = notification.find_by_css('div').html
end_time = time.time() + timeout
while time.time() < end_time:
notification = self.wait_for(notification_selector, timeout).first
candidate = notification.find_by_css('div').html
if message is None or message == candidate:
message = candidate
break
notification.find_by_css(close_button_selector).first.click()
self.wait_to_disappear('#{} {}'.format(notification['id'], close_button_selector))
return message

def wait_for_success(self):
"""Wait for a success notification. Dismiss it and return the message.
def wait_for_success(self, message=None):
"""Wait for a success notification, with a certain message (if
specified). Dismiss it and return the message.
"""
return self.wait_for_notification('success')
return self.wait_for_notification('success', message)

def wait_for_error(self):
"""Wait for an error notification. Dismiss it and return the message.
def wait_for_error(self, message=None):
"""Wait for an error notification, with a certain message (if
specified). Dismiss it and return the message.
"""
return self.wait_for_notification('error')
return self.wait_for_notification('error', message)

def __getattr__(self, name):
try:
Expand Down
11 changes: 4 additions & 7 deletions js/gratipay/packages.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,14 @@ Gratipay.packages.initSingle = function() {

Gratipay.packages.postBulk = function(e) {
e.preventDefault();
var pkg, email, package_id, emails=[], package_ids_by_email={};
var pkg, email, package_id, package_ids_by_email={};
$('table.listing td.item ').not('.disabled').each(function() {
pkg = $(this).data();
if (package_ids_by_email[pkg.email] === undefined) {
emails.push(pkg.email);
if (package_ids_by_email[pkg.email] === undefined)
package_ids_by_email[pkg.email] = [];
}
package_ids_by_email[pkg.email].push(pkg.packageId);
});
emails.sort();
for (var i=0, email; email = emails[i]; i++)
for (email in package_ids_by_email)
Gratipay.packages.post(email, package_ids_by_email[email], true);
};

Expand All @@ -36,7 +33,7 @@ Gratipay.packages.postOne = function(e) {

Gratipay.packages.post = function(email, package_ids, show_email) {
var action = 'start-verification';
var $button = $('.important-button button')
var $button = $('button.apply')

$button.prop('disabled', true);
function reenable() { $button.prop('disabled', false); }
Expand Down
4 changes: 2 additions & 2 deletions tests/ttw/test_package_claiming.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,8 @@ def test_sends_one_mail_per_address(self):
self.add_and_verify_email(cat, '[email protected]')
self.visit_as('cat')
self.css('.important-button button').click()
assert self.wait_for_success() == 'Check [email protected] for a verification link.'
assert self.wait_for_success() == 'Check [email protected] for a verification link.'
assert self.wait_for_success('Check [email protected] for a verification link.')
assert self.wait_for_success('Check [email protected] for a verification link.')

def test_sends_one_mail_for_multiple_packages(self):
self.make_participant('alice', claimed_time='now', email_address='[email protected]')
Expand Down

0 comments on commit a42f002

Please sign in to comment.