Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/webapp/webapp/features/steps.py
blob: fb398d4d2dbe09d42bc647c0d8e9400d2bf11f1f (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
# -*- 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))