diff --git a/CHANGELOG.md b/CHANGELOG.md index 6916e85..7cb94c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,177 @@ Todos los cambios notables en este proyecto serán documentados en este archivo. El formato está basado en [Keep a Changelog](https://keepachangelog.com/es-ES/1.0.0/), y este proyecto se adhiere a [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +--- + +## [2.0.0] - 2025-11-28 + +### 🎉 Major Release - Interfaz Gráfica + Testing Automatizado + +Este release marca una evolución significativa del proyecto, introduciendo una interfaz gráfica completa, testing automatizado robusto, soporte de teclado y múltiples mejoras de usabilidad. + +### Agregado + +#### Interfaz Gráfica de Usuario (GUI) + +- **Calculadora visual** con tkinter (#15, #16, #17) + - Ventana principal con diseño moderno + - Display interactivo de alta resolución para números y resultados + - Grid de botones organizados por función + - Tema oscuro profesional con paleta de colores elegante (#18, #19, #20, #21) + - Diseño responsive con grid layout adaptable + +#### Funcionalidades de GUI + +- **Entrada numérica** por clicks en botones (#22, #31) +- **Botón decimal (.)** con validación para evitar múltiples puntos (#25, #32) +- **Lógica de operadores** matemáticos: +, -, \*, /, ^ (#26, #33) +- **Botones de control**: + - Clear (C): Limpia display y resetea estado (#28, #34) + - Backspace (⌫): Elimina último carácter (#28, #34) +- **Funciones científicas** integradas en GUI (#30, #35): + - Valor absoluto (abs) + - Máximo (max) + - Mínimo (min) +- **Soporte para números negativos** (#41, #45) + - Ingreso de números negativos en la GUI + - Manejo correcto de operaciones con negativos +- **Mejoras en manejo de múltiples números negativos** (#43) +- **Soporte completo de teclado** (#37, #47) + - Atajos para todos los números (0-9) + - Atajos para operadores (+, -, \*, /, ^) + - Enter o = para calcular resultado + - Escape para limpiar display + - Backspace para borrar último carácter + - Control completo mediante teclado o mouse + +#### Testing Automatizado + +- **Archivo `test_gui_calculator.py`** con suite completa de tests para GUI (#23, #48) + - Tests de clicks en botones numéricos + - Tests de botón Clear y Backspace + - Tests de operaciones básicas + - Tests de manejo de errores +- **Archivo `conftest.py`** con fixtures y mocks de Tkinter (#48) + - Clases dummy: DummyRoot, DummyEntry, DummyButton, DummyLabel + - Fixture `autouse` para sustituir componentes gráficos + - Tests ejecutables sin display gráfico (ideal para CI/CD) + - Compatibilidad con entornos headless + +#### CI/CD con GitHub Actions + +- **Pipeline automático** de integración continua (#36, #42) + - Workflow configurado para ramas `main` y `dev` + - Ejecución automática de tests en cada PR + - Validación continua de calidad de código + - Tests en ambiente headless sin Tcl/Tk + - Archivo `.github/workflows/ci.yml` configurado + +#### Documentación + +- **Guía de usuario** para la interfaz gráfica (#24, #40) + - Instrucciones de uso de la GUI + - Ejemplos de operaciones + - Atajos de teclado documentados +- **Mejoras en documentación** de funciones y manejo de errores (#29, #39) + +### Mejorado + +- **Experiencia de usuario** con dos interfaces disponibles: + - CLI (`main.py`): Interfaz de línea de comandos original + - GUI (`gui. py`): Interfaz gráfica moderna +- **Refactoring de lógica** redundante en manejo de operadores (#46) +- **Manejo visual de errores** en la GUI + - División por cero detectada y manejada + - Mensajes de error claros en el display + - Validación de entrada de decimales y negativos +- **Organización del proyecto** con separación clara CLI/GUI/tests +- **Calidad de código** con validación continua + +### Técnico + +- Implementación de clase `CalculatorGUI` con tkinter +- Sistema de grid layout responsivo para botones +- Binding de eventos de teclado en tkinter +- Fixtures de pytest con `autouse=True` +- Mocks de componentes Tkinter para testing sin GUI +- Workflow de GitHub Actions para CI/CD +- Integración completa entre GUI y módulo `calculator. py` + +### Mantenido + +- Interfaz de línea de comandos (CLI) en `main.py` +- Todas las funciones matemáticas originales +- Compatibilidad con Python 3.12+ +- Suite de tests unitarios (`test_calculator.py`) +- Templates de Issues y Pull Requests + +### Issues y PRs Incluidas + +**Issues Completadas:** + +- #15 - Implementar: Prototipo inicial de GUI +- #18 - Mejorar diseño: Ajustes y refinamientos de la GUI +- #20 - Mejora: Estilos visuales de la GUI +- #22 - Agregar función: Clicks de botones numéricos en GUI +- #23 - Pruebas: Testing manual completo de GUI +- #24 - Documentación: Guía de usuario para GUI +- #25 - Agregar función: Botón punto decimal en GUI +- #26 - Agregar función: Lógica de operadores en GUI +- #28 - Agregar funcionalidad: Botones Clear y Backspace +- #29 - Mejora: Manejo de errores y validaciones en GUI +- #30 - Agregar función: Funciones científicas en GUI +- #36 - Configurar CI/CD con GitHub Actions +- #37 - Agregar soporte de teclado para calculadora GUI +- #41 - Mejora: Números negativos sin operación de resta +- #43 - Error: Difícil ingresar múltiples números negativos + +**Pull Requests Mergeados:** + +- #48 - test: agregar tests de GUI con mocks de tkinter +- #47 - feat: agregar soporte de teclado para calculadora GUI +- #46 - refactor(gui): eliminar lógica redundante en el manejo de operadores +- #45 - feat(gui): soporte para números negativos y actualización de documentación +- #42 - feat: Configurar CI/CD con GitHub Actions +- #40 - docs: Añadir guía de usuario para la GUI +- #39 - refactor(gui): mejorar funciones unarias y manejo de errores +- #35 - feat: Agregar funciones científicas (abs, max, min) con integración en GUI +- #34 - feat: implementar botones C y ⌫ con su funcionalidad correspondiente +- #33 - feat(core): añadir lógica de operaciones (+, -, \*, /, ^) y soporte para botón "=" +- #32 - feat: implementar botón decimal con validación en la calculadora Tkinter +- #31 - feat: Implementar lógica de clic para entrada numérica +- #21 - feat: actualizar colores en gui.py +- #19 - feat: ajustar diseño según selección del equipo +- #17 - feat: Merge prototype calculator design from dev to main +- #16 - feat: agregar prototipo de GUI con diseño base + +### Agradecimientos + +Este release fue posible gracias a las contribuciones de: + +- **@Jandres25** (Jose Andres Meneces Lopez) + + - Coordinador del release + - Prototipo de GUI (#15, #16) + - CI/CD con GitHub Actions (#42) + - Testing automatizado de GUI (#23, #48) + - Soporte de teclado (#47) + +- **@Jhos3ph** + + - Funciones científicas en GUI (#35) + - Lógica de operaciones (#26, #33) + - Entrada numérica (#22, #31) + - Refactoring y optimizaciones (#39, #46) + - Soporte de números negativos (#45) + +- **@alexricardotapiacarita-ai** + - Diseño y estilos visuales (#18, #19, #20, #21) + - Botón decimal con validación (#25, #32) + - Botones Clear y Backspace (#28, #34) + - Documentación y guía de usuario (#24, #40) + +--- + ## [1.0.0] - 2025-11-04 ### Agregado @@ -28,11 +199,16 @@ y este proyecto se adhiere a [Semantic Versioning](https://semver.org/spec/v2.0. - Estructura del proyecto organizada - Sistema de pruebas configurado con pytest -## [Próximamente] +--- + +## [Próximamente] - v2.1.0 ### Planeado -- Interfaz gráfica usando tkinter -- Más operaciones matemáticas +- Soporte de operaciones con paréntesis en GUI (#44) +- Fix: Manejo de números decimales negativos (#49) +- Fix: Raíces pares de números negativos (#50) - Historial de operaciones -- Soporte para expresiones matemáticas complejas +- Más funciones matemáticas (raíz cuadrada, logaritmos, trigonometría) +- Temas personalizables (claro/oscuro) +- Exportar historial de cálculos diff --git a/README.md b/README.md index f813d2f..ce7ea24 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,199 @@ -# Team Practice - Flujo de Trabajo Colaborativo +# Team Practice - Calculadora con GUI 🧮✨ -[![CI](https://github.com/WorkTeam01/team-practice/actions/workflows/ci.yml/badge.svg)](https://github.com/WorkTeam01/team-practice/actions/workflows/ci.yml) +[![CI/CD](https://github.com/WorkTeam01/team-practice/actions/workflows/ci. yml/badge.svg)](https://github.com/WorkTeam01/team-practice/actions/workflows/ci.yml) +[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) -Este repositorio está diseñado para practicar y aprender el flujo de trabajo colaborativo en equipo usando **Python** como lenguaje principal, elegido por su facilidad de uso y aprendizaje. +Proyecto colaborativo para practicar flujo de trabajo en equipo usando **Python**. Calculadora con interfaz gráfica (GUI), interfaz de línea de comandos (CLI), testing automatizado y CI/CD. + +--- ## 🎯 Propósito del Proyecto -- **Practicar Git Flow**: Ramas, merge requests, resolución de conflictos +- **Practicar Git Flow**: Ramas, pull requests, resolución de conflictos - **Aprender colaboración**: Code reviews, pair programming, comunicación efectiva - **Desarrollar en Python**: Aprovechar la simplicidad del lenguaje para enfocarse en las prácticas de trabajo en equipo -- **Establecer buenas prácticas**: Documentación, testing, estructura de proyecto +- **Establecer buenas prácticas**: Documentación, testing, CI/CD, estructura de proyecto -## 🚀 Configuración Inicial +--- -### Prerrequisitos +## ✨ Características v2.0.0 -- Python 3.12 o superior -- Git -- Editor de código (VS Code recomendado) +### 🖥️ Interfaz Gráfica (GUI) + +- **Calculadora visual moderna** con tkinter +- **Tema oscuro profesional** con diseño elegante +- **Display de alta resolución** para números y resultados +- **Soporte completo de teclado** + mouse +- **Funciones científicas** integradas (abs, max, min) +- **Manejo visual de errores** + +### ⌨️ Atajos de Teclado + +| Tecla | Acción | +| ------------------- | ----------------------- | +| `0-9` | Ingresar dígitos | +| `. ` | Punto decimal | +| `+` `-` `*` `/` `^` | Operaciones matemáticas | +| `Enter` o `=` | Calcular resultado | +| `Escape` | Limpiar display (Clear) | +| `Backspace` | Borrar último carácter | -### Características Implementadas +### 💻 Interfaz de Línea de Comandos (CLI) -- Interfaz gráfica con tkinter +- Interfaz interactiva en terminal +- Todas las operaciones matemáticas disponibles +- Manejo robusto de errores -### Próximas Características +### 🧪 Testing Automatizado -- Más operaciones matemáticas -- Historial de operaciones -- Soporte para expresiones matemáticas complejas +- Tests unitarios con **pytest** +- Tests de GUI con mocks de Tkinter +- Ejecutable sin interfaz gráfica (headless) +- Ideal para CI/CD -Para ver el historial detallado de cambios, consulta el archivo [CHANGELOG.md](CHANGELOG.md) +### 🤖 CI/CD con GitHub Actions + +- Ejecución automática de tests en cada PR +- Validación continua de calidad de código +- Pipeline configurado para `main` y `dev` + +--- + +## 🚀 Instalación y Uso + +### Prerrequisitos + +- Python 3.12 o superior +- pip (gestor de paquetes de Python) ### Instalación ```bash # Clonar el repositorio -git clone +git clone https://github.com/WorkTeam01/team-practice.git cd team-practice -# Instalar pytest (única dependencia necesaria) +# Instalar dependencias pip install pytest ``` +### Ejecutar la Aplicación + +#### Interfaz Gráfica (GUI) + +```bash +python gui.py +``` + +#### Interfaz de Línea de Comandos (CLI) + +```bash +python main.py +``` + +### Ejecutar Tests + +```bash +# Ejecutar todos los tests +pytest -v + +# Tests de calculadora básica +pytest test_calculator.py -v + +# Tests de GUI +pytest test_gui_calculator.py -v + +# Tests con cobertura +pytest --cov=. -v +``` + +--- + ## 📁 Estructura del Proyecto ``` team-practice/ -├── calculator.py # Código fuente principal -├── test_calculator.py # Pruebas unitarias -├── main.py # Programa principal -├── gui.py # Interfaz gráfica -├── .gitignore # Archivos ignorados por Git -├── .github/ # Configuración y templates de GitHub -│ ├── ISSUE_TEMPLATE/ # Plantillas para issues -│ ├── PULL_REQUEST_TEMPLATE/ # Plantillas para pull requests -│ ├── pull_request_template.md # Template para pull requests -│ └── REVIEW_COMMENTS.md # Plantillas para comentarios de revisión -├── README.md # Este archivo -├── CHANGELOG.md # Historial de cambios -└── LICENSE # Licencia del proyecto +├── calculator. py # Lógica de operaciones matemáticas +├── main.py # CLI - Interfaz de línea de comandos +├── gui.py # GUI - Interfaz gráfica con tkinter +├── test_calculator.py # Tests unitarios de calculator. py +├── test_gui_calculator.py # Tests de la interfaz gráfica +├── conftest.py # Fixtures de pytest (mocks de Tkinter) +├── . github/ +│ ├── workflows/ +│ │ └── ci.yml # Pipeline de CI/CD +│ ├── ISSUE_TEMPLATE/ # Plantillas para issues +│ ├── PULL_REQUEST_TEMPLATE/ # Plantillas para PRs +│ └── pull_request_template.md +├── README.md # Este archivo +├── CHANGELOG.md # Historial de cambios +├── LICENSE # Licencia MIT +└── . gitignore # Archivos ignorados por Git ``` -## 🤝 Flujo de Trabajo +--- + +## 🧮 Operaciones Disponibles + +### Operaciones Básicas + +- ➕ **Suma**: `a + b` +- ➖ **Resta**: `a - b` +- ✖️ **Multiplicación**: `a * b` +- ➗ **División**: `a / b` +- 🔢 **Potencia**: `a ^ b` + +### Funciones Científicas + +- `abs(x)` - Valor absoluto +- `max(a, b)` - Valor máximo entre dos números +- `min(a, b)` - Valor mínimo entre dos números + +### Manejo de Errores + +- ⚠️ División por cero detectada y manejada +- 🛡️ Validación de entrada en ambas interfaces +- 📢 Mensajes de error claros + +--- + +## 🤝 Flujo de Trabajo Colaborativo ### 1. Antes de comenzar -- Hacer pull de la rama main -- Crear una nueva rama para tu feature: `git checkout -b feature/nombre-descriptivo` +```bash +# Actualizar rama main +git checkout main +git pull origin main + +# Crear rama para tu feature +git checkout -b feature/nombre-descriptivo +``` ### 2. Durante el desarrollo -- Commits frecuentes y descriptivos -- Seguir convenciones de naming -- Escribir tests para nuevas funcionalidades +- ✅ Commits frecuentes y descriptivos +- ✅ Seguir [Conventional Commits](https://www.conventionalcommits.org/) +- ✅ Escribir tests para nuevas funcionalidades +- ✅ Ejecutar tests localmente antes de push ### 3. Al finalizar -- Push de tu rama -- Crear Pull Request -- Solicitar code review -- Mergear después de aprobación +```bash +# Push de tu rama +git push origin feature/nombre-descriptivo + +# Crear Pull Request en GitHub +# Solicitar code review +# Mergear después de aprobación +``` + +--- ## 📋 Convenciones -### Commits +### Commits (Conventional Commits) ``` tipo: descripción breve @@ -91,99 +201,226 @@ tipo: descripción breve Descripción más detallada si es necesario Ejemplos: -feat: agregar función de validación de email -fix: corregir error en cálculo de descuentos -docs: actualizar README con instrucciones de setup +feat: agregar soporte de teclado para calculadora +fix: corregir división por cero +docs: actualizar instrucciones de instalación +test: agregar tests para botones numéricos +refactor: eliminar lógica redundante en operadores ``` +**Tipos de commit:** + +- `feat`: Nueva funcionalidad +- `fix`: Corrección de bug +- `docs`: Cambios en documentación +- `test`: Agregar o modificar tests +- `refactor`: Refactorización de código +- `style`: Cambios de formato (sin afectar lógica) +- `chore`: Tareas de mantenimiento + ### Ramas -- `main`: Rama principal (siempre estable) +- `main`: Rama principal (siempre estable, producción) +- `dev`: Rama de desarrollo (integración) - `feature/nombre-funcionalidad`: Nuevas características - `bugfix/descripcion-del-bug`: Corrección de errores -- `hotfix/descripcion-urgente`: Correcciones urgentes +- `hotfix/descripcion-urgente`: Correcciones urgentes en producción +- `release/vX.Y.Z`: Preparación de releases -## 🧪 Testing +--- + +## 👥 Contribuir -### Ejecutar pruebas localmente +### Proceso de Contribución -```bash -# Ejecutar todas las pruebas -pytest -v +1. **Asigna o crea un issue** usando las plantillas proporcionadas + - Para bugs: usa la plantilla de "reporte de error" + - Para nuevas funciones: usa la plantilla de "nueva funcionalidad" +2. **Crea tu rama** desde `dev` (no desde `main`) -# Ejecutar pruebas de un archivo específico -pytest test_calculator.py -v + ```bash + git checkout dev + git pull origin dev + git checkout -b feature/mi-funcionalidad + ``` -# Ejecutar el programa principal -python main.py +3. **Implementa tu cambio** -# Ejecutar la interfaz gráfica -python gui.py -``` +- Escribe código limpio y documentado +- Sigue las convenciones del proyecto -### Integración Continua (CI) +4. **Agrega tests** si aplica -Este proyecto usa **GitHub Actions** para ejecutar automáticamente las pruebas en cada push y pull request. El badge de estado al inicio del README muestra si las pruebas están pasando. + ```bash + # Ejecutar tests localmente + pytest -v + ``` -- ✅ **Verde**: Todas las pruebas pasan -- ❌ **Rojo**: Hay pruebas fallando +5. **Actualiza documentación** si es necesario -Para más detalles, revisa el archivo de configuración en `.github/workflows/ci.yml` + - README.md + - Docstrings en el código + - CHANGELOG.md (si es un cambio significativo) -## 👥 Contribuir +6. **Crea Pull Request** usando la plantilla de PR + + - Describe claramente los cambios + - Referencia el issue relacionado + - Agrega capturas de pantalla si hay cambios visuales + +7. **Espera code review** + - Responde a los comentarios + - Realiza los cambios solicitados +8. **Mergea** después de aprobación del equipo + +--- + +## 📦 Releases + +El proyecto sigue **[Versionamiento Semántico](https://semver.org/)**: + +### Versión Actual: **v2.0.0** 🎉 + +**Changelog completo:** -1. Asigna o crea un issue usando las plantillas proporcionadas - - Para bugs: usa la plantilla "reporte-error.md" - - Para nuevas funciones: usa la plantilla "funcion-calculadora.md" -2. Crea tu rama desde main -3. Implementa tu cambio -4. Agrega tests si aplica -5. Actualiza documentación -6. Crea Pull Request usando la plantilla de PR -7. Espera code review -8. Mergea después de aprobación +- [CHANGELOG.md](CHANGELOG.md) - Historial detallado de todos los cambios + +**Versiones disponibles:** + +- **v2.0.0** (2025-11-28) - Interfaz gráfica + Testing + CI/CD +- **v1.0.0** (2025-11-04) - Calculadora CLI básica + +--- + +## 🧪 Testing + +### Ejecutar Tests + +```bash +# Todos los tests +pytest -v + +# Tests específicos +pytest test_calculator.py -v +pytest test_gui_calculator.py -v + +# Con cobertura +pytest --cov=. --cov-report=html -v + +# Tests en modo verbose con detalles +pytest -vv +``` -### 📦 Releases +### Estructura de Tests -El proyecto sigue versionamiento semántico. Última versión estable: v1.0.0 +- **`test_calculator.py`**: Tests de lógica matemática +- **`test_gui_calculator.py`**: Tests de interfaz gráfica +- **`conftest.py`**: Fixtures y mocks de Tkinter -- Operaciones básicas: suma, resta, multiplicación, división, potencia -- Funciones adicionales: valor máximo, valor mínimo, valor absoluto -- Sistema de manejo de errores -- Interfaz de línea de comandos interactiva +--- ## 📞 Comunicación - **Issues**: Para reportar bugs o proponer features - **Pull Requests**: Para code reviews y discusión técnica - **Comentarios en código**: Para aclaraciones específicas +- **Discussions**: Para temas generales del proyecto + +--- -## 🔧 Comandos Útiles +## 🔧 Comandos Útiles de Git ```bash # Ver estado del repositorio git status # Ver historial de commits -git log --oneline +git log --oneline --graph -# Cambiar a rama main y actualizar -git checkout main && git pull +# Cambiar a rama dev y actualizar +git checkout dev && git pull origin dev -# Ver diferencias +# Ver diferencias antes de commit git diff # Agregar cambios y commitear -git add . && git commit -m "tu mensaje" +git add . +git commit -m "tipo(alcance): descripción" + +# Actualizar rama feature con cambios de dev +git checkout feature/mi-rama +git merge dev + +# Ver ramas locales y remotas +git branch -a + +# Eliminar rama local +git branch -d feature/mi-rama ``` -## 📚 Recursos de Aprendizaje +--- + +## 🎓 Recursos de Aprendizaje + +### Git y Flujo de Trabajo - [Git Flow Cheatsheet](https://danielkummer.github.io/git-flow-cheatsheet/) +- [Conventional Commits](https://www.conventionalcommits. org/) +- [GitHub Flow](https://docs.github.com/en/get-started/quickstart/github-flow) + +### Python + - [Python Style Guide (PEP 8)](https://pep8.org/) -- [Python Style Guide (PEP 12)](https://www.python.org/dev/peps/pep-0012/) -- [Conventional Commits](https://www.conventionalcommits.org/) +- [Python Docstring Conventions (PEP 257)](https://peps.python.org/pep-0257/) +- [Tkinter Documentation](https://docs.python.org/3/library/tkinter.html) + +### Testing + +- [Pytest Documentation](https://docs.pytest.org/) +- [Testing Best Practices](https://docs.pytest.org/en/stable/goodpractices.html) --- -**¡Happy coding y colaboración efectiva!** 🐍✨ +## 🚧 Próximas Características (v2.1.0) + +- [ ] Soporte de operaciones con paréntesis (#44) +- [ ] Fix: Manejo de números decimales negativos (#49) +- [ ] Fix: Raíces pares de números negativos (#50) +- [ ] Historial de operaciones +- [ ] Más funciones matemáticas (√, log, sin, cos, tan) +- [ ] Temas personalizables (claro/oscuro) +- [ ] Exportar historial de cálculos + +--- + +## 🙏 Agradecimientos + +Este proyecto fue desarrollado colaborativamente por: + +- **[@Jandres25](https://github.com/Jandres25)** - Coordinador, GUI, CI/CD, Testing +- **[@Jhos3ph](https://github.com/Jhos3ph)** - Funciones científicas, Lógica, Refactoring +- **[@alexricardotapiacarita-ai](https://github.com/alexricardotapiacarita-ai)** - Diseño GUI, Documentación + +--- + +## 📄 Licencia + +Este proyecto está bajo la Licencia MIT. Ver [LICENSE](LICENSE) para más detalles. + +--- + +## 📊 Estadísticas del Proyecto + +- **Lenguaje**: Python 3.12+ +- **Framework GUI**: Tkinter +- **Framework Testing**: Pytest +- **CI/CD**: GitHub Actions +- **Commits**: 60+ +- **Pull Requests**: 24+ +- **Issues Cerradas**: 15+ + +--- + +**¡Happy coding y colaboración efectiva! ** 🐍✨🚀 + +Para más información, consulta el [CHANGELOG.md](CHANGELOG.md) para ver el historial completo de cambios.