public void Create_PersistenceRegistryNull_ThrowsArgumentNullException()
        {
            // Setup
            var calculation = new DuneLocationCalculation(new TestDuneLocation());

            // Call
            TestDelegate call = () => calculation.Create(null);

            // Assert
            var exception = Assert.Throws <ArgumentNullException>(call);

            Assert.AreEqual("registry", exception.ParamName);
        }
        public void Create_CalculationWithoutOutput_ReturnsDuneLocationCalculationEntity()
        {
            // Setup
            var duneLocation = new TestDuneLocation();
            var calculation  = new DuneLocationCalculation(duneLocation);

            var registry           = new PersistenceRegistry();
            var duneLocationEntity = new DuneLocationEntity();

            registry.Register(duneLocationEntity, duneLocation);

            // Call
            DuneLocationCalculationEntity entity = calculation.Create(registry);

            // Assert
            Assert.IsNotNull(entity);
            CollectionAssert.IsEmpty(entity.DuneLocationCalculationOutputEntities);
        }
        public void Create_CalculationWithAlreadyRegisteredDuneLocation_ReturnsEntityWithDuneLocationEntity()
        {
            // Setup
            var duneLocation = new TestDuneLocation();
            var calculation  = new DuneLocationCalculation(duneLocation);

            var registry           = new PersistenceRegistry();
            var duneLocationEntity = new DuneLocationEntity();

            registry.Register(duneLocationEntity, duneLocation);

            // Call
            DuneLocationCalculationEntity entity = calculation.Create(registry);

            // Assert
            Assert.IsNotNull(entity);
            Assert.AreSame(duneLocationEntity, entity.DuneLocationEntity);
        }
        public void Create_CalculationWithOutput_ReturnsDuneLocationCalculationEntityWithOutput()
        {
            // Setup
            var random = new Random(21);
            var output = new DuneLocationCalculationOutput(random.NextEnumValue <CalculationConvergence>(), new DuneLocationCalculationOutput.ConstructionProperties
            {
                WaterLevel            = random.NextDouble(),
                WaveHeight            = random.NextDouble(),
                WavePeriod            = random.NextDouble(),
                CalculatedProbability = random.NextDouble(),
                CalculatedReliability = random.NextDouble(),
                TargetProbability     = random.NextDouble(),
                TargetReliability     = random.NextDouble()
            });

            var duneLocation = new TestDuneLocation();
            var calculation  = new DuneLocationCalculation(duneLocation)
            {
                Output = output
            };

            var registry           = new PersistenceRegistry();
            var duneLocationEntity = new DuneLocationEntity();

            registry.Register(duneLocationEntity, duneLocation);

            // Call
            DuneLocationCalculationEntity entity = calculation.Create(registry);

            // Assert
            Assert.IsNotNull(entity);

            DuneLocationCalculationOutputEntity outputEntity = entity.DuneLocationCalculationOutputEntities.Single();

            Assert.AreEqual(output.WaterLevel, outputEntity.WaterLevel, output.WaterLevel.GetAccuracy());
            Assert.AreEqual(output.WaveHeight, outputEntity.WaveHeight, output.WaveHeight.GetAccuracy());
            Assert.AreEqual(output.WavePeriod, outputEntity.WavePeriod, output.WavePeriod.GetAccuracy());
            Assert.AreEqual(output.TargetProbability, outputEntity.TargetProbability);
            Assert.AreEqual(output.TargetReliability, outputEntity.TargetReliability, output.TargetReliability.GetAccuracy());
            Assert.AreEqual(output.CalculatedProbability, outputEntity.CalculatedProbability);
            Assert.AreEqual(output.CalculatedReliability, outputEntity.CalculatedReliability, output.CalculatedReliability.GetAccuracy());
            Assert.AreEqual(Convert.ToByte(output.CalculationConvergence), outputEntity.CalculationConvergence);
        }