package keywhiz.cli.commands; import com.google.common.collect.ImmutableMap; import java.util.Arrays; import keywhiz.api.ApiDate; import keywhiz.api.model.SanitizedSecret; import keywhiz.api.model.Secret; import keywhiz.cli.Printing; import keywhiz.cli.configs.ListVersionsActionConfig; import keywhiz.client.KeywhizClient; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class ListVersionsActionTest { @Rule public MockitoRule mockito = MockitoJUnit.rule(); @Mock KeywhizClient keywhizClient; @Mock Printing printing; ListVersionsActionConfig listVersionsActionConfig; ListVersionsAction listVersionsAction; private static final ApiDate NOW = ApiDate.now(); Secret secret = new Secret(0, "secret", null, () -> "c2VjcmV0MQ==", "checksum", NOW, null, NOW, null, null, null, ImmutableMap.of(), 0, 1L); SanitizedSecret sanitizedSecret = SanitizedSecret.fromSecret(secret); @Before public void setUp() { listVersionsActionConfig = new ListVersionsActionConfig(); listVersionsAction = new ListVersionsAction(listVersionsActionConfig, keywhizClient, printing); } @Test public void listVersionsCallsPrint() throws Exception { listVersionsActionConfig.name = secret.getDisplayName(); listVersionsActionConfig.idx = 5; listVersionsActionConfig.number = 15; when(keywhizClient.getSanitizedSecretByName(secret.getDisplayName())).thenReturn(sanitizedSecret); listVersionsAction.run(); verify(printing).printSecretVersions(keywhizClient.listSecretVersions("test-secret", 5, 15), 1L); } @Test public void listVersionsUsesDefaults() throws Exception { listVersionsActionConfig.name = secret.getDisplayName(); when(keywhizClient.getSanitizedSecretByName(secret.getDisplayName())).thenReturn(sanitizedSecret); listVersionsAction.run(); verify(printing).printSecretVersions(keywhizClient.listSecretVersions("test-secret", 0, 10), 1L); } @Test(expected = AssertionError.class) public void listVersionsThrowsIfSecretDoesNotExist() throws Exception { listVersionsActionConfig.name = secret.getDisplayName(); when(keywhizClient.getSanitizedSecretByName(secret.getDisplayName())).thenThrow(new KeywhizClient.NotFoundException()); listVersionsAction.run(); } @Test (expected = IllegalArgumentException.class) public void listVersionsThrowsIfNoSecretSpecified() throws Exception { listVersionsActionConfig.name = null; listVersionsAction.run(); } @Test(expected = IllegalArgumentException.class) public void listVersionsValidatesSecretName() throws Exception { listVersionsActionConfig.name = "Invalid Name"; listVersionsAction.run(); } }