Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/webapp/webapp/features/steps.py
blob: 6e4dfb6431c0a28059dd6e4bc0be5df0f0d30097 (plain)
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
127
128
129
130
131
132
133
# -*- 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'When 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': [poll_id, 'results'],
        'Modificar estructura': ['structure', poll_id]
    }
    page_args = page_list[page_name]
    b = world.browser
    url = '/manager/polls/' + "/".join(page_args)
    b.visit(django_url(url))