diff --git a/src/pages/Customer/components/RiskEvaluation.vue b/src/pages/Customer/components/RiskEvaluation.vue new file mode 100644 index 000000000..98401023e --- /dev/null +++ b/src/pages/Customer/components/RiskEvaluation.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/test/cypress/integration/client/components/RiskEvaluator.spec.js b/test/cypress/integration/client/components/RiskEvaluator.spec.js new file mode 100644 index 000000000..34ab8aef7 --- /dev/null +++ b/test/cypress/integration/client/components/RiskEvaluator.spec.js @@ -0,0 +1,35 @@ +describe('RiskEvaluator Component', () => { + beforeEach(() => { + cy.visit('/'); // Asegúrate de que esta ruta carga el componente RiskEvaluator + }); + + it('muestra margen predeterminado para cliente no francés con crédito = 0', () => { + cy.get('[label="Crédito Asignado (€)"]').clear().type('0'); + cy.get('[label="Riesgo (€)"]').clear().type('100'); + cy.get('[label="Sumatorio Pedidos del Día (€)"]').clear().type('50'); + cy.get('.q-badge').should('contain', 'Riesgo Naranja'); + }); + + it('muestra margen de 500€ para cliente francés con crédito = 0', () => { + cy.get('[label="Crédito Asignado (€)"]').clear().type('0'); + cy.get('[label="Riesgo (€)"]').clear().type('100'); + cy.get('[label="Sumatorio Pedidos del Día (€)"]').clear().type('50'); + cy.get('[type="checkbox"]').check(); // Toggle cliente francés + cy.get('.q-badge').should('contain', 'Riesgo Naranja'); + }); + + it('muestra "Riesgo Rojo" si riesgo excede margen y pedidos del día', () => { + cy.get('[label="Crédito Asignado (€)"]').clear().type('0'); + cy.get('[label="Riesgo (€)"]').clear().type('300'); + cy.get('[label="Sumatorio Pedidos del Día (€)"]').clear().type('200'); + cy.get('.q-badge').should('contain', 'Riesgo Rojo'); + }); + + it('calcula margen dinámicamente para cliente francés con crédito > 5000€', () => { + cy.get('[label="Crédito Asignado (€)"]').clear().type('6000'); + cy.get('[type="checkbox"]').check(); // Toggle cliente francés + cy.get('[label="Riesgo (€)"]').clear().type('6500'); + cy.get('[label="Sumatorio Pedidos del Día (€)"]').clear().type('7000'); + cy.get('.q-badge').should('contain', 'Riesgo Naranja'); + }); +}); diff --git a/test/vitest/__tests__/pages/Customer/RiskEvaluator.spec.js b/test/vitest/__tests__/pages/Customer/RiskEvaluator.spec.js new file mode 100644 index 000000000..9a26948ed --- /dev/null +++ b/test/vitest/__tests__/pages/Customer/RiskEvaluator.spec.js @@ -0,0 +1,70 @@ +import { describe, it, expect } from 'vitest'; +import { computed, ref } from 'vue'; + +// Simulación de la lógica del componente +const createTestLogic = ( + creditoValue, + riesgoValue, + sumatorioPedidosValue, + esClienteFrancesValue +) => { + const credito = ref(creditoValue); + const riesgo = ref(riesgoValue); + const sumatorioPedidos = ref(sumatorioPedidosValue); + const esClienteFrances = ref(esClienteFrancesValue); + + const margen = computed(() => { + if (credito.value === 0) return esClienteFrances.value ? 500 : 200; + if (esClienteFrances.value) { + return credito.value > 5000 ? credito.value * 0.1 : 500; + } + return credito.value > 2000 ? credito.value * 0.1 : 200; + }); + + const resultado = computed(() => { + const margenActual = margen.value; + + if ( + riesgo.value > 0 && + riesgo.value < margenActual && + riesgo.value < sumatorioPedidos.value + ) { + return 'Riesgo Naranja'; + } + + if (riesgo.value >= margenActual || riesgo.value >= sumatorioPedidos.value) { + return 'Riesgo Rojo'; + } + + return 'Condiciones No Cumplen'; + }); + + return { margen, resultado }; +}; + +describe('RiskEvaluator Logic', () => { + it('debe calcular margen correctamente para crédito = 0, cliente no francés', () => { + const { margen } = createTestLogic(0, 100, 50, false); + expect(margen.value).toBe(200); + }); + + it('debe calcular margen correctamente para crédito = 0, cliente francés', () => { + const { margen } = createTestLogic(0, 100, 50, true); + expect(margen.value).toBe(500); + }); + + it('debe retornar "Riesgo Naranja" bajo condiciones válidas', () => { + const { resultado } = createTestLogic(0, 100, 200, false); + expect(resultado.value).toBe('Riesgo Naranja'); + }); + + it('debe retornar "Riesgo Rojo" si riesgo excede el margen', () => { + const { resultado } = createTestLogic(0, 300, 200, false); + expect(resultado.value).toBe('Riesgo Rojo'); + }); + + it('debe manejar correctamente el margen para créditos altos (cliente francés)', () => { + const { margen } = createTestLogic(6000, 0, 0, true); + expect(margen.value).toBe(600); + }); +});