public void NoSePuedeTerminarJornadaSiLaUltimaJornadaEstaTerminada(
            [Frozen]Mock<IJornadaQueries> queriesMock,
            [Frozen]Mock<IJornadaCommands> commandsMock,
            [Frozen]Mock<ITimeProvider> timeProviderMock,
            JornadaService sut,
            Jornada jornada,
            DateTime finJornada,
            string usuario)
        {
            jornada.Finalizar(finJornada);
            queriesMock.Setup(q => q.ObtenerUltimaJornada(usuario)).Returns(jornada);
            timeProviderMock.Setup(t => t.Now).Returns(jornada.Inicio.AddHours(8));

            Action accion = () => sut.TerminarJornada(usuario);

            accion.ShouldThrow<InvalidOperationException>()
                .WithMessage("No se puede terminar un periodo ya terminado.");
            commandsMock.Verify(c => c.ActualizarJornada(jornada, usuario), Times.Never());
        }
        public void SePuedeTerminarJornadaEnCondicionesCorrectas(
            [Frozen]Mock<IJornadaQueries> queriesMock,
            [Frozen]Mock<IJornadaCommands> commandsMock,
            [Frozen]Mock<ITimeProvider> timeProviderMock,
            JornadaService sut,
            Jornada jornada,
            string usuario)
        {
            queriesMock.Setup(q => q.ObtenerUltimaJornada(usuario)).Returns(jornada);
            timeProviderMock.Setup(t => t.Now).Returns(jornada.Inicio.AddHours(8));

            sut.TerminarJornada(usuario);

            commandsMock.Verify(c => c.ActualizarJornada(jornada, usuario), Times.Once());
        }
        public void NoSePuedeTerminarJornadaConFechaFinMenorQueFechaInicio(
            [Frozen]Mock<IJornadaQueries> queriesMock,
            [Frozen]Mock<IJornadaCommands> commandsMock,
            [Frozen]Mock<ITimeProvider> timeProviderMock,
            JornadaService sut,
            Jornada jornada,
            string usuario)
        {
            queriesMock.Setup(q => q.ObtenerUltimaJornada(usuario)).Returns(jornada);
            timeProviderMock.Setup(t => t.Now).Returns(jornada.Inicio.AddHours(-1));

            Action accion = () => sut.TerminarJornada(usuario);

            accion.ShouldThrow<InvalidOperationException>()
                .WithMessage("La fecha de finalización debe ser posterior a la fecha de inicio.");
            commandsMock.Verify(c => c.ActualizarJornada(jornada, usuario), Times.Never());
        }