From 1e12d96bc3170e7e908011c5a7fb1348d31be04b Mon Sep 17 00:00:00 2001 From: Aliaksei Ivanouski Date: Sat, 27 Jun 2026 15:52:33 +0200 Subject: [PATCH 1/2] Mask protected fields by default --- .../github/ai/kpdiff/domain/MainInteractor.kt | 3 +- .../kpdiff/domain/argument/ArgumentParser.kt | 7 +++ .../domain/argument/ArgumentsExtensions.kt | 3 +- .../domain/argument/OptionalArgument.kt | 4 +- .../diff/formatter/DiffFormatterImpl.kt | 46 ++++++++++++++++++- .../domain/usecases/PrintHelpUseCase.kt | 2 + .../com/github/ai/kpdiff/entity/Arguments.kt | 8 ++-- .../ai/kpdiff/entity/DiffFormatterOptions.kt | 5 +- .../ai/kpdiff/entity/MutableArguments.kt | 5 +- .../ai/kpdiff/domain/MainInteractorTest.kt | 3 +- .../domain/argument/ArgumentParserTest.kt | 28 ++++++++++- .../diff/formatter/DiffFormatterImplTest.kt | 20 ++++++-- .../domain/usecases/GetKeysUseCaseTest.kt | 3 +- 13 files changed, 118 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/github/ai/kpdiff/domain/MainInteractor.kt b/src/main/java/com/github/ai/kpdiff/domain/MainInteractor.kt index e3d3813..bb9ede9 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/MainInteractor.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/MainInteractor.kt @@ -75,7 +75,8 @@ class MainInteractor( } else { val options = DiffFormatterOptions( isColorEnabled = !parsedArgs.isNoColoredOutput, - isVerboseOutput = parsedArgs.isVerboseOutput + isVerboseOutput = parsedArgs.isVerboseOutput, + isPrintProtectedFields = parsedArgs.isPrintProtectedFields ) printDiffUseCase.printDiff( diff --git a/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentParser.kt b/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentParser.kt index 88abd15..8f168cd 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentParser.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentParser.kt @@ -96,6 +96,8 @@ class ArgumentParser( OptionalArgument.HELP -> parseHelp(values) OptionalArgument.VERSION -> parseVersion(values) OptionalArgument.VERBOSE -> parseVerbose(values) + OptionalArgument.PRINT_PROTECTED_FIELDS -> parsePrintProtectedFields(values) + OptionalArgument.PRINT_PASSWORDS -> parsePrintProtectedFields(values) OptionalArgument.KEY_FILE_A -> parseLeftKeyPath(queue.poll(), values) OptionalArgument.KEY_FILE_B -> parseRightKeyPath(queue.poll(), values) OptionalArgument.PASSWORD -> parsePassword(queue.poll(), values) @@ -152,6 +154,11 @@ class ArgumentParser( return Either.Right(Unit) } + private fun parsePrintProtectedFields(arguments: MutableArguments): Either { + arguments.isPrintProtectedFields = true + return Either.Right(Unit) + } + private fun parseLeftKeyPath( path: String?, arguments: MutableArguments diff --git a/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentsExtensions.kt b/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentsExtensions.kt index 6353446..c94225d 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentsExtensions.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentsExtensions.kt @@ -23,6 +23,7 @@ fun MutableArguments.toArguments(): Arguments { isNoColoredOutput = isNoColoredOutput, isPrintHelp = isPrintHelp, isPrintVersion = isPrintVersion, - isVerboseOutput = isVerboseOutput + isVerboseOutput = isVerboseOutput, + isPrintProtectedFields = isPrintProtectedFields ) } \ No newline at end of file diff --git a/src/main/java/com/github/ai/kpdiff/domain/argument/OptionalArgument.kt b/src/main/java/com/github/ai/kpdiff/domain/argument/OptionalArgument.kt index 97d258f..95638cc 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/argument/OptionalArgument.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/argument/OptionalArgument.kt @@ -22,7 +22,9 @@ enum class OptionalArgument( PASSWORD_B(shortName = null, fullName = "password-b"), VERBOSE(shortName = "v", fullName = "verbose"), DIFF_BY(shortName = "d", fullName = "diff-by"), - OUTPUT_FILE(shortName = "f", fullName = "output-file"); + OUTPUT_FILE(shortName = "f", fullName = "output-file"), + PRINT_PROTECTED_FIELDS(shortName = null, fullName = "print-protected-fields"), + PRINT_PASSWORDS(shortName = null, fullName = "print-passwords"); val cliShortName: String? = if (shortName != null) { "-$shortName" diff --git a/src/main/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImpl.kt b/src/main/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImpl.kt index 807e8c4..732b288 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImpl.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImpl.kt @@ -194,8 +194,10 @@ class DiffFormatterImpl( val formatter = formatterProvider.getFormatter(entity::class) as EntityFormatter + val formattedEvent = event.maskProtectedFields(options) + return terminalOutputFormatter.format( - line = formatter.format(event as DiffEvent, indent), + line = formatter.format(formattedEvent as DiffEvent, indent), color = if (options.isColorEnabled) { event.getColor() } else { @@ -204,6 +206,46 @@ class DiffFormatterImpl( ) } + @Suppress("UNCHECKED_CAST") + private fun DiffEvent.maskProtectedFields( + options: DiffFormatterOptions + ): DiffEvent { + if (options.isPrintProtectedFields) { + return this + } + + return when (this) { + is DiffEvent.Insert -> DiffEvent.Insert( + parentUuid = parentUuid, + entity = entity.maskProtectedField() + ) as DiffEvent + + is DiffEvent.Delete -> DiffEvent.Delete( + parentUuid = parentUuid, + entity = entity.maskProtectedField() + ) as DiffEvent + + is DiffEvent.Update -> DiffEvent.Update( + oldParentUuid = oldParentUuid, + newParentUuid = newParentUuid, + oldEntity = oldEntity.maskProtectedField(), + newEntity = newEntity.maskProtectedField() + ) as DiffEvent + } + } + + private fun T.maskProtectedField(): T { + if (this !is Field<*> || name != Fields.FIELD_PASSWORD) { + return this + } + + return Field( + uuid = uuid, + name = name, + value = PROTECTED_FIELD_PLACEHOLDER + ) as T + } + private fun shouldPrintAdditionalInformation( event: DiffEvent<*>, options: DiffFormatterOptions @@ -276,6 +318,8 @@ class DiffFormatterImpl( companion object { private const val INDENT = " " + private const val PROTECTED_FIELD_PLACEHOLDER = "***" + private val DEFAULT_PROPERTIES = setOf( Fields.FIELD_TITLE, Fields.FIELD_USERNAME, diff --git a/src/main/java/com/github/ai/kpdiff/domain/usecases/PrintHelpUseCase.kt b/src/main/java/com/github/ai/kpdiff/domain/usecases/PrintHelpUseCase.kt index 8b32fa4..022feae 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/usecases/PrintHelpUseCase.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/usecases/PrintHelpUseCase.kt @@ -43,6 +43,8 @@ class PrintHelpUseCase( -d, --diff-by Type of differ, default is 'path'. Possible values: path - produces more accurate diff, considers entries identical if they have identical content but UUID differs uuid - considers entries identical if they have identical content and UUID + --print-protected-fields Print values of protected fields such as passwords + --print-passwords Alias for --print-protected-fields -v, --verbose Print verbose output (entry fields will be printed) -V, --version Print version -h, --help Print help information diff --git a/src/main/java/com/github/ai/kpdiff/entity/Arguments.kt b/src/main/java/com/github/ai/kpdiff/entity/Arguments.kt index 5957f48..e5f68a0 100644 --- a/src/main/java/com/github/ai/kpdiff/entity/Arguments.kt +++ b/src/main/java/com/github/ai/kpdiff/entity/Arguments.kt @@ -20,7 +20,8 @@ data class Arguments( val isNoColoredOutput: Boolean, val isPrintHelp: Boolean, val isPrintVersion: Boolean, - val isVerboseOutput: Boolean + val isVerboseOutput: Boolean, + val isPrintProtectedFields: Boolean ) { companion object { @@ -42,7 +43,8 @@ data class Arguments( isNoColoredOutput = false, isPrintHelp = false, isPrintVersion = false, - isVerboseOutput = false + isVerboseOutput = false, + isPrintProtectedFields = false ) } -} \ No newline at end of file +} diff --git a/src/main/java/com/github/ai/kpdiff/entity/DiffFormatterOptions.kt b/src/main/java/com/github/ai/kpdiff/entity/DiffFormatterOptions.kt index a7bc8a4..b9ed606 100644 --- a/src/main/java/com/github/ai/kpdiff/entity/DiffFormatterOptions.kt +++ b/src/main/java/com/github/ai/kpdiff/entity/DiffFormatterOptions.kt @@ -2,5 +2,6 @@ package com.github.ai.kpdiff.entity data class DiffFormatterOptions( val isColorEnabled: Boolean = true, - val isVerboseOutput: Boolean = false -) \ No newline at end of file + val isVerboseOutput: Boolean = false, + val isPrintProtectedFields: Boolean = false +) diff --git a/src/main/java/com/github/ai/kpdiff/entity/MutableArguments.kt b/src/main/java/com/github/ai/kpdiff/entity/MutableArguments.kt index b129d8f..16cfd85 100644 --- a/src/main/java/com/github/ai/kpdiff/entity/MutableArguments.kt +++ b/src/main/java/com/github/ai/kpdiff/entity/MutableArguments.kt @@ -18,5 +18,6 @@ data class MutableArguments( var isNoColoredOutput: Boolean = false, var isPrintHelp: Boolean = false, var isPrintVersion: Boolean = false, - var isVerboseOutput: Boolean = false -) \ No newline at end of file + var isVerboseOutput: Boolean = false, + var isPrintProtectedFields: Boolean = false +) diff --git a/src/test/java/com/github/ai/kpdiff/domain/MainInteractorTest.kt b/src/test/java/com/github/ai/kpdiff/domain/MainInteractorTest.kt index 5d41524..2c02e2b 100644 --- a/src/test/java/com/github/ai/kpdiff/domain/MainInteractorTest.kt +++ b/src/test/java/com/github/ai/kpdiff/domain/MainInteractorTest.kt @@ -269,7 +269,8 @@ class MainInteractorTest { isNoColoredOutput = isNoColoredOutput, isPrintHelp = isPrintHelp, isPrintVersion = isPrintVersion, - isVerboseOutput = false + isVerboseOutput = false, + isPrintProtectedFields = false ) private fun newInteractor(): MainInteractor = diff --git a/src/test/java/com/github/ai/kpdiff/domain/argument/ArgumentParserTest.kt b/src/test/java/com/github/ai/kpdiff/domain/argument/ArgumentParserTest.kt index b5fb40e..51c5958 100644 --- a/src/test/java/com/github/ai/kpdiff/domain/argument/ArgumentParserTest.kt +++ b/src/test/java/com/github/ai/kpdiff/domain/argument/ArgumentParserTest.kt @@ -204,6 +204,28 @@ internal class ArgumentParserTest { } } + + @Test + fun `parse should return arguments if protected-field printing is specified`() { + listOf( + OptionalArgument.PRINT_PROTECTED_FIELDS.cliFullName, + OptionalArgument.PRINT_PASSWORDS.cliFullName + ).forEach { argumentName -> + assertParsedSuccessfully( + arguments = arrayOf( + LEFT_FILE_PATH, + RIGHT_FILE_PATH, + argumentName + ), + expectedArguments = newArguments( + LEFT_FILE_PATH, + RIGHT_FILE_PATH, + isPrintProtectedFields = true + ) + ) + } + } + @Test fun `parse should return arguments if --one-password is specified`() { listOf( @@ -674,7 +696,8 @@ internal class ArgumentParserTest { isNoColoredOutput: Boolean = false, isPrintHelp: Boolean = false, isPrintVersion: Boolean = false, - isVerboseOutput: Boolean = false + isVerboseOutput: Boolean = false, + isPrintProtectedFields: Boolean = false ): Arguments { return Arguments( leftPath = leftPath, @@ -694,7 +717,8 @@ internal class ArgumentParserTest { isNoColoredOutput = isNoColoredOutput, isPrintHelp = isPrintHelp, isPrintVersion = isPrintVersion, - isVerboseOutput = isVerboseOutput + isVerboseOutput = isVerboseOutput, + isPrintProtectedFields = isPrintProtectedFields ) } diff --git a/src/test/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImplTest.kt b/src/test/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImplTest.kt index 53c474c..14bb91b 100644 --- a/src/test/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImplTest.kt +++ b/src/test/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImplTest.kt @@ -18,7 +18,8 @@ class DiffFormatterImplTest { fun `format should return diff between databases`() { listOf( Pair(defaultOptions(), newPathDiffer()) to OUTPUT, - Pair(verboseOptions(), newPathDiffer()) to VERBOSE_OUTPUT + Pair(verboseOptions(), newPathDiffer()) to VERBOSE_OUTPUT, + Pair(printProtectedOptions(), newPathDiffer()) to VERBOSE_OUTPUT_WITH_PROTECTED_FIELDS ).forEach { (data, expected) -> // arrange val (options, differ) = data @@ -53,6 +54,13 @@ class DiffFormatterImplTest { private fun verboseOptions(): DiffFormatterOptions = DiffFormatterOptions(isColorEnabled = false, isVerboseOutput = true) + private fun printProtectedOptions(): DiffFormatterOptions = + DiffFormatterOptions( + isColorEnabled = false, + isVerboseOutput = true, + isPrintProtectedFields = true + ) + companion object { private val OUTPUT = """ ~ Group 'Database' @@ -97,13 +105,13 @@ class DiffFormatterImplTest { - Entry 'Github.com' - Field 'Title': 'Github.com' - Field 'UserName': 'john.doe@example.com' - - Field 'Password': 'abc123' + - Field 'Password': '***' - Field 'URL': 'https://github.com' - Field 'Notes': '' + Entry 'Gitlab' + Field 'Title': 'Gitlab' + Field 'UserName': 'john.doe@example.com' - + Field 'Password': 'abc123' + + Field 'Password': '***' + Field 'URL': 'https://gitlab.com' + Field 'Notes': '' ~ Group 'Database' @@ -116,11 +124,15 @@ class DiffFormatterImplTest { + Entry 'Facebook' + Field 'Title': 'Facebook' + Field 'UserName': 'john.doe@example.com' - + Field 'Password': 'abc123' + + Field 'Password': '***' + Field 'URL': 'https://facebook.com' + Field 'Notes': '' """.transformOutput() + private val VERBOSE_OUTPUT_WITH_PROTECTED_FIELDS = VERBOSE_OUTPUT.map { line -> + line.replace("Field 'Password': '***'", "Field 'Password': 'abc123'") + } + private fun String.transformOutput(): List { return this .trimIndent() diff --git a/src/test/java/com/github/ai/kpdiff/domain/usecases/GetKeysUseCaseTest.kt b/src/test/java/com/github/ai/kpdiff/domain/usecases/GetKeysUseCaseTest.kt index 606fae3..5701891 100644 --- a/src/test/java/com/github/ai/kpdiff/domain/usecases/GetKeysUseCaseTest.kt +++ b/src/test/java/com/github/ai/kpdiff/domain/usecases/GetKeysUseCaseTest.kt @@ -344,7 +344,8 @@ class GetKeysUseCaseTest { isAskRightPassword = isAskRightPassword, isPrintHelp = false, isPrintVersion = false, - isVerboseOutput = false + isVerboseOutput = false, + isPrintProtectedFields = false ) } } \ No newline at end of file From 963f0414de245c8b154d03ffa7925873c3a0b61d Mon Sep 17 00:00:00 2001 From: Aliaksei Ivanouski Date: Sat, 27 Jun 2026 19:19:55 +0200 Subject: [PATCH 2/2] Use reveal flag for protected values --- .../github/ai/kpdiff/domain/MainInteractor.kt | 2 +- .../kpdiff/domain/argument/ArgumentParser.kt | 7 ++-- .../domain/argument/ArgumentsExtensions.kt | 2 +- .../domain/argument/OptionalArgument.kt | 3 +- .../diff/formatter/DiffFormatterImpl.kt | 6 ++-- .../domain/usecases/PrintHelpUseCase.kt | 3 +- .../com/github/ai/kpdiff/entity/Arguments.kt | 4 +-- .../ai/kpdiff/entity/DiffFormatterOptions.kt | 2 +- .../ai/kpdiff/entity/MutableArguments.kt | 2 +- .../ai/kpdiff/domain/MainInteractorTest.kt | 2 +- .../domain/argument/ArgumentParserTest.kt | 33 ++++++++----------- .../diff/formatter/DiffFormatterImplTest.kt | 8 ++--- .../domain/usecases/GetKeysUseCaseTest.kt | 2 +- 13 files changed, 34 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/github/ai/kpdiff/domain/MainInteractor.kt b/src/main/java/com/github/ai/kpdiff/domain/MainInteractor.kt index bb9ede9..9c982eb 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/MainInteractor.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/MainInteractor.kt @@ -76,7 +76,7 @@ class MainInteractor( val options = DiffFormatterOptions( isColorEnabled = !parsedArgs.isNoColoredOutput, isVerboseOutput = parsedArgs.isVerboseOutput, - isPrintProtectedFields = parsedArgs.isPrintProtectedFields + isReveal = parsedArgs.isReveal ) printDiffUseCase.printDiff( diff --git a/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentParser.kt b/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentParser.kt index 8f168cd..60ed843 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentParser.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentParser.kt @@ -96,8 +96,7 @@ class ArgumentParser( OptionalArgument.HELP -> parseHelp(values) OptionalArgument.VERSION -> parseVersion(values) OptionalArgument.VERBOSE -> parseVerbose(values) - OptionalArgument.PRINT_PROTECTED_FIELDS -> parsePrintProtectedFields(values) - OptionalArgument.PRINT_PASSWORDS -> parsePrintProtectedFields(values) + OptionalArgument.REVEAL -> parseReveal(values) OptionalArgument.KEY_FILE_A -> parseLeftKeyPath(queue.poll(), values) OptionalArgument.KEY_FILE_B -> parseRightKeyPath(queue.poll(), values) OptionalArgument.PASSWORD -> parsePassword(queue.poll(), values) @@ -154,8 +153,8 @@ class ArgumentParser( return Either.Right(Unit) } - private fun parsePrintProtectedFields(arguments: MutableArguments): Either { - arguments.isPrintProtectedFields = true + private fun parseReveal(arguments: MutableArguments): Either { + arguments.isReveal = true return Either.Right(Unit) } diff --git a/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentsExtensions.kt b/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentsExtensions.kt index c94225d..6a08672 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentsExtensions.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/argument/ArgumentsExtensions.kt @@ -24,6 +24,6 @@ fun MutableArguments.toArguments(): Arguments { isPrintHelp = isPrintHelp, isPrintVersion = isPrintVersion, isVerboseOutput = isVerboseOutput, - isPrintProtectedFields = isPrintProtectedFields + isReveal = isReveal ) } \ No newline at end of file diff --git a/src/main/java/com/github/ai/kpdiff/domain/argument/OptionalArgument.kt b/src/main/java/com/github/ai/kpdiff/domain/argument/OptionalArgument.kt index 95638cc..56765a2 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/argument/OptionalArgument.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/argument/OptionalArgument.kt @@ -23,8 +23,7 @@ enum class OptionalArgument( VERBOSE(shortName = "v", fullName = "verbose"), DIFF_BY(shortName = "d", fullName = "diff-by"), OUTPUT_FILE(shortName = "f", fullName = "output-file"), - PRINT_PROTECTED_FIELDS(shortName = null, fullName = "print-protected-fields"), - PRINT_PASSWORDS(shortName = null, fullName = "print-passwords"); + REVEAL(shortName = null, fullName = "reveal"); val cliShortName: String? = if (shortName != null) { "-$shortName" diff --git a/src/main/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImpl.kt b/src/main/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImpl.kt index 732b288..501916d 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImpl.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImpl.kt @@ -194,7 +194,7 @@ class DiffFormatterImpl( val formatter = formatterProvider.getFormatter(entity::class) as EntityFormatter - val formattedEvent = event.maskProtectedFields(options) + val formattedEvent = event.maskProtectedFieldsUnlessRevealed(options) return terminalOutputFormatter.format( line = formatter.format(formattedEvent as DiffEvent, indent), @@ -207,10 +207,10 @@ class DiffFormatterImpl( } @Suppress("UNCHECKED_CAST") - private fun DiffEvent.maskProtectedFields( + private fun DiffEvent.maskProtectedFieldsUnlessRevealed( options: DiffFormatterOptions ): DiffEvent { - if (options.isPrintProtectedFields) { + if (options.isReveal) { return this } diff --git a/src/main/java/com/github/ai/kpdiff/domain/usecases/PrintHelpUseCase.kt b/src/main/java/com/github/ai/kpdiff/domain/usecases/PrintHelpUseCase.kt index 022feae..ad1c53f 100644 --- a/src/main/java/com/github/ai/kpdiff/domain/usecases/PrintHelpUseCase.kt +++ b/src/main/java/com/github/ai/kpdiff/domain/usecases/PrintHelpUseCase.kt @@ -43,8 +43,7 @@ class PrintHelpUseCase( -d, --diff-by Type of differ, default is 'path'. Possible values: path - produces more accurate diff, considers entries identical if they have identical content but UUID differs uuid - considers entries identical if they have identical content and UUID - --print-protected-fields Print values of protected fields such as passwords - --print-passwords Alias for --print-protected-fields + --reveal Reveal protected field values such as passwords -v, --verbose Print verbose output (entry fields will be printed) -V, --version Print version -h, --help Print help information diff --git a/src/main/java/com/github/ai/kpdiff/entity/Arguments.kt b/src/main/java/com/github/ai/kpdiff/entity/Arguments.kt index e5f68a0..4a0ca12 100644 --- a/src/main/java/com/github/ai/kpdiff/entity/Arguments.kt +++ b/src/main/java/com/github/ai/kpdiff/entity/Arguments.kt @@ -21,7 +21,7 @@ data class Arguments( val isPrintHelp: Boolean, val isPrintVersion: Boolean, val isVerboseOutput: Boolean, - val isPrintProtectedFields: Boolean + val isReveal: Boolean ) { companion object { @@ -44,7 +44,7 @@ data class Arguments( isPrintHelp = false, isPrintVersion = false, isVerboseOutput = false, - isPrintProtectedFields = false + isReveal = false ) } } diff --git a/src/main/java/com/github/ai/kpdiff/entity/DiffFormatterOptions.kt b/src/main/java/com/github/ai/kpdiff/entity/DiffFormatterOptions.kt index b9ed606..3bd91b0 100644 --- a/src/main/java/com/github/ai/kpdiff/entity/DiffFormatterOptions.kt +++ b/src/main/java/com/github/ai/kpdiff/entity/DiffFormatterOptions.kt @@ -3,5 +3,5 @@ package com.github.ai.kpdiff.entity data class DiffFormatterOptions( val isColorEnabled: Boolean = true, val isVerboseOutput: Boolean = false, - val isPrintProtectedFields: Boolean = false + val isReveal: Boolean = false ) diff --git a/src/main/java/com/github/ai/kpdiff/entity/MutableArguments.kt b/src/main/java/com/github/ai/kpdiff/entity/MutableArguments.kt index 16cfd85..b33fa56 100644 --- a/src/main/java/com/github/ai/kpdiff/entity/MutableArguments.kt +++ b/src/main/java/com/github/ai/kpdiff/entity/MutableArguments.kt @@ -19,5 +19,5 @@ data class MutableArguments( var isPrintHelp: Boolean = false, var isPrintVersion: Boolean = false, var isVerboseOutput: Boolean = false, - var isPrintProtectedFields: Boolean = false + var isReveal: Boolean = false ) diff --git a/src/test/java/com/github/ai/kpdiff/domain/MainInteractorTest.kt b/src/test/java/com/github/ai/kpdiff/domain/MainInteractorTest.kt index 2c02e2b..d71184f 100644 --- a/src/test/java/com/github/ai/kpdiff/domain/MainInteractorTest.kt +++ b/src/test/java/com/github/ai/kpdiff/domain/MainInteractorTest.kt @@ -270,7 +270,7 @@ class MainInteractorTest { isPrintHelp = isPrintHelp, isPrintVersion = isPrintVersion, isVerboseOutput = false, - isPrintProtectedFields = false + isReveal = false ) private fun newInteractor(): MainInteractor = diff --git a/src/test/java/com/github/ai/kpdiff/domain/argument/ArgumentParserTest.kt b/src/test/java/com/github/ai/kpdiff/domain/argument/ArgumentParserTest.kt index 51c5958..2bae23a 100644 --- a/src/test/java/com/github/ai/kpdiff/domain/argument/ArgumentParserTest.kt +++ b/src/test/java/com/github/ai/kpdiff/domain/argument/ArgumentParserTest.kt @@ -206,24 +206,19 @@ internal class ArgumentParserTest { @Test - fun `parse should return arguments if protected-field printing is specified`() { - listOf( - OptionalArgument.PRINT_PROTECTED_FIELDS.cliFullName, - OptionalArgument.PRINT_PASSWORDS.cliFullName - ).forEach { argumentName -> - assertParsedSuccessfully( - arguments = arrayOf( - LEFT_FILE_PATH, - RIGHT_FILE_PATH, - argumentName - ), - expectedArguments = newArguments( - LEFT_FILE_PATH, - RIGHT_FILE_PATH, - isPrintProtectedFields = true - ) + fun `parse should return arguments if --reveal is specified`() { + assertParsedSuccessfully( + arguments = arrayOf( + LEFT_FILE_PATH, + RIGHT_FILE_PATH, + OptionalArgument.REVEAL.cliFullName + ), + expectedArguments = newArguments( + LEFT_FILE_PATH, + RIGHT_FILE_PATH, + isReveal = true ) - } + ) } @Test @@ -697,7 +692,7 @@ internal class ArgumentParserTest { isPrintHelp: Boolean = false, isPrintVersion: Boolean = false, isVerboseOutput: Boolean = false, - isPrintProtectedFields: Boolean = false + isReveal: Boolean = false ): Arguments { return Arguments( leftPath = leftPath, @@ -718,7 +713,7 @@ internal class ArgumentParserTest { isPrintHelp = isPrintHelp, isPrintVersion = isPrintVersion, isVerboseOutput = isVerboseOutput, - isPrintProtectedFields = isPrintProtectedFields + isReveal = isReveal ) } diff --git a/src/test/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImplTest.kt b/src/test/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImplTest.kt index 14bb91b..670c9f5 100644 --- a/src/test/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImplTest.kt +++ b/src/test/java/com/github/ai/kpdiff/domain/diff/formatter/DiffFormatterImplTest.kt @@ -19,7 +19,7 @@ class DiffFormatterImplTest { listOf( Pair(defaultOptions(), newPathDiffer()) to OUTPUT, Pair(verboseOptions(), newPathDiffer()) to VERBOSE_OUTPUT, - Pair(printProtectedOptions(), newPathDiffer()) to VERBOSE_OUTPUT_WITH_PROTECTED_FIELDS + Pair(revealOptions(), newPathDiffer()) to REVEALED_VERBOSE_OUTPUT ).forEach { (data, expected) -> // arrange val (options, differ) = data @@ -54,11 +54,11 @@ class DiffFormatterImplTest { private fun verboseOptions(): DiffFormatterOptions = DiffFormatterOptions(isColorEnabled = false, isVerboseOutput = true) - private fun printProtectedOptions(): DiffFormatterOptions = + private fun revealOptions(): DiffFormatterOptions = DiffFormatterOptions( isColorEnabled = false, isVerboseOutput = true, - isPrintProtectedFields = true + isReveal = true ) companion object { @@ -129,7 +129,7 @@ class DiffFormatterImplTest { + Field 'Notes': '' """.transformOutput() - private val VERBOSE_OUTPUT_WITH_PROTECTED_FIELDS = VERBOSE_OUTPUT.map { line -> + private val REVEALED_VERBOSE_OUTPUT = VERBOSE_OUTPUT.map { line -> line.replace("Field 'Password': '***'", "Field 'Password': 'abc123'") } diff --git a/src/test/java/com/github/ai/kpdiff/domain/usecases/GetKeysUseCaseTest.kt b/src/test/java/com/github/ai/kpdiff/domain/usecases/GetKeysUseCaseTest.kt index 5701891..e269492 100644 --- a/src/test/java/com/github/ai/kpdiff/domain/usecases/GetKeysUseCaseTest.kt +++ b/src/test/java/com/github/ai/kpdiff/domain/usecases/GetKeysUseCaseTest.kt @@ -345,7 +345,7 @@ class GetKeysUseCaseTest { isPrintHelp = false, isPrintVersion = false, isVerboseOutput = false, - isPrintProtectedFields = false + isReveal = false ) } } \ No newline at end of file