# -*- coding: utf-8 -*- import os import json import shutil from lettuce.django import django_url from lettuce import step, world from django.conf import settings from nose.tools import assert_true from sociologist.models import Sociologist from pollster.models import Pollster from polls.models import Poll from poll_result_details import get_pollster_by_username from poll_result_details import create_poll_result_file @step(u'When I visit the "([^"]*)" page$') def when_i_visit_the_page_name(step, page_name): page_list = { 'upload': 'polls/upload_result', 'list of polls': 'manager/polls/' } page = page_list[page_name] b = world.browser b.visit(django_url(page)) @step(u'Given I am a researcher') def given_i_am_a_researcher(step): username = "researcher" password = username create_user_and_login(Sociologist, username, password) def login(browser, username, password): browser.visit(django_url('/accounts/login')) browser.fill_form({'username': username, 'password': password}) login_xpath = '/html/body/div/div[2]/div/form/fieldset/button' browser.find_by_xpath(login_xpath).first.click() @step(u'Given I am a pollster: "([^"]*)"') def given_i_am_a_pollster_username(step, username): password = username create_user_and_login(Pollster, username, password) def create_user_and_login(rol, username, password): rol.create(username=username, password=password) b = world.browser login(b, username, password) def create_poll(name, status=Poll.OPEN): poll = Poll(data={'name': name, 'status': status}) world.poll_id = poll.save() @step(u'And "([^"]*)" exists') def and_poll_name_exists(step, poll_name): create_poll(poll_name) @step(u'And "([^"]*)" is "([^"]*)"') def and_poll_is_status(step, poll_name, status): status = Poll.CLOSED if status == "Cerrada" else Poll.OPEN create_poll(poll_name, status) @step(u'And "([^"]*)" is binded to "([^"]*)"') def and_encuestador_is_binded_to_poll(step, encuestador, poll_name): username = encuestador password = username try: pollster = get_pollster_by_username(encuestador) except IndexError: pollster = Pollster.create(username=username, password=password) polls = [world.poll_id] Poll.pollster_assignment(pollster.id, polls) def get_fixture(poll_result): path = os.path.abspath(os.path.dirname(__file__)) path = os.path.join(path, "fixtures", poll_result) return path @step(u'And with "([^"]*)" uploaded by "([^"]*)" on "([^"]*)"') def poll_result_uploaded_by_encuestador(step, poll_result_name, encuestador_name, datetime_str): poll_result_path = get_fixture(poll_result_name) encuestador = get_pollster_by_username(encuestador_name) with open(poll_result_path) as f: poll_result_data = json.load(f, "utf-8") poll_result_data['poll_id'] = world.poll_id.__str__() poll_result_data['pollster_username'] = encuestador.username poll_result_data['pollster_id'] = encuestador.id.__str__() poll_result_data['upload_timestamp'] = datetime_str poll_result_path = create_poll_result_file(poll_result_data, poll_result_name) media_results = settings.RESULT_BCK_ROOT results_dir = os.path.join(media_results, world.poll_id.__str__()) if not os.path.exists(results_dir): os.mkdir(results_dir) shutil.move(poll_result_path, results_dir) @step(u'Then I should see a message that says "([^"]*)"$') def i_should_see_a_message_that_says_text(step, text): b = world.browser assert_true(b.is_text_present(text)) def get_poll_by_name(poll_name): return filter(lambda p: p.name == poll_name, Poll.all())[0] @step(u'I visit the "([^"]*)" page for "([^"]*)" poll') def visit_page_for_poll(step, page_name, poll_name): poll_id = str(get_poll_by_name(poll_name).id) page_list = { 'Resultados': '/manager/polls/{poll_id}/results', 'Modificar estructura': '/manager/polls/structure/{poll_id}', 'Edit': '/manager/polls/edit/{poll_id}' } url = page_list[page_name].format(poll_id=poll_id) b = world.browser b.visit(django_url(url)) def click_on(browser, name): b = browser b.find_by_name(name).first.click()