public async Task PilotRegistrationStorageCmdInteractor_RegisterSinglePilotForContestAsync_BadRegistrationParameter()
        {
            PilotRegistration pilotRegistration = GenerateValidPilotRegistration(1).First();

            pilotRegistration.ContestId = string.Empty;
            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>())).Returns(Task.FromResult(new Result <PilotRegistration>(pilotRegistration)));
            var prci   = new PilotRegistrationStorageCmdInteractor(mockPilotRegistrationRepository.Object, mockLogger.Object);
            var result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            // Invalid Contest Id should fail
            Assert.IsTrue(result.IsFaulted);

            pilotRegistration.ContestId = null;
            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>())).Returns(Task.FromResult(new Result <PilotRegistration>(pilotRegistration)));
            prci   = new PilotRegistrationStorageCmdInteractor(mockPilotRegistrationRepository.Object, mockLogger.Object);
            result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            // Null Contest Id should fail
            Assert.IsTrue(result.IsFaulted);

            pilotRegistration.ContestId          = "1";
            pilotRegistration.AirframesSignedOff = false;
            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>())).Returns(Task.FromResult(new Result <PilotRegistration>(pilotRegistration)));
            result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            // It should be ok to register a pilot w/ a failed airframe sign-off
            Assert.IsFalse(result.IsFaulted);

            pilotRegistration.AirframesSignedOff          = true;
            pilotRegistration.AirframeRegistrationNumbers = null;
            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>())).Returns(Task.FromResult(new Result <PilotRegistration>(pilotRegistration)));
            result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            // It should be ok to not have any airframes registered
            Assert.IsFalse(result.IsFaulted);

            pilotRegistration.AirframeRegistrationNumbers = new List <string> {
                "1", "2"
            };
            pilotRegistration.IsPaid = false;
            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>())).Returns(Task.FromResult(new Result <PilotRegistration>(pilotRegistration)));
            result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            // It should be ok to have a pilot register that is not paid
            Assert.IsFalse(result.IsFaulted);

            pilotRegistration.PilotId = string.Empty;
            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>())).Returns(Task.FromResult(new Result <PilotRegistration>(pilotRegistration)));
            result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            // Empty Pilot ID should fail.
            Assert.IsTrue(result.IsFaulted);

            pilotRegistration.PilotId = null;
            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>())).Returns(Task.FromResult(new Result <PilotRegistration>(pilotRegistration)));
            result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            // Null Pilot ID should fail.
            Assert.IsTrue(result.IsFaulted);
        }
        public async Task PilotRegistrationStorageCmdInteractor_RegisterSinglePilotForContestAsync_NullParameter()
        {
            var prci   = new PilotRegistrationStorageCmdInteractor(mockPilotRegistrationRepository.Object, mockLogger.Object);
            var result = await prci.RegisterSinglePilotForContestAsync(null);

            Assert.IsTrue(result.IsFaulted);
        }
        public async Task PilotRegistrationStorageCmdInteractor_RegisterSinglePilotForContestAsync_RepositoryException()
        {
            PilotRegistration pilotRegistration = GenerateValidPilotRegistration(1).First();

            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>())).ThrowsAsync(new Exception());
            var prci   = new PilotRegistrationStorageCmdInteractor(mockPilotRegistrationRepository.Object, mockLogger.Object);
            var result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            Assert.IsTrue(result.IsFaulted);
        }
        public async Task PilotRegistrationStorageCmdInteractor_RegisterSinglePilotForContestAsync_HappyPath()
        {
            var pilotRegistration = GenerateValidPilotRegistration(1).First();

            mockPilotRegistrationRepository.Setup(prr => prr.CreateAsync(It.IsAny <PilotRegistration>()))
            .Returns(Task.FromResult(new Result <PilotRegistration>(pilotRegistration)));

            var prci   = new PilotRegistrationStorageCmdInteractor(mockPilotRegistrationRepository.Object, mockLogger.Object);
            var result = await prci.RegisterSinglePilotForContestAsync(pilotRegistration);

            Assert.IsFalse(result.IsFaulted);
            Assert.IsNull(result.Error);
        }