Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes in README.md #69

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions .github/workflows/django.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Python application
on:
push:
branches:
- develop
- master
jobs:
build:
strategy:
matrix:
pyversion: ['3.10.12','3.11']
sqlversion: ['14.9', '15']

runs-on: ubuntu-latest

services:
postgres:
image: postgres:14.9
env:
POSTGRES_USER: decide
POSTGRES_PASSWORD: decide
POSTGRES_DB: decide
ports:
- 5432:5432
# needed because the postgres container does not provide a healthcheck
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{matrix.pyversion}}
uses: actions/setup-python@v4
with:
python-version: ${{matrix.pyversion}}
- name: psycopg2 prerequisites
run: sudo apt-get install libpq-dev
- name: Install dependencies and config
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install codacy-coverage
cp decide/local_settings.gactions.py decide/local_settings.py
- name: Run migrations (unnecessary)
run: |
cd decide
python manage.py migrate
- name: Run tests
run: |
cd decide
coverage run --branch --source=. ./manage.py test --keepdb
# coverage run --branch --source=. ./manage.py test voting --keepdb
coverage xml
- name: Codacy Coverage Reporter
uses: codacy/codacy-coverage-reporter-action@v1
with:
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
coverage-reports: decide/coverage.xml
22 changes: 22 additions & 0 deletions .gitmessage.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
tipo: asunto #id

cuerpo

### tipo
# feat (nueva funcionalidad)
# fix (corrección de bugs)
# research (incorporación de código experimental, puede ser no funcional)
# refactor (refactorización de código)
# docs (actualización de documentación)
# test (incorporación o modificación de tests)
# conf (modificación de archivos de configuración)

### asunto
# Consiste en una breve descripción del problema que se ha tratado y que debe de comenzar con un verbo en participio.
# Se referenciará la issue correspondiente (en caso de existir) tal que: `#<ID_issue>`

### cuerpo (opcional)
# Se utilizará en caso de que el asunto no sea suficientemente descriptivo.

### Ejemplo
# conf : Actualizado docker-compose.yml #1
199 changes: 199 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
[![Build Status](https://travis-ci.com/wadobo/decide.svg?branch=master)](https://travis-ci.com/wadobo/decide) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/94a85eaa0e974c71af6899ea3b0d27e0)](https://www.codacy.com/app/Wadobo/decide?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=wadobo/decide&amp;utm_campaign=Badge_Grade) [![Codacy Badge](https://api.codacy.com/project/badge/Coverage/94a85eaa0e974c71af6899ea3b0d27e0)](https://www.codacy.com/app/Wadobo/decide?utm_source=github.com&utm_medium=referral&utm_content=wadobo/decide&utm_campaign=Badge_Coverage)
[![Python application](https://github.com/bogdanstefan/decidePrueba/actions/workflows/django.yml/badge.svg)](https://github.com/bogdanstefan/decidePrueba/actions/workflows/django.yml)

UN CAMBIO!
Plataforma voto electrónico educativa
=====================================

Expand Down Expand Up @@ -66,17 +68,154 @@ Tras esto tendremos que crearnos nuestra base de datos con postgres:
sudo su - postgres
psql -c "create user decide with password 'decide'"
psql -c "create database decide owner decide"
psql -c "ALTER USER decide CREATEDB"

Entramos en la carpeta del proyecto (cd decide) y realizamos la primera migración para preparar la
base de datos que utilizaremos:

./manage.py migrate

Creamos el superusuario, que será el administrador del sistema. Con este usuario podremos tener acceso
a todas las funcionalidades ofrecidas por Decide, como por ejemplo crear usuarios. El comando es el
siguiente:

./manage.py createsuperuser

Por último, ya podremos ejecutar el módulos o módulos seleccionados en la configuración de la
siguiente manera:

./manage.py runserver

Tests
-------------------

Una vez configurado postgres y ejecutado el migrate.
Para ejecutar todos los tests disponibles

$./manage.py test

Para ejecutar los tests que pertenecen a una categoria como “voting”, por ejemplo

$./manage.py test voting

Para ver la cobertura del codigo que estos tests prueban, se puede lanzar el siguiente comando:

coverage run --source . ./manage.py test -v 2

Esto generará un "index.html", que se puede consultar para ver de forma especifica las partes del codigo no testeadas.


Guía rápida
-------------------

Aclaración: En esta guía vamos a usar como url de base: "localhost:8000".

### 1. Login como administrador del sistema

Una vez iniciada la aplicación, accedemos a http://localhost:8000/admin/ e ingresamos las credenciales
del super usuario creado anteriormente.

![Imagen 01: Login](./resources/quickstart/00_login.png)

Si nos hemos conectado con éxito como un administrador, nos debería aparecer la siguiente vista:

![Imagen 02: Menu](./resources/quickstart/01_menu.png)

### 2. Creación de questions

Buscamos el botón "add" dentro del apartado "questions" de la categoría "voting". En el textarea
etiquetado como "Desc" se añade la pregunta a realizar en la futura votación. Después en los
apartados de "question options" añadimos todas las posibles respuestas a la pregunta definida
anteriormente. Estas "questions options" se pueden eliminar clickando a la "X" situada a la derecha y
se pueden añadir mas opciones pulsando en "add questions options" situado mas abajo.

No es necesario rellenar todas las "question options" que aparezcan en la vista. Una vez tengamos
todas las posibles respuestas que deseamos podemos guardar haciendo click en el botón "Save".

![Imagen 03: Questions](./resources/quickstart/02_question.png)

### 3. Creación de votings

Hacemos click al botón "add" dentro de "Votings" en la categoría "Voting" y nos aparecerá el formulario
de creacion de votaciones.

En dicho formulario le ponemos un nombre a la votación, la descripción es opcional, en el desplegable
"question" nos debe aparecer la pregunta generada en el apartado anterior de esta guía y la
seleccionamos.

![Imagen 04: Voting](./resources/quickstart/03_voting.png)

En el apartado "Auths" de su primera votación deberá crear uno. Para ello, debe clickar en el "+" a la
derecha de la lista de "Auths". Aparecerá una ventana nueva donde deberá rellenar un formulario con el
nombre que desee y la url, en nuestro caso es "http://localhost:8000".

![Imagen 05: Auth](./resources/quickstart/04_auth.png)

Pulsamos en el botón "Save" y ya tenemos nuestra votación creada.

### 4. Creacion de census

En "votings" buscamos la votación que hemos generado y entramos en ella para mirar en la barra de
direcciones la id de nuestra votación. En el siguiente ejemplo, la id es 19.

http://localhost:8000/admin/voting/voting/19/change/

Nos dirigimos al apartado "censuss" en la categoría "census" y clickamos en "add". Ponemos la id de
nuestra votacion en "voting id" y en "voter id" ponemos la id del votante que queremos añadir.

NOTA: el administrador si es el primer usuario creado tendrá la id 1.

![Imagen 06: Census](./resources/quickstart/05_census.png)

### 5. Comenzar la votación

Llegados a este punto necesitamos abrir una votación, para ello debemos marcar el checkbox a la
izquierda de nuestra votación. Una vez seleccionado, tenemos que ir al desplegable de "action",
seleccionamos la opción "Start" y pulsamos en el boton "Go". Esperamos a que aparezca el "Start date"
y ya tendríamos la votación abierta y lista para votar.

![Imagen 07: Start voting](./resources/quickstart/06_start.png)

### 6. Votar

Para poder votar primero debemos ingresar en la barra de direcciones de nuestro navegador lo siguiente:

http://localhost:8000/booth/[id de la votación]/

![Imagen 08: Booth](./resources/quickstart/07_booth.png)

Una vez accedemos, debemos iniciar sesión con un usuario que esté incluido en el censo.

Cuando nos aparezca la pregunta, ya podemos seleccionar la respuesta y guardarla como un voto.
Al confirmar el voto, nos aparecerá lo siguiente:

![Imagen 09: Vote success](./resources/quickstart/08_voted.png)

El mensaje de "Congratulations. Your vote has been sent" nos confirma que nuestro voto ha sido
registrado correctamente.

### 7. Conteo de votos

Nos dirigimos nuevamente al apartado "voting" desde nuestro perfil de administrador. Primero tenemos
que cerrar la votación, para ello seleccionamos el checkbox a la izquierda de nuestra votación
marcamos "Stop" y pulsamos el botón "Go". Notará que en el apartado "End Date" ahora aparece
la fecha actual, esto nos indica que la votación ha sido cerrada y está lista para el conteo.

Una vez cerrada la votación, volvemos a seleccionar el checkbox de la izquierda de nuestra votación
marcamos la opción "Tally" en el desplegable de "Actions" y pulsamos nuevamente en el botón "Go".

![Imagen 10: Tally](./resources/quickstart/09_tally.png)

### 8. Visualización de resultado

Una vez tenemos la votación cerrada y con el conteo de votos realizado, ya podemos visualizar el
resultado accediendo a la siguiente url:

http://localhost:8000/visualizer/[id de la votación]/

![Imagen 11: Visualizer](./resources/quickstart/10_visualizer.png)


Ejecutar con docker
-------------------

Expand Down Expand Up @@ -290,3 +429,63 @@ A tener en cuenta:
concurrentes, cuando pongamos más de 100, lo normal es que empiecen a fallar muchas peticiones.
* Si hacemos las pruebas en local, donde tenemos activado el modo debug de Django, lo normal es que
las peticiones tarden algo más y consigamos menos RPS (Peticiones por segundo).

Poblar con datos iniciales
--------------------------

Para probar el correcto funcionamiento de nuestra aplicación de decide, hemos generado una serie de
datos iniciales. Para ello, hemos elaborado un archivo JSON con datos que Django usa para generar
varias votaciones y usuarios de manera automática. Este se ha dotado con el nombre de "populate.json"
y se ha colocado junto a "manage.py". Lo pasos a seguir son los comentados abajo.

Para borrar posibles datos en base de datos generados por el usuario, se recomienda ejecutar:

./manage.py flush

Tras esto, poblamos la base de datos con datos iniciales de la siguiente manera:

./manage.py loaddata populate.json

Se ha creado un usuario staff con las credenciales:
* Usuario: admin
* Contraseña: admin

Por otra parte, el resto de usuarios (3 restantes) siguen la siguiente secuencia:
* Usuario: usuario#
* Contraseña: practica#

donde # es la sucesión desde el valor 1 hasta el 3.

En cuanto a las votaciones, se ha creado una votación cerrada con su correspondiente conteo,
una votación abierta con la que podemos interactuar y una votación que no se ha iniciado,
cubriendo así todas las posibilidades.
Si se quieren añadir más casuística a la carga inicial, basta con editar el "populate.json" siguiendo
la misma estructura que los datos contenidos en el mismo.

Cabe añadir que previo a ejecutar ambos comandos, deberemos haber activado nuestro entorno de
Python 3.9.

El archivo "populate.json" se ha generado manualmente con ayuda de la documentación encontrada en
[el siguiente portal web](https://docs.djangoproject.com/en/4.1/howto/initial-data/).

Versiones actuales
------------------

En las ultimas actualizaciones se han modificado las versiones usadas por la aplicación Decide. Las
versiones usadas actualmente se corresponden a las siguientes:

* Django = 4.1
* pycryptodome = 3.15.0
* djangorestframework = 3.14.0
* django-cors-headers = 3.13.0
* requests = 2.28.1
* django-filter = 22.1
* psycopg2 = 2.9.4
* coverage = 6.5.0
* jsonnet = 0.18.0
* django-nose = 1.4.6
* django-rest-swagger = 2.2.0
* Python = 3.9
* Vue=3
* Bootstrap=5.2
* selenium = 4.7.2
41 changes: 41 additions & 0 deletions decide/local_settings.gactions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
ALLOWED_HOSTS = ["*"]

# Modules in use, commented modules that you won't use
MODULES = [
'authentication',
'base',
'booth',
'census',
'mixnet',
'postproc',
'store',
'visualizer',
'voting',
]

BASEURL = 'http://localhost:8000'
APIS = {
'authentication': BASEURL,
'base': BASEURL,
'booth': BASEURL,
'census': BASEURL,
'mixnet': BASEURL,
'postproc': BASEURL,
'store': BASEURL,
'visualizer': BASEURL,
'voting': BASEURL,
}

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'decide',
'USER': 'decide',
'PASSWORD': 'decide',
'HOST': 'localhost',
'PORT': '5432',
}
}

# number of bits for the key, all auths should use the same number of bits
KEYBITS = 256
Loading