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); }
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"); } }