public void ConvertBallotToSelections()
        {
            var selections = _electionMapper.ConvertToSelections(_ballot);

            TestContext.Write(string.Join(",", selections));
            Assert.AreEqual(18, selections.Length);
            Assert.AreEqual(5, selections.Count(selected => selected));
        }
        public ActionResult <EncryptBallotResponse> EncryptBallot(EncryptBallotRequest request)
        {
            // TODO: cache encrypted ballot id's in memory and disallow encrypting an existing ballot id
            try
            {
                var exportPath          = request.ExportPath ?? _exportPath;
                var exportFileName      = request.ExportFileName ?? _encryptedBallotsExportFileName;
                var electionMap         = request.ElectionMap ?? GetElectionMap(request.Election);
                var electionGuardConfig = request.ElectionGuardConfig ?? _electionGuardConfig;
                if (electionMap == null || electionGuardConfig == null)
                {
                    return(BadRequest(EncryptionSetupRequiredMessage));
                }

                if (String.IsNullOrWhiteSpace(request.Ballot.BallotId))
                {
                    return(BadRequest(EncryptMissingIdentifierMessage));
                }

                var selections       = _electionMapper.ConvertToSelections(request.Ballot, electionMap);
                var numberOfExpected = electionMap.BallotStyleMaps[request.Ballot.BallotStyle.Id].ExpectedNumberOfSelected;
                var encryptedBallot  = ElectionGuardApi.EncryptBallot(
                    selections,
                    numberOfExpected,
                    electionGuardConfig,
                    request.Ballot.BallotId,
                    exportPath,
                    exportFileName);

                _currentBallotCount++;

                var response = new EncryptBallotResponse()
                {
                    Id = encryptedBallot.ExternalIdentifier,
                    EncryptedBallotMessage = encryptedBallot.EncryptedBallotMessage,
                    Tracker                = encryptedBallot.Tracker,
                    OutputFileName         = encryptedBallot.OutputFileName,
                    CurrentNumberOfBallots = _currentBallotCount
                };

                return(CreatedAtAction(nameof(EncryptBallot), response));
            }
            catch (Exception ex)
            {
                _logger.LogError("EncryptBallot: ", ex);
                return(StatusCode(500));
            }
        }