public ScoreCombinationRequestTests()
        {
            _request = new ScoreCombinationRequest();

            _callHistory = new List <ScoreCombinationRecord> {
                new ScoreCombinationRecord()
            };

            _scoreCombinationRepositoryMock = new Mock <IRepositoryRecord>();
            _scoreCombinationRepositoryMock.Setup(x => x.GetCallHistory(DateTime.Today.AddDays(-1), DateTime.Today))
            .Returns(_callHistory);

            _service = new ServiceRecord(_scoreCombinationRepositoryMock.Object);
        }
Exemple #2
0
        public ScoreCombinationResult GetCombination(ScoreCombinationRequest request)
        {
            _validator.Validate(request);

            var result = new ScoreCombinationResult
            {
                Combination = CombinationSum(request.Sequence, request.Target)
            };

            result.Combination ??= new List <long>();

            _repositoryRecord.Add(new ScoreCombinationRecord
            {
                Combination = string.Join(',', result.Combination),
                Date        = DateTime.Now,
                Sequence    = string.Join(',', request.Sequence),
                Target      = request.Target
            });

            return(result);
        }
        public void Validate(ScoreCombinationRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (request.Sequence.Count == 0)
            {
                throw new InvalidOperationException("Sequence contains no elements");
            }

            if (request.Target > 0 && (request.Sequence.Count == 0 || request.Sequence.SequenceEqual(new List <long> {
                0
            })))
            {
                throw new ArgumentException("Target is unreachable with the sequence entered");
            }

            if (request.Target > 0 && request.Sequence.TrueForAll(x => x < 0))
            {
                throw new ArgumentException("Target is unreachable with the sequence entered");
            }
        }