public void ActualizarJornada(
            [Greedy]Jornada jornada)
        {
            var database = new Database(DatabaseHelper.Database);
            var sut = new PetaPocoJornadaCommands(database);

            sut.CrearJornada(jornada, DatabaseHelper.Usuario);

            var jornadaDbRow = database.FirstOrDefault<JornadaDbRow>(
                "Select * from Jornadas where IdJornada = @0", jornada.Id);

            jornadaDbRow.Should().NotBeNull();

            // Modificamos
            var nuevaPausa = new Pausa(jornada.Fin.Value, jornada.Fin.Value.AddHours(2));
            var idJornada = jornada.Id;
            jornada = new Jornada(
                jornada.Inicio,
                jornada.Fin.Value.AddDays(1),
                jornada.Pausas.Skip(1).Union(new[] { nuevaPausa }).ToArray());
            jornada.Id = idJornada;

            sut.ActualizarJornada(jornada, DatabaseHelper.Usuario);

            jornadaDbRow = database.FirstOrDefault<JornadaDbRow>(
                "Select * from Jornadas where IdJornada = @0", jornada.Id);

            jornadaDbRow.Should().NotBeNull();

            database.Execute("DELETE FROM Pausas WHERE IdJornada = @0", jornada.Id);
            database.Execute("DELETE FROM Jornadas WHERE IdJornada = @0", jornada.Id);
        }
예제 #2
0
        public void UnaJornadaIniciadaConUltimaPausaIniciadaTienePausaIniciada()
        {
            var fixture = new Fixture();
            var inicioJornada = fixture.CreateAnonymous<DateTime>();
            var inicioPausa = fixture.CreateAnonymous<DateTime>();
            var pausa = new Pausa(inicioPausa);

            var sut = new Jornada(inicioJornada, pausa);

            sut.PausaIniciada.Should().NotBeNull();
        }
예제 #3
0
        public void NoSePuedeCrearJornadaIniciadaConPausasAnterioresAFechaInicio()
        {
            var fixture = new Fixture();
            var inicioPausa = fixture.CreateAnonymous<DateTime>();
            var finPausa = fixture.CreateAnonymous<DateTime>();
            var inicioJornada = fixture.CreateAnonymous<DateTime>();
            var pausa = new Pausa(inicioPausa, finPausa);

            Assert.Throws<InvalidOperationException>(
                () => new Jornada(inicioJornada, pausa));
        }
예제 #4
0
        public void NoSePuedeCrearJornadaTerminadaConPausasFueraDeLasFechasDeLaJornada3()
        {
            var fixture = new Fixture();
            var inicioPausa = fixture.CreateAnonymous<DateTime>();
            var inicioJornada = fixture.CreateAnonymous<DateTime>();
            var finJornada = fixture.CreateAnonymous<DateTime>();
            var finPausa = fixture.CreateAnonymous<DateTime>();
            var pausa = new Pausa(inicioPausa, finPausa);

            Assert.Throws<InvalidOperationException>(
                () => new Jornada(inicioJornada, finJornada, pausa));
        }
예제 #5
0
        public void UnaJornadaNoTerminadaNoPuedeIniciarPausaSiYaHayUnaPausaIniciada()
        {
            var fixture = new Fixture();
            var inicioJornada = fixture.CreateAnonymous<DateTime>();
            var inicioPausa1 = fixture.CreateAnonymous<DateTime>();
            var inicioPausa2 = fixture.CreateAnonymous<DateTime>();
            var pausa = new Pausa(inicioPausa1);

            var sut = new Jornada(inicioJornada, pausa);
            sut.PausaIniciada.Should().NotBeNull();

            Assert.Throws<InvalidOperationException>(
                () => sut.IniciarPausa(inicioPausa2));
        }
예제 #6
0
        public void UnaJornadaNoTerminadaConUnaOausaIniciadaNoSePuedeTerminar()
        {
            var fixture = new Fixture();
            var inicioJornada = fixture.CreateAnonymous<DateTime>();
            var inicioPausa = fixture.CreateAnonymous<DateTime>();
            var finJornada = fixture.CreateAnonymous<DateTime>();
            var pausa = new Pausa(inicioPausa);

            var sut = new Jornada(inicioJornada, pausa);

            Assert.Throws<InvalidOperationException>(
                () => sut.Finalizar(finJornada));
        }
예제 #7
0
        public void UnaJornadaNoTerminadaConPausasTerminadasSePuedeTerminar()
        {
            var fixture = new Fixture();
            var inicioJornada = fixture.CreateAnonymous<DateTime>();
            var inicioPausa = fixture.CreateAnonymous<DateTime>();
            var finPausa = fixture.CreateAnonymous<DateTime>();
            var finJornada = fixture.CreateAnonymous<DateTime>();
            var pausa = new Pausa(inicioPausa, finPausa);

            var sut = new Jornada(inicioJornada, pausa);

            sut.Finalizar(finJornada);

            sut.EstaIniciado.Should().BeFalse();
        }
예제 #8
0
        public void UnaJornadaNoTerminadaConPausaIniciadaPuedeTerminarUnaPausa()
        {
            var fixture = new Fixture();
            var inicioJornada = fixture.CreateAnonymous<DateTime>();
            var inicioPausa = fixture.CreateAnonymous<DateTime>();
            var finPausa = fixture.CreateAnonymous<DateTime>();
            var pausa = new Pausa(inicioPausa);

            var sut = new Jornada(inicioJornada, pausa);
            sut.PausaIniciada.Should().NotBeNull();

            sut.TerminarPausa(finPausa);

            sut.PausaIniciada.Should().BeNull();
        }
예제 #9
0
        public void UnaJornadaNoTerminadaConPausaIniciadaNoPuedeTerminarPausaAntesDelInicioDeLaPausa()
        {
            var fixture = new Fixture();
            var inicioJornada = fixture.CreateAnonymous<DateTime>();
            var finPausa = fixture.CreateAnonymous<DateTime>();
            var inicioPausa = fixture.CreateAnonymous<DateTime>();
            var pausa = new Pausa(inicioPausa);

            var sut = new Jornada(inicioJornada, pausa);
            sut.PausaIniciada.Should().NotBeNull();

            Assert.Throws<InvalidOperationException>(
                () => sut.TerminarPausa(finPausa));
        }
예제 #10
0
        public void IniciarPausa(DateTime inicioPausa)
        {
            if (this.EstaIniciado == false)
            {
                throw new InvalidOperationException("No se puede iniciar una pausa en una Jornada finalizada.");
            }

            if (this.PausaIniciada != null)
            {
                throw new InvalidOperationException("No se puede iniciar una pausa cuando ya hay una pausa iniciada.");
            }

            if (inicioPausa < this.Inicio)
            {
                throw new InvalidOperationException("No se puede iniciar una pausa en una fecha anterior al inicio de la jornada.");
            }

            var pausa = new Pausa(inicioPausa);
            this.pausas.Add(pausa);
        }