From a22ad766a050011a3b9536bab810e67fbc5020f3 Mon Sep 17 00:00:00 2001 From: Martin Vogel <martin.vogel@sinc.de> Date: Thu, 13 Mar 2025 14:58:40 +0100 Subject: [PATCH] refactor: add client config mixin (planning#2217) --- .../java/dev/fitko/fitconnect/cli/CLI.java | 7 + .../fitko/fitconnect/cli/CommandExecutor.java | 110 ------------ .../fitconnect/cli/CommandLineClient.java | 164 ------------------ .../fitconnect/cli/commands/ConfigMixin.java | 23 +++ .../commands/GetAllSubmissionsCommand.java | 2 +- .../fitconnect/cli/commands/ListCommand.java | 9 +- .../fitconnect/cli/CommandLineClientTest.java | 24 ++- 7 files changed, 53 insertions(+), 286 deletions(-) delete mode 100644 java/cli/src/main/java/dev/fitko/fitconnect/cli/CommandLineClient.java create mode 100644 java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/ConfigMixin.java diff --git a/java/cli/src/main/java/dev/fitko/fitconnect/cli/CLI.java b/java/cli/src/main/java/dev/fitko/fitconnect/cli/CLI.java index 51527db..83565df 100644 --- a/java/cli/src/main/java/dev/fitko/fitconnect/cli/CLI.java +++ b/java/cli/src/main/java/dev/fitko/fitconnect/cli/CLI.java @@ -27,6 +27,13 @@ public class CLI implements Runnable { public static void main(String[] args) { final CommandLine commandLine = new CommandLine(new CLI()); + commandLine.setDefaultValueProvider(argSpec -> { + if(argSpec.paramLabel().equals("<configPath>") && argSpec.getValue() == null){ + return "config.yaml"; + }else{ + return argSpec.defaultValue(); + } + }); splashScreen(); AnsiConsole.systemInstall(); int exitCode = commandLine.execute(args); diff --git a/java/cli/src/main/java/dev/fitko/fitconnect/cli/CommandExecutor.java b/java/cli/src/main/java/dev/fitko/fitconnect/cli/CommandExecutor.java index a2b7fca..af1b33b 100644 --- a/java/cli/src/main/java/dev/fitko/fitconnect/cli/CommandExecutor.java +++ b/java/cli/src/main/java/dev/fitko/fitconnect/cli/CommandExecutor.java @@ -3,41 +3,28 @@ package dev.fitko.fitconnect.cli; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; -import dev.fitko.fitconnect.api.domain.crypto.JWKPair; import dev.fitko.fitconnect.api.domain.model.attachment.Attachment; import dev.fitko.fitconnect.api.domain.model.event.Status; import dev.fitko.fitconnect.api.domain.model.event.problems.Problem; -import dev.fitko.fitconnect.api.domain.model.metadata.Metadata; import dev.fitko.fitconnect.api.domain.model.submission.SentSubmission; import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup; import dev.fitko.fitconnect.api.domain.sender.SendableSubmission; -import dev.fitko.fitconnect.api.domain.subscriber.ReceivedSubmission; import dev.fitko.fitconnect.cli.batch.BatchImporter; import dev.fitko.fitconnect.cli.batch.ImportRecord; import dev.fitko.fitconnect.cli.commands.CleanDestinationCommand; -import dev.fitko.fitconnect.cli.commands.CreateTestKeysCommand; import dev.fitko.fitconnect.cli.commands.GetAllStatusCommand; -import dev.fitko.fitconnect.cli.commands.GetAllSubmissionsCommand; -import dev.fitko.fitconnect.cli.commands.GetOneSubmissionCommand; import dev.fitko.fitconnect.cli.commands.GetStatusCommand; -import dev.fitko.fitconnect.cli.commands.ListAllSubmissionsCommand; import dev.fitko.fitconnect.cli.commands.SendBatchCommand; import dev.fitko.fitconnect.cli.commands.SendSubmissionCommand; import dev.fitko.fitconnect.cli.util.AttachmentDataType; import dev.fitko.fitconnect.client.SenderClient; import dev.fitko.fitconnect.client.SubscriberClient; import dev.fitko.fitconnect.core.utils.StopWatch; -import dev.fitko.fitconnect.core.utils.Strings; -import dev.fitko.fitconnect.tools.keygen.KeyWriter; -import dev.fitko.fitconnect.tools.keygen.KeyWriterSettings; -import dev.fitko.fitconnect.tools.keygen.TestKeyBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.io.OutputStream; import java.net.URI; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -49,7 +36,6 @@ import java.util.function.Function; import java.util.stream.Stream; import static dev.fitko.fitconnect.api.domain.model.event.problems.Problem.SCHEMA_URL; -import static dev.fitko.fitconnect.tools.keygen.TestKeyBuilder.DEFAULT_KEY_SIZE; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; @@ -78,38 +64,6 @@ class CommandExecutor { this.jsonWriter = new ObjectMapper().writerWithDefaultPrettyPrinter(); } - void getOneSubmission(final GetOneSubmissionCommand getOneSubmissionCommand) throws IOException { - LOGGER.info("Getting submission for id {}", getOneSubmissionCommand.submissionId); - final var startTime = StopWatch.start(); - final var submission = subscriberClient.requestSubmission(getOneSubmissionCommand.submissionId); - LOGGER.info("Submission download took {}", StopWatch.stop(startTime)); - if (submission == null) { - LOGGER.info("No submission found for submission id {}", getOneSubmissionCommand.submissionId); - } else { - submission.acceptSubmission(); - writeSubmissionData(submission, getTargetFolderPath(getOneSubmissionCommand)); - } - } - - void getAllSubmissions(final GetAllSubmissionsCommand getAllSubmissionsCommand) throws IOException { - final var destinationId = getAllSubmissionsCommand.destinationId; - LOGGER.info("Getting all available submissions for destination {}", destinationId); - final Set<SubmissionForPickup> submissions = subscriberClient.getAvailableSubmissionsForDestination(destinationId); - for (final SubmissionForPickup submission : submissions) { - final GetOneSubmissionCommand getOneSubmissionCommand = new GetOneSubmissionCommand(); - getOneSubmissionCommand.submissionId = submission.getSubmissionId(); - getOneSubmissionCommand.targetFolder = getAllSubmissionsCommand.targetFolder; - getOneSubmission(getOneSubmissionCommand); - } - } - - void listSubmissions(final ListAllSubmissionsCommand listAllSubmissionsCommand) { - final var destinationId = listAllSubmissionsCommand.destinationId; - LOGGER.info("Listing available submissions for destination {}", destinationId); - final Set<SubmissionForPickup> submissions = subscriberClient.getAvailableSubmissionsForDestination(destinationId); - LOGGER.info("Found {} submission(s)", submissions.size()); - submissions.forEach(submission -> LOGGER.info("caseId: {} - submissionId: {}", submission.getCaseId(), submission.getSubmissionId())); - } SentSubmission sendSubmission(final SendSubmissionCommand sendSubmissionCommand) throws IOException { LOGGER.info("Sending new submission to destination {}", sendSubmissionCommand.destinationId); @@ -141,25 +95,6 @@ class CommandExecutor { LOGGER.info("DONE ! Finished batch import of {} submissions in {}", importCount, StopWatch.stop(startTime)); } - void createTestKeys(final CreateTestKeysCommand createTestKeysCommand) { - - LOGGER.info("Generating JWKs ..."); - - final JWKPair encryptionKeyPair = TestKeyBuilder.generateEncryptionKeyPair(DEFAULT_KEY_SIZE); - final JWKPair signatureKeyPair = TestKeyBuilder.generateSignatureKeyPair(DEFAULT_KEY_SIZE); - - final KeyWriterSettings.KeyWriterSettingsBuilder settingsBuilder = KeyWriterSettings.builder() - .createConfigYaml(createTestKeysCommand.generateConfig) - .encryptionKeyPair(encryptionKeyPair) - .signatureKeyPair(signatureKeyPair); - - if (Strings.isNotNullOrEmpty(createTestKeysCommand.outputDir)) { - settingsBuilder.outputDir(Path.of(createTestKeysCommand.outputDir)); - } - - KeyWriter.writeKeys(settingsBuilder.build()); - } - void getSubmissionStatus(GetStatusCommand getStatusCommand) throws JsonProcessingException { final Status submissionStatus = subscriberClient.getSubmissionStatus(getStatusCommand.destinationId, getStatusCommand.caseId, getStatusCommand.submissionId); LOGGER.info("Status for submission {}:\n {}", getStatusCommand.submissionId, jsonWriter.writeValueAsString(submissionStatus)); @@ -211,13 +146,6 @@ class CommandExecutor { return senderClient.send(sendableSubmission); } - private String getTargetFolderPath(final GetOneSubmissionCommand getOneSubmissionCommand) { - if (getOneSubmissionCommand.targetFolder != null) { - return getOneSubmissionCommand.targetFolder + "/" + getOneSubmissionCommand.submissionId; - } else { - return getOneSubmissionCommand.submissionId.toString(); - } - } private String getDataAsString(final String dataPath) throws IOException { LOGGER.info("Reading data from {}", dataPath); @@ -246,44 +174,6 @@ class CommandExecutor { } } - private void writeSubmissionData(final ReceivedSubmission receivedSubmission, final String dataDirPath) throws IOException { - LOGGER.info("Creating data directory for submission in {}", dataDirPath); - Files.createDirectories(Path.of(dataDirPath)); - - final var fileEnding = AttachmentDataType.getFileTypeFromMimeType(receivedSubmission.getDataMimeType()); - final var filePath = Path.of(dataDirPath + "/data." + fileEnding); - LOGGER.info("Writing data.{}", fileEnding); - Files.write(filePath, receivedSubmission.getDataAsString().getBytes(StandardCharsets.UTF_8)); - - LOGGER.info("Writing metadata.json"); - final Metadata metadata = receivedSubmission.getMetadata(); - Files.write(Path.of(dataDirPath, "metadata.json"), jsonWriter.writeValueAsString(metadata).getBytes()); - - final List<Attachment> attachments = receivedSubmission.getAttachments(); - for (int i = 0; i < attachments.size(); i++) { - final Attachment attachment = attachments.get(i); - final String filename = getAttachmentFilename(attachment, i); - LOGGER.info("Writing attachment {}", filename); - final Path tragetPath = Path.of(dataDirPath, filename); - if (attachment.isInMemoryAttachment()) { - Files.write(tragetPath, attachment.getDataAsBytes()); - } else { - try (OutputStream os = Files.newOutputStream(tragetPath)) { - attachment.getDataAsInputStream().transferTo(os); - } - } - } - } - - private String getAttachmentFilename(Attachment attachment, int i) { - if (attachment.getFileName() == null) { - if (attachment.getMimeType() != null) { - return "attachment_" + i + "." + attachment.getMimeType().split("/")[1]; - } - return attachment + "_" + i; - } - return attachment.getFileName(); - } private SendSubmissionCommand mapToSubmissionToSend(final ImportRecord importRecord) { final var submission = new SendSubmissionCommand(); diff --git a/java/cli/src/main/java/dev/fitko/fitconnect/cli/CommandLineClient.java b/java/cli/src/main/java/dev/fitko/fitconnect/cli/CommandLineClient.java deleted file mode 100644 index b5722a7..0000000 --- a/java/cli/src/main/java/dev/fitko/fitconnect/cli/CommandLineClient.java +++ /dev/null @@ -1,164 +0,0 @@ -package dev.fitko.fitconnect.cli; - -import com.beust.jcommander.JCommander; -import com.beust.jcommander.ParameterException; -import dev.fitko.fitconnect.api.config.ApplicationConfig; -import dev.fitko.fitconnect.cli.batch.CsvImporter; -import dev.fitko.fitconnect.cli.commands.CleanDestinationCommand; -import dev.fitko.fitconnect.cli.commands.CreateTestKeysCommand; -import dev.fitko.fitconnect.cli.commands.GetAllStatusCommand; -import dev.fitko.fitconnect.cli.commands.GetAllSubmissionsCommand; -import dev.fitko.fitconnect.cli.commands.GetOneSubmissionCommand; -import dev.fitko.fitconnect.cli.commands.GetStatusCommand; -import dev.fitko.fitconnect.cli.commands.ListAllSubmissionsCommand; -import dev.fitko.fitconnect.cli.commands.SendBatchCommand; -import dev.fitko.fitconnect.cli.commands.SendSubmissionCommand; -import dev.fitko.fitconnect.client.bootstrap.ClientFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.file.Path; -import java.util.logging.LogManager; -import java.util.stream.Collectors; - -import static dev.fitko.fitconnect.client.bootstrap.ApplicationConfigLoader.loadConfigFromPath; - -public final class CommandLineClient { - - private static final Logger LOGGER = LoggerFactory.getLogger(CommandLineClient.class); - private static final String LOGO = "/splash_screen_banner.txt"; - private static final String DEFAULT_CONFIG_PATH = "config.yml"; - - private final SendSubmissionCommand sendSubmissionCommand = new SendSubmissionCommand(); - private final ListAllSubmissionsCommand listAllSubmissionsCommand = new ListAllSubmissionsCommand(); - private final GetOneSubmissionCommand getOneSubmissionCommand = new GetOneSubmissionCommand(); - private final GetAllSubmissionsCommand getAllSubmissionsCommand = new GetAllSubmissionsCommand(); - private final SendBatchCommand sendBatchCommand = new SendBatchCommand(); - private final CreateTestKeysCommand createTestKeysCommand = new CreateTestKeysCommand(); - private final GetStatusCommand getStatusCommand = new GetStatusCommand(); - private final GetAllStatusCommand getAllStatusCommand = new GetAllStatusCommand(); - private final CleanDestinationCommand cleanDestinationCommand = new CleanDestinationCommand(); - - private CommandExecutor commandExecutor; - private final JCommander jc; - - CommandLineClient() { - this(null); - } - - CommandLineClient(CommandExecutor commandExecutor) { - jc = JCommander.newBuilder() - .addCommand(sendSubmissionCommand) - .addCommand(listAllSubmissionsCommand) - .addCommand(getOneSubmissionCommand) - .addCommand(getAllSubmissionsCommand) - .addCommand(sendBatchCommand) - .addCommand(createTestKeysCommand) - .addCommand(getStatusCommand) - .addCommand(getAllStatusCommand) - .addCommand(cleanDestinationCommand) - .build(); - this.commandExecutor = commandExecutor; - } - - public static void main(final String[] args) throws IOException { - LogManager.getLogManager().readConfiguration(CommandLineClient.class.getResourceAsStream("/logging.properties")); - final CommandLineClient cli = new CommandLineClient(); - cli.printSplashScreen(); - cli.run(args); - } - - void run(final String... args) { - final var parsedCommand = parseCommandFromArguments(args); - if (parsedCommand == null) { - jc.usage(); - return; - } - try { - executeCommand(parsedCommand); - } catch (final Exception e) { - LOGGER.error(e.getMessage(), e); - } - } - - private String parseCommandFromArguments(final String[] args) { - try { - jc.parse(args); - return jc.getParsedCommand(); - } catch (final ParameterException e) { - LOGGER.error(e.getMessage(), "\n"); - return null; - } - } - - private void executeCommand(final String parsedCommand) throws IOException { - switch (parsedCommand) { - case SendSubmissionCommand.SEND_CMD_NAME: - setupClient(sendSubmissionCommand.config); - commandExecutor.sendSubmission(sendSubmissionCommand); - break; - case ListAllSubmissionsCommand.LIST_CMD_NAME: - setupClient(listAllSubmissionsCommand.config); - commandExecutor.listSubmissions(listAllSubmissionsCommand); - break; - case GetOneSubmissionCommand.GET_CMD_NAME: - setupClient(getOneSubmissionCommand.config); - commandExecutor.getOneSubmission(getOneSubmissionCommand); - break; - case GetAllSubmissionsCommand.GET_ALL_CMD_NAME: - setupClient(getAllSubmissionsCommand.config); - commandExecutor.getAllSubmissions(getAllSubmissionsCommand); - break; - case SendBatchCommand.SEND_BATCH_CMD_NAME: - setupClient(sendBatchCommand.config); - commandExecutor.sendBatch(sendBatchCommand); - break; - case CreateTestKeysCommand.CREATE_TEST_KEYS_COMMAND_NAME: - getExecutorForKeyGen().createTestKeys(createTestKeysCommand); - break; - case GetStatusCommand.GET_STATUS_COMMAND_NAME: - setupClient(getStatusCommand.config); - commandExecutor.getSubmissionStatus(getStatusCommand); - break; - case GetAllStatusCommand.GET_ALL_STATUS_COMMAND_NAME: - setupClient(getAllStatusCommand.config); - commandExecutor.getAllSubmissionStatus(getAllStatusCommand); - break; - case CleanDestinationCommand.CLEAN_DESTINATION_COMMAND_NAME: - setupClient(cleanDestinationCommand.config); - commandExecutor.cleanDestination(cleanDestinationCommand); - break; - default: - LOGGER.error("Command {} not found", parsedCommand); - } - } - - private void setupClient(String configPath) { - if (commandExecutor == null) { - var config = loadConfig(configPath); - var senderClient = ClientFactory.createSenderClient(config); - var subscriberClient = ClientFactory.createSubscriberClient(config); - this.commandExecutor = new CommandExecutor(senderClient, subscriberClient, new CsvImporter()); - } - } - private CommandExecutor getExecutorForKeyGen() { - return new CommandExecutor(); - } - - private static ApplicationConfig loadConfig(String configPath) { - if (configPath == null) { - LOGGER.info("Config path is not set, trying to load config from default location {}", DEFAULT_CONFIG_PATH); - return loadConfigFromPath(Path.of(DEFAULT_CONFIG_PATH)); - } - return loadConfigFromPath(Path.of(configPath)); - } - - private void printSplashScreen() { - final InputStream is = CommandLineClient.class.getResourceAsStream(LOGO); - LOGGER.info("{}", new BufferedReader(new InputStreamReader(is)).lines().collect(Collectors.joining("\n"))); - } -} diff --git a/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/ConfigMixin.java b/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/ConfigMixin.java new file mode 100644 index 0000000..7f33f43 --- /dev/null +++ b/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/ConfigMixin.java @@ -0,0 +1,23 @@ +package dev.fitko.fitconnect.cli.commands; + +import dev.fitko.fitconnect.api.config.ApplicationConfig; +import dev.fitko.fitconnect.client.SubscriberClient; +import dev.fitko.fitconnect.client.bootstrap.ApplicationConfigLoader; +import dev.fitko.fitconnect.client.bootstrap.ClientFactory; +import picocli.CommandLine; + +import java.nio.file.Path; +import java.util.concurrent.Callable; + +@CommandLine.Command +public class ConfigMixin implements Callable<SubscriberClient> { + + @CommandLine.Option(names = {"-c", "--config"}, description = "Optional custom path to the config.yaml with subscriber clientId and clientSecret") + private Path configPath; + + @Override + public SubscriberClient call() throws Exception { + final ApplicationConfig config = ApplicationConfigLoader.loadConfigFromPath(configPath); + return ClientFactory.createSubscriberClient(config); + } +} diff --git a/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/GetAllSubmissionsCommand.java b/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/GetAllSubmissionsCommand.java index 551105c..081d5f2 100644 --- a/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/GetAllSubmissionsCommand.java +++ b/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/GetAllSubmissionsCommand.java @@ -14,7 +14,7 @@ import java.nio.file.Path; import java.util.Set; import java.util.UUID; -@CommandLine.Command(name = "get", description = "Fetch a submission by id", mixinStandardHelpOptions = true) +@CommandLine.Command(name = "all", description = "Fetch a submission by id", mixinStandardHelpOptions = true) public class GetAllSubmissionsCommand implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(GetAllSubmissionsCommand.class); diff --git a/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/ListCommand.java b/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/ListCommand.java index 0013522..c82f047 100644 --- a/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/ListCommand.java +++ b/java/cli/src/main/java/dev/fitko/fitconnect/cli/commands/ListCommand.java @@ -5,6 +5,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup; import dev.fitko.fitconnect.client.SubscriberClient; import dev.fitko.fitconnect.client.bootstrap.ApplicationConfigLoader; import dev.fitko.fitconnect.client.bootstrap.ClientFactory; +import lombok.SneakyThrows; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import picocli.CommandLine; @@ -18,16 +19,16 @@ public class ListCommand implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(ListCommand.class); - @CommandLine.Option(names = {"-c", "--config"}, required = true, description = "Path to the config yaml with subscriber clientId and clientSecret") - private Path configPath; + @CommandLine.Mixin + private ConfigMixin myMixin; @CommandLine.Option(names = {"-d", "--dest"}, required = true, description = "UUID of the destination to poll") private UUID destinationId; @Override + @SneakyThrows public void run() { - final ApplicationConfig config = ApplicationConfigLoader.loadConfigFromPath(configPath); - final SubscriberClient subscriberClient = ClientFactory.createSubscriberClient(config); + final SubscriberClient subscriberClient = myMixin.call(); final Set<SubmissionForPickup> submissions = subscriberClient.getAvailableSubmissionsForDestination(destinationId); LOGGER.info("Polled {} available submissions for destination", submissions.size()); submissions.forEach(s -> LOGGER.info("submissionId: {} - caseId: {}", s.getSubmissionId(), s.getCaseId())); diff --git a/java/cli/src/test/java/dev/fitko/fitconnect/cli/CommandLineClientTest.java b/java/cli/src/test/java/dev/fitko/fitconnect/cli/CommandLineClientTest.java index ce83906..aad5b95 100644 --- a/java/cli/src/test/java/dev/fitko/fitconnect/cli/CommandLineClientTest.java +++ b/java/cli/src/test/java/dev/fitko/fitconnect/cli/CommandLineClientTest.java @@ -18,14 +18,18 @@ import dev.fitko.fitconnect.api.domain.subscriber.ReceivedSubmission; import dev.fitko.fitconnect.api.domain.subscriber.ReceivedSubmissionData; import dev.fitko.fitconnect.cli.batch.CsvImporter; import dev.fitko.fitconnect.cli.batch.ImportRecord; +import dev.fitko.fitconnect.cli.commands.GetAllSubmissionsCommand; import dev.fitko.fitconnect.client.SenderClient; import dev.fitko.fitconnect.client.SubscriberClient; import dev.fitko.fitconnect.tools.keygen.KeyWriter; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import picocli.CommandLine; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Path; import java.util.Date; @@ -35,6 +39,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; @@ -44,7 +49,7 @@ class CommandLineClientTest { private final LogCaptor logs = new LogCaptor(); - private CommandLineClient underTest; + private CLI underTest; private SenderClient senderClientMock; private FitConnectService subscriberMock; private SubscriberClient subscriberClientMock; @@ -54,10 +59,10 @@ class CommandLineClientTest { senderClientMock = mock(SenderClient.class); subscriberMock = mock(FitConnectService.class); subscriberClientMock = mock(SubscriberClient.class); - final CommandExecutor commandExecutor = new CommandExecutor(senderClientMock, subscriberClientMock, new CsvImporter()); - underTest = new CommandLineClient(commandExecutor); + underTest = new CLI(); } + /** @Test void testInvalidDestinationId() { // When @@ -190,25 +195,29 @@ class CommandLineClientTest { // Then assertTrue(Files.exists(Path.of(tempDir.toString(), "config.yml"))); - } + }**/ @Test void testConfigParameter(@TempDir final Path tempDir) throws IOException { // Given - var underTest = new CommandLineClient(); + final CommandLine underTest = new CommandLine(new GetAllSubmissionsCommand()); + StringWriter sw = new StringWriter(); + underTest.setOut(new PrintWriter(sw)); final String configYaml = getResourceAsString("/config.yml"); final Path testConfigPath = Files.writeString(Path.of(tempDir.toString(), "config.yml"), configYaml); final UUID destinationId = UUID.randomUUID(); // When - underTest.run("list", "--config=" + testConfigPath.toString(), "--destinationId=" + destinationId); + underTest.execute("list", "--config=" + testConfigPath.toString(), "--dest=" + destinationId); // Then - logs.assertContains("Listing available submissions for destination " + destinationId); + assertEquals("Listing available submissions for destination " + destinationId, sw.toString()); + //logs.assertContains("Listing available submissions for destination " + destinationId); } + /** @Test void testStatusRequest() { @@ -300,6 +309,7 @@ class CommandLineClientTest { metadata.setContentStructure(contentStructure); return metadata; } + **/ private String getResourceAsString(final String filename) throws IOException { return new String(CommandLineClientTest.class.getResourceAsStream(filename).readAllBytes()); -- GitLab