def volunteer_for_duty(volunteer_name, campaign_name, duty_name):
    volunteer = the('Volunteer', name=volunteer_name)
    campaign = the('Campaign', name=campaign_name)
    duty = the('Duty', name=duty_name)
    visit("/volunteering/%s/%s/%s/" % (volunteer.slug, campaign.slug,
                                       duty.slug))
    submit()
def given_some_duties_are_assigned_to_another_volunteer(step):
    create_volunteer("Other Volunteer")
    volunteer = the('Volunteer', name="Other Volunteer")
    duty_names = [h['Name'] for h in step.hashes]
    for duty_name in duty_names:
        duty = the('Duty', name=duty_name)
        duty.assigned_to = volunteer
        duty.save()
def visit_volunteer_duty(volunteer_name, campaign_name, duty_name):
    volunteer = the('Volunteer', name=volunteer_name)
    campaign = the('Campaign', name=campaign_name)
    duty = the('Duty', name=duty_name)
    visit('/volunteering/%s/%s/%s/' % (volunteer.slug, campaign.slug,
                                       duty.slug))
def view_volunteer_plan(volunteer_name):
    volunteer = the('Volunteer', name=volunteer_name)
    visit("/volunteering/%s/" % volunteer.slug)
def then_she_sees_the_available_duties_for_which_she_could_be_assigned(step):
    volunteer = the('Volunteer', name="Sam Samson")
    duty_names = [h['Name'] for h in step.hashes]
    assert_volunteer_has_available_duties(volunteer, duty_names)
def and_she_does_not_sees_the_duties_assigned_to_others(step):
    volunteer = the('Volunteer', name="Sam Samson")
    duty_names = [h['Name'] for h in step.hashes]
    assert_volunteer_does_not_see_duties(volunteer, duty_names)