package jdrivesync.gdrive;
import com.google.api.client.auth.oauth2.Credential;
import jdrivesync.cli.Options;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;
@RunWith(PowerMockRunner.class)
@PrepareForTest(Credential.class)
public class CredentialStoreTest {
@Test
public void testAuthFileCreatedAtGivenLocation() {
Options options = new Options();
Path path = Paths.get(System.getProperty("user.dir"), "target", "credential-store-test.properties");
options.setAuthenticationFile(Optional.of(path.toString()));
CredentialStore credentialStore = new CredentialStore(options);
Credential credential = mock(Credential.class);
when(credential.getAccessToken()).thenReturn("");
when(credential.getRefreshToken()).thenReturn("");
credentialStore.store(credential);
assertThat(Files.exists(path), is(true));
}
@Test
public void testAuthFileLoadedFromGivenLocation() throws IOException {
Path path = Paths.get(System.getProperty("user.dir"), "target", "credentialOptional-store-test.properties");
List<String> lines = Arrays.asList("accessToken=at", "refreshToken=rf");
Files.write(path, lines, Charset.defaultCharset());
Options options = new Options();
options.setAuthenticationFile(Optional.of(path.toString()));
CredentialStore credentialStore = new CredentialStore(options);
Optional<Credential> credentialOptional = credentialStore.load();
assertThat(credentialOptional.isPresent(), is(true));
Credential credential = credentialOptional.get();
assertThat(credential.getAccessToken(), is("at"));
assertThat(credential.getRefreshToken(), is("rf"));
}
}