# Diagrama de estados para relacionar los escenarios con el código ## Distinciones - **Acción**: Interacción de un usuario, que dependiendo del estado del objeto puede o no generar un nuevo estado - **Condiciones de ejecución de la acción**: Son las condiciones que se aplican sobre las cacterísticas relevantes desde los cuales está permitido ejecutar una acción sobre un objeto - **Cacterísticas relevantes**: Atributos del objeto que generan estados diferentes (son condiciones de ejecución) y qué rangos tiene. - **Estado**: Conjunto de características relevantes de un objeto luego de aplicarle una acción -Ej: `Estado1: ['Usuario es invitado', 'el evento no esta confirmado', 'tiene subtarea', 'tiene owner', 'está en hoy']` - **Estados resultantes de una acción**: Descripción de los estados finales posibles al ejecutar una acción sobre un objeto, dependiendo de las características relevantes - **Escenario:** Secuencia de interacciones del usuario ## Características relevantes ### Evento - attendee - es un attendee? (sí - no) - en qué estado está? (notConfirmed - confirmed - completed - deleted) - Está el evento en la agenda? (sí - no) - completedDate - lo completó y sigue completado? (sí - no) - subtasksOrder: - Tiene subtareas (sí - no) - owner: - Tiene owner (sí - no) - Es el usuario actual (sí - no) - El owner pertenece a este servicio (sí - no) - dateLimit - dateLimit (antes de hoy - hoy - mañana - ?) - timeType - timeType (antes de hoy - hoy - mañana - esta semana - este mes - próximamente) - service - serviceName (google - outlook) - guestsCanModify - Los invitados pueden modificar (si - no) - RecurringId - Es evento recurrente? - ProjectId - A qué proyecto pertenece? ### Evento externo (no se almacena en el evento interno) - Status - El service.attendee es declined? - Servicio - serviceName ### Acción - now - Fecha actual ## Acciones disponibles 1. Cambiar de día (cron:changeEventData) 2. Confirmar asistencia 1. Condiciones de ejecución de la acción 1. Condición definida y dónde en el código se define la condición y sus consecuencias 3. Condiciones para generar los atributos modificados 1. Condición definida con atributos relevantes + lugar en el código de la condición y lugar en el código donde se implementa el cambio 4. Modificar subtareas 5. Asignar proyecto 12. LLega una actualización del servicio 1. Nuevo 2. Modificado 4. Cancelado ## ¿Cómo relacionamos estadoInicial->acción->estadoFinal con el código? 1. El nacho nos entrega un escenario con errores, ¿Qué código podría estar fallando? 2. ¿Si hago un cambio en el código, que debería revisar para asegurarme de que el sistema sigue funcionando como esperamos? 1. ¿Se modificó el valor de un atributo? 1. Ver todas las acciones que utilizan/modifica los atributos de la característica relevante que modifiqué 2. ¿Se modificó una condición? 1. ¿es una condición de ejecución? 2. ¿Es una condición para generar los atributos modificados? ### Respuesta 1. ## Ejemplo de diagrama de estado ```plantuml @startuml [*] --> State1 : El evento es creado en el servicio externo State1 --> [*] State2 --> [*] State1 : El userId sí es invitado State1 : El estado del userId es notConfirmed State1 : El evento está en agenda State1 : El evento no está completado State1 : No tiene subtareas State1 : No tiene owner State1 : dateLimit es mañana State1 : timeType es mañana State1 : Es de google State1 : los invitados no pueden modificarlo State1 -> State2: El usuario confirma el evento State2 : El userId sí es invitado State2 : El estado del userId es notConfirmed State2 : El evento está en agenda State2 : El evento no está completado State2 : No tiene subtareas State2 : No tiene owner State2 : dateLimit es mañana State2 : timeType es mañana State2 : Es de google State2 : los invitados no pueden modificarlo State2 --> State3 : Cambiamos de día State3 : El userId sí es invitado State3 : El estado del userId es notConfirmed State3 : El evento está en agenda State3 : El evento no está completado State3 : No tiene subtareas State3 : No tiene owner State3 : dateLimit es hoy State3 : timeType es hoy State3 : Es de google State3 : los invitados no pueden modificarlo @enduml ```