CobrosEnMetalicoTest.cs
1 using Microsoft.VisualStudio.TestTools.UnitTesting;
3 using sage.ew.global;
5 using sage.ew.interficies;
6 using Sage.ES.S50.UnitTest.Mock;
7 using Sage.ES.S50.UnitTest.Tools;
9 using System;
10 using System.Collections.Generic;
11 using System.Linq;
12 using System.Text;
13 using System.Threading.Tasks;
14 
15 namespace Sage.ES.S50.UnitTest.Contabilidad
16 {
20  [DeploymentItem(@"XML\CobrosEnMetalico\", @"XML\CobrosEnMetalico")]
21  [TestClass()]
22  [DoNotParallelize()]
23  public class CobrosEnMetalicoTest
24  {
25  #region PROPIEDADES PRIVADAS
26  private string _ejercicio = string.Empty;
27 
28  private String _NIF = string.Empty;
29  private decimal _importe = 0;
30  private decimal _trimestre1 = 0;
31  private decimal _trimestre2 = 0;
32  private decimal _trimestre3 = 0;
33  private decimal _trimestre4 = 0;
34  #endregion PROPIEDADES PRIVADAS
35 
36  #region TEST INITIALIZE/CLEANUP
37  [TestInitialize()]
41  public void MyTestInitialize()
42  {
43  _ejercicio = Convert.ToString(EW_GLOBAL._GetVariable("wc_any"));
44 
45  EW_GLOBAL._SetVariable("wc_any", "2023");
46  }
47 
51  [TestCleanup()]
52  public void MyTestCleanup()
53  {
54  EW_GLOBAL._SetVariable("wc_any", _ejercicio);
55  }
56  #endregion TEST INITIALIZE/CLEANUP
57 
58  #region TESTS COBROS EN METÁLICO
59  [Owner(Owners.Diego_Martinez),
63  TestMethod(),
64  Description("Cobro en metálico de una factura, con un único cliente de NIF B58836321 y un importe superior a 6.000€ (10.4000€)"),
65  DeploymentItem("sage.50.exe")]
66  [Priority(2)]
67  [TestCategory("Contabilidad")]
68  [DataRow("B58836321", 10400.00, 0.00, 0.00, 0.00, 10400.00)]
69  public void CobrosEnMetalicoUnClienteUnaFacturaSoloCobroEfectivoTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
70  {
72  string descripcionTest = "Cobro en metálico de una factura, con un único cliente de NIF B58836321 y un importe superior a 6.000€ (10.4000€)";
73  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
74 
76  // Instanciamos y realizamos la consulta de metálico
77  Metalico metalico = new Metalico();
78 
79  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
80  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoUnClienteUnaFacturaSoloCobroEfectivoTest)
81  metalico._Load(EjerciciosMetalico());
82 
84  // Validamos negocio de los cobros en metálico
85  AssertInformacionMetalico(metalico, descripcionTest);
86  AssertInformacionMetalicoItem(metalico, descripcionTest);
87  }
88 
92  [Owner(Owners.Diego_Martinez),
93  TestMethod(),
94  Description("Cobro en metálico de 2 facturas de (4.235€ y 4.235€), con un único cliente de NIF 43000005X y un importe superior a 6.000€ (8.470€)"),
95  DeploymentItem("sage.50.exe")]
96  [Priority(2)]
97  [TestCategory("Contabilidad")]
98  [DataRow("43000005X", 8470.00, 0.00, 8470.00, 0.00, 0.00)]
99  public void CobrosEnMetalicoUnClienteDosFacturasSoloCobroEfectivoTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
100  {
102  string descripcionTest = "Cobro en metálico de 2 facturas de (4.235€ y 4.235€), con un único cliente de NIF 43000005X y un importe superior a 6.000€ (8.470€)";
103  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
104 
106  // Instanciamos y realizamos la consulta de metálico
107  IMetalico metalico = new Metalico();
108 
109  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
110  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoUnClienteDosFacturasSoloCobroEfectivoTest)
111  metalico._Load(EjerciciosMetalico());
112 
114  // Validamos negocio de los cobros en metálico
115  AssertInformacionMetalico(metalico, descripcionTest);
116  AssertInformacionMetalicoItem(metalico, descripcionTest);
117  }
118 
126  [Owner(Owners.Diego_Martinez),
127  TestMethod(),
128  Description("Cobro en metálico donde tenemos el desglose guardado en la tabla MOD347M. Cobro de 2 facturas de clientes diferentes y en el asiento del cobro tenemos dos formas de cobros diferente"),
129  DeploymentItem("sage.ew.contabilidad.dll")]
130  [Priority(2)]
131  [TestCategory("Contabilidad")]
132  [DataRow("43000006B", 31200.00, 0.00, 0.00, 0.00, 31200.00)]
133  public void CobrosEnMetalicoDosClientesDosFormasCobroConDesgloseEfectivoTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
134  {
136  string descripcionTest = "Cobro en metálico donde tenemos el desglose guardado en la tabla MOD347M. Cobro de 2 facturas de clientes diferentes y en el asiento del cobro tenemos dos formas de cobros diferente";
137  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
138 
140  // Instanciamos y realizamos la consulta de metálico
141  IMetalico metalico = new Metalico();
142 
143  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
144  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoDosClientesDosFormasCobroConDesgloseEfectivoTest)
145  metalico._Load(EjerciciosMetalico());
146 
148  // Validamos negocio de los cobros en metálico
149  AssertInformacionMetalico(metalico, descripcionTest);
150  AssertInformacionMetalicoItem(metalico, descripcionTest);
151  }
152 
160  [Owner(Owners.Diego_Martinez),
161  TestMethod(),
162  Description("Cobro en metálico donde NO tenemos el desglose guardado en la tabla MOD347M. Cobro de 2 facturas de clientes diferentes y en el asiento del cobro tenemos dos formas de cobros diferente"),
163  DeploymentItem("sage.ew.contabilidad.dll")]
164  [Priority(2)]
165  [TestCategory("Contabilidad")]
166  [DataRow("43000006B", 31200.00, 0.00, 0.00, 0.00, 31200.00)]
167  public void CobrosEnMetalicoDosClientesDosFormasCobroSinDesgloseEfectivoTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
168  {
170  string descripcionTest = "Cobro en metálico donde NO tenemos el desglose guardado en la tabla MOD347M. Cobro de 2 facturas de clientes diferentes y en el asiento del cobro tenemos dos formas de cobros diferente";
171  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
172 
174  // Instanciamos y realizamos la consulta de metálico
175  IMetalico metalico = new Metalico();
176 
177  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
178  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoDosClientesDosFormasCobroConDesgloseEfectivoTest)
179  metalico._Load(EjerciciosMetalico());
180 
182  // Validamos negocio de los cobros en metálico
183  AssertInformacionMetalicoSinRegistroItem(metalico, descripcionTest);
184  }
185 
193  [Owner(Owners.Diego_Martinez),
194  TestMethod(),
195  Description("Cobro en metálico para validar los clientes facturas o clientes con el mismo NIF (Cliente factura)"),
196  DeploymentItem("sage.ew.contabilidad.dll")]
197  [Priority(2)]
198  [TestCategory("Contabilidad")]
199  [DataRow("43000104V", 7200.00, 0.00, 0.00, 0.00, 7200.00)]
200  public void CobrosEnMetalicoDosClientesConClienteFacturaTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
201  {
203  string descripcionTest = "Cobro en metálico para validar los clientes facturas o clientes con el mismo NIF (Cliente factura)";
204  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
205 
207  // Instanciamos y realizamos la consulta de metálico
208  IMetalico metalico = new Metalico();
209 
210  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
211  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoDosClientesConClienteFacturaTest)
212  metalico._Load(EjerciciosMetalico());
213 
215  // Validamos negocio de los cobros en metálico
216  AssertInformacionMetalico(metalico, descripcionTest);
217  AssertInformacionMetalicoItem(metalico, descripcionTest);
218  }
219 
228  [Owner(Owners.Diego_Martinez),
229  TestMethod(),
230  Description("Cobro en metálico de 3 clientes diferentes con el mismo NIF (No está guardado de la misma forma)"),
231  DeploymentItem("sage.ew.contabilidad.dll")]
232  [Priority(2)]
233  [TestCategory("Contabilidad")]
234  [DataRow("43000106L", 7384.00, 1560.00, 2496.00, 3328.00, 0.00)]
235  public void CobrosEnMetalicoTresClientesConMismoNIFTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
236  {
238  string descripcionTest = "Cobro en metálico de 3 clientes diferentes con el mismo NIF (No está guardado de la misma forma)";
239  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
240 
242  // Instanciamos y realizamos la consulta de metálico
243  IMetalico metalico = new Metalico();
244 
245  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
246  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoTresClientesConMismoNIFTest)
247  metalico._Load(EjerciciosMetalico());
248 
250  // Validamos negocio de los cobros en metálico
251  AssertInformacionMetalico(metalico, descripcionTest);
252  AssertInformacionMetalicoItem(metalico, descripcionTest);
253  }
254 
261  [Owner(Owners.Diego_Martinez),
262  TestMethod(),
263  Description("Cobro en metálico IVA Europeo - Operaciones en el Régimen de la Unión - OSS servicio sujeto"),
264  DeploymentItem("sage.ew.contabilidad.dll")]
265  [Priority(2)]
266  [TestCategory("Contabilidad")]
267  [DataRow("FR54515379444", 12100.00, 0.00, 0.00, 0.00, 12100.00)]
268  public void CobrosEnMetalicoIVAEuropeoOSSServicioSujetoTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
269  {
271  string descripcionTest = "Cobro en metálico IVA Europeo - Operaciones en el Régimen de la Unión - OSS servicio sujeto";
272  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
273 
275  // Instanciamos y realizamos la consulta de metálico
276  IMetalico metalico = new Metalico();
277 
278  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
279  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoIVAEuropeoOSSServicioSujetoTest)
280  metalico._Load(EjerciciosMetalico());
281 
283  // Validamos negocio de los cobros en metálico
284  AssertInformacionMetalico(metalico, descripcionTest);
285  AssertInformacionMetalicoItem(metalico, descripcionTest);
286  }
287 
292  [Owner(Owners.Diego_Martinez),
293  TestMethod(),
294  Description("Cobro en metálico de un factura de suplidos"),
295  DeploymentItem("sage.ew.contabilidad.dll")]
296  [Priority(2)]
297  [TestCategory("Contabilidad")]
298  [DataRow("43091030R", 40000.00, 0.00, 0.00, 0.00, 40000.00)]
299  public void CobrosEnMetalicoFacturaConSuplidosTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
300  {
302  string descripcionTest = "Cobro en metálico de un factura de suplidos";
303  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
304 
306  // Instanciamos y realizamos la consulta de metálico
307  IMetalico metalico = new Metalico();
308 
309  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
310  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoFacturaConSuplidosTest)
311  metalico._Load(EjerciciosMetalico());
312 
314  // Validamos negocio de los cobros en metálico
315  AssertInformacionMetalicoSinRegistroItem(metalico, descripcionTest);
316  }
317 
328  [Owner(Owners.Diego_Martinez),
329  TestMethod(),
330  Description("Cobros en metálico de un factura realizada en el ejercicio 2022 (Con cobros en el 2023)"),
331  DeploymentItem("sage.ew.contabilidad.dll")]
332  [Priority(2)]
333  [TestCategory("Contabilidad")]
334  [DataRow("43000100J", 11000.00, 0.00, 0.00, 0.00, 11000.00)]
335  public void CobrosEnMetalicoFacturaEjercicioAnteriorConCobroEnActualTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
336  {
338  string descripcionTest = "Cobros en metálico de un factura realizada en el ejercicio 2022 (Con cobros en el 2023)";
339  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
340 
342  // Instanciamos y realizamos la consulta de metálico
343  IMetalico metalico = new Metalico();
344 
345  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
346  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoFacturaEjercicioAnteriorConCobroEnActualTest)
347  metalico._Load(EjerciciosMetalico());
348 
350  // Validamos negocio de los cobros en metálico
351  AssertInformacionMetalico(metalico, descripcionTest);
352  AssertInformacionMetalicoItem(metalico, descripcionTest);
353  }
354 
364  [Owner(Owners.Diego_Martinez),
365  TestMethod(),
366  Description("Cobros en metálico de un factura realizada en el ejercicio 2022 (Sin cobros en el 2023)"),
367  DeploymentItem("sage.ew.contabilidad.dll")]
368  [Priority(2)]
369  [TestCategory("Contabilidad")]
370  [DataRow("43000100J", 0.00, 0.00, 0.00, 0.00, 0.00)]
371  public void CobrosEnMetalicoFacturaEjercicioAnteriorSinCobroEnActualTest(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
372  {
374  string descripcionTest = "Cobros en metálico de un factura realizada en el ejercicio 2022 (Sin cobros en el 2023)";
375  Arrange(nif, importe, trimestre1, trimestre2, trimestre3, trimestre4);
376 
378  // Instanciamos y realizamos la consulta de metálico
379  IMetalico metalico = new Metalico();
380 
381  // Realizamos el Load que internamente cargará los datos de los XML's que hayamos definido en la carpeta XML
382  // del proyecto Sage.ES.S50.UnitTest.Mock con el mismo nombre que este método de Test (CobrosEnMetalicoFacturaEjercicioAnteriorSinCobroEnActualTest)
383  metalico._Load(EjerciciosMetalico());
384 
386  // Validamos negocio de los cobros en metálico
387  AssertInformacionMetalicoSinRegistroItem(metalico, descripcionTest);
388  }
389 
390  #endregion TESTS COBROS EN METÁLICO
391 
392  #region MÉTODOS PRIVADOS
393  private void RegisterTypes()
399  {
401  }
402 
414  private void Arrange(string nif, double importe, double trimestre1, double trimestre2, double trimestre3, double trimestre4)
415  {
416  _NIF = nif;
417  _importe = Convert.ToDecimal(importe);
418  _trimestre1 = Convert.ToDecimal(trimestre1);
419  _trimestre2 = Convert.ToDecimal(trimestre2);
420  _trimestre3 = Convert.ToDecimal(trimestre3);
421  _trimestre4 = Convert.ToDecimal(trimestre4);
422 
423  RegisterTypes();
424  }
425 
430  private string[] EjerciciosMetalico()
431  {
432  string[] lcEjercicios = new string[] { };
433 
434  lcEjercicios = new string[1];
435  lcEjercicios[0] = Convert.ToString(EW_GLOBAL._GetVariable("wc_any"));
436 
437  return lcEjercicios;
438  }
439 
445  private void AssertInformacionMetalico(IMetalico metalico, string descripcionTest)
446  {
447  Assert.IsNotNull(metalico, $"No se ha podido inicializar la clase para consultar los cobros en metálico. {descripcionTest}");
448  Assert.IsTrue(metalico._CobrosEnMetalico.Count > 0, $"No hay información de cobros en metálico. {descripcionTest}");
449  }
450 
456  private void AssertInformacionMetalicoItem(IMetalico metalico, string descripcionTest)
457  {
458  List<ICobroEnMetalico> lstMetalico = metalico._CobrosEnMetalico;
459  ICobroEnMetalico cobroEnMetalico = lstMetalico.FirstOrDefault();
460 
461  Assert.IsTrue(cobroEnMetalico._NIF == _NIF, $"El NIF del cliente es {cobroEnMetalico._NIF} cuando se esperaba el NIF {_NIF}.");
462  Assert.IsTrue(cobroEnMetalico._Importe == _importe, $"El importe total de cobros en metálico es de {cobroEnMetalico._Importe} cuando se esperaba un importe de {_importe}. {descripcionTest}");
463  Assert.IsTrue(cobroEnMetalico._Trimestre1 == _trimestre1, $"El importe de cobros en metálico del 'Trimestre 1' es de {cobroEnMetalico._Trimestre1} cuando se esperaba un importe de {_trimestre1}. {descripcionTest}");
464  Assert.IsTrue(cobroEnMetalico._Trimestre2 == _trimestre2, $"El importe de cobros en metálico del 'Trimestre 2' es de {cobroEnMetalico._Trimestre2} cuando se esperaba un importe de {_trimestre2}. {descripcionTest}");
465  Assert.IsTrue(cobroEnMetalico._Trimestre3 == _trimestre3, $"El importe de cobros en metálico del 'Trimestre 3' es de {cobroEnMetalico._Trimestre3} cuando se esperaba un importe de {_trimestre3}. {descripcionTest}");
466  Assert.IsTrue(cobroEnMetalico._Trimestre4 == _trimestre4, $"El importe de cobros en metálico del 'Trimestre 4' es de {cobroEnMetalico._Trimestre4} cuando se esperaba un importe de {_trimestre4}. {descripcionTest}");
467  }
468 
474  private void AssertInformacionMetalicoSinRegistroItem(IMetalico metalico, string descripcionTest)
475  {
476  Assert.IsNotNull(metalico, $"No se ha podido inicializar la clase para consultar los cobros en metálico. {descripcionTest}");
477 
478  // Primero realizamos esta validación
479  // List<ICobroEnMetalico> lstMetalico = metalico._CobrosEnMetalico;
480  List<ICobroEnMetalico> lstMetalico = metalico._CobrosEnMetalico.AsEnumerable().Where(m => m._NIF == _NIF).ToList<ICobroEnMetalico>();
481 
482  Assert.IsTrue(lstMetalico.Count == 0, $"No se esperaba ningún registro con el NIF {_NIF}.");
483 
484  // Validamos adicionalmente que no tengamos otro cliente
485  Assert.IsTrue(metalico._CobrosEnMetalico.Count == 0, $"No se esperaba ningun registro cobros en metálico. {descripcionTest}");
486  }
487  #endregion MÉTODOS PRIVADOS
488  }
489 }
490 
List< ICobroEnMetalico > _CobrosEnMetalico
Lista de los cobros en metálico
Definition: IMetalico.cs:29
Interfaz de acceso datos de los cobros en metálico
bool _Load(string[] tcEjerciciosConsulta=null)
Load del metálico
decimal _Importe
Importe en metálico
Clase de acceso datos de los cobros en metálico
Interfaz para la consulta de cobros en metálico
Definition: IMetalico.cs:13
Interfaz para el importe de los cobros en metálico
decimal _Trimestre2
Importe en metálico del trimestre 2
decimal _Trimestre4
Importe en metálico del trimestre 4
bool _Load(string[] tcEjerciciosConsulta=null)
Load del metálico
Definition: Metalico.cs:323
Clase para la consulta de cobros en metálico
Definition: Metalico.cs:23
void Register(Type I, Type T, params InjectionMember[] injectionMember)
Regista tipo
decimal _Trimestre3
Importe en metálico del trimestre 3
decimal _Trimestre1
Importe en metálico del trimestre 1
Clase Inyector de dependencias para resolver las dependencias