1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# -*- 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))
@step(u'When I visit the "([^"]*)" page for "([^"]*)" poll')
def visit_page_for_poll(step, page_name, poll_name):
page_list = {'Resultados': 'results'}
page = page_list[page_name]
poll_id = world.poll_id.__str__()
b = world.browser
url = '/manager/polls/{poll_id}/{page}/'.format(poll_id=poll_id, page=page)
b.visit(django_url(url))
|