Skip to content

Fix for issue #16 #18

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ dependencies {
testImplementation 'org.mockito:mockito-core:3.12.4'
testImplementation 'io.github.cdimascio:dotenv-java:3.0.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.1'
testImplementation 'org.wiremock:wiremock-standalone:3.13.1'
}

javadoc {
Expand Down
45 changes: 14 additions & 31 deletions src/main/java/Avalara/SDK/api/EInvoicing/V1/DocumentsApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,40 +23,23 @@
import Avalara.SDK.ApiClient;
import Avalara.SDK.ApiException;
import Avalara.SDK.ApiResponse;
import Avalara.SDK.Configuration;
import Avalara.SDK.Pair;
import Avalara.SDK.ProgressRequestBody;
import Avalara.SDK.ProgressResponseBody;
import Avalara.SDK.AvalaraMicroservice;


import com.google.gson.reflect.TypeToken;

import java.io.IOException;
import java.util.*;


import Avalara.SDK.model.EInvoicing.V1.BadDownloadRequest;
import Avalara.SDK.model.EInvoicing.V1.BadRequest;
import java.math.BigDecimal;
import Avalara.SDK.Pair;
import Avalara.SDK.model.EInvoicing.V1.DocumentFetch;
import Avalara.SDK.model.EInvoicing.V1.DocumentListResponse;
import Avalara.SDK.model.EInvoicing.V1.DocumentStatusResponse;
import Avalara.SDK.model.EInvoicing.V1.DocumentSubmissionError;
import Avalara.SDK.model.EInvoicing.V1.DocumentSubmitResponse;
import Avalara.SDK.model.EInvoicing.V1.FetchDocumentsRequest;
import java.io.File;
import Avalara.SDK.model.EInvoicing.V1.ForbiddenError;
import Avalara.SDK.model.EInvoicing.V1.InternalServerError;
import Avalara.SDK.model.EInvoicing.V1.NotFoundError;
import java.time.OffsetDateTime;
import Avalara.SDK.model.EInvoicing.V1.SubmitDocumentMetadata;

import com.google.gson.reflect.TypeToken;
import java.io.File;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.MissingFormatArgumentException;

public class DocumentsApi {
private ApiClient localVarApiClient;
Expand Down Expand Up @@ -140,20 +123,20 @@ public okhttp3.Call downloadDocumentCall(DownloadDocumentRequest requestParamete

if (requestParameters.getAccept() != null) {
localVarHeaderParams.put("Accept", localVarApiClient.parameterToString(requestParameters.getAccept()));
} else {
final String[] localVarAccepts = {
"application/pdf", "application/xml", "application/json"
};
final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
if (localVarAccept != null) {
localVarHeaderParams.put("Accept", localVarAccept);
}
}

if (requestParameters.getXAvalaraClient() != null) {
localVarHeaderParams.put("X-Avalara-Client", localVarApiClient.parameterToString(requestParameters.getXAvalaraClient()));
}

final String[] localVarAccepts = {
"application/pdf", "application/xml", "application/json"
};
final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
if (localVarAccept != null) {
localVarHeaderParams.put("Accept", localVarAccept);
}

final String[] localVarContentTypes = {

};
Expand Down
83 changes: 42 additions & 41 deletions src/test/java/Avalara/SDK/api/A1099/V2/A1099Test.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
package Avalara.SDK.api.A1099.V2;

import Avalara.SDK.*;
import Avalara.SDK.api.A1099.V2.Issuers1099Api;
import Avalara.SDK.api.A1099.V2.CompaniesW9Api;
import Avalara.SDK.api.A1099.V2.Forms1099Api;
import Avalara.SDK.api.A1099.V2.FormsW9Api;
import Avalara.SDK.model.A1099.V2.*;
import Avalara.SDK.ApiClient;
import Avalara.SDK.AvaTaxEnvironment;
import Avalara.SDK.Configuration;
import Avalara.SDK.model.A1099.V2.PaginatedQueryResultModelCompanyResponse;
import Avalara.SDK.model.A1099.V2.PaginatedQueryResultModelIssuerResponse;
import io.github.cdimascio.dotenv.Dotenv;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;


/**
* API tests for A1099 endpoints using JUnit.
*/
public class A1099Test {
class A1099Test {

private ApiClient apiClient;
private Issuers1099Api issuersApi;
private CompaniesW9Api companiesApi;
private Forms1099Api forms1099Api;

@Before
public void setUp() throws Exception {
@BeforeEach
void setUp() throws Exception {
// Load environment variables
Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load();

Expand All @@ -41,52 +42,52 @@ public void setUp() throws Exception {
}

@Test
public void testGetIssuers() throws Exception {
void testGetIssuers() throws Exception {
Issuers1099Api.GetIssuersRequest request = issuersApi.getGetIssuersRequest();
request.set$top(10);
request.set$skip(0);
request.setCount(true);
request.setXCorrelationId("2bbbed41-2466-4cf6-9cca-a3258bdc8eba");

PaginatedQueryResultModelIssuerResponse response = issuersApi.getIssuers(request);
Assert.assertNotNull(response);
Assert.assertNotNull(response.getValue());
Assertions.assertNotNull(response);
Assertions.assertNotNull(response.getValue());
}

@Test
public void testGetCompanies() throws Exception {
void testGetCompanies() throws Exception {
CompaniesW9Api.GetCompaniesRequest request = companiesApi.getGetCompaniesRequest();
request.set$top(10);
request.set$skip(0);
request.setCount(true);
request.setXCorrelationId("2bbbed41-2466-4cf6-9cca-a3258bdc8eba");

PaginatedQueryResultModelCompanyResponse response = companiesApi.getCompanies(request);
Assert.assertNotNull(response);
Assert.assertNotNull(response.getValue());
Assertions.assertNotNull(response);
Assertions.assertNotNull(response.getValue());
}

// @Test
// public void testList1099Forms() throws Exception {
// Forms1099Api.List1099FormsRequest request =
// forms1099Api.getList1099FormsRequest();
// request.set$top(10);
// request.set$skip(0);
// request.setXCorrelationId("2bbbed41-2466-4cf6-9cca-a3258bdc8eba");

// Form1099List response = forms1099Api.list1099Forms(request);
// Assert.assertNotNull(response);
// Assert.assertNotNull(response.getData());
// }

// @Test
// public void testListW9Forms() throws Exception {
// FormsW9Api.ListW9FormsRequest request = formsW9Api.getListW9FormsRequest();
// request.setTop(10);
// request.setSkip(0);

// ListW9FormsResponse response = formsW9Api.listW9Forms(request);
// Assert.assertNotNull(response);
// Assert.assertNotNull(response.getValue());
// }
// @Test
// void testList1099Forms() throws Exception {
// Forms1099Api.List1099FormsRequest request =
// forms1099Api.getList1099FormsRequest();
// request.set$top(10);
// request.set$skip(0);
// request.setXCorrelationId("2bbbed41-2466-4cf6-9cca-a3258bdc8eba");
//
// Form1099List response = forms1099Api.list1099Forms(request);
// Assertions.assertNotNull(response);
// Assertions.assertNotNull(response.getData());
// }
//
// @Test
// void testListW9Forms() throws Exception {
// FormsW9Api.ListW9FormsRequest request = formsW9Api.getListW9FormsRequest();
// request.setTop(10);
// request.setSkip(0);
//
// ListW9FormsResponse response = formsW9Api.listW9Forms(request);
// Assertions.assertNotNull(response);
// Assertions.assertNotNull(response.getValue());
// }
}
24 changes: 12 additions & 12 deletions src/test/java/Avalara/SDK/api/ApiClientHelperTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@
import Avalara.SDK.*;
import io.github.cdimascio.dotenv.Dotenv;
import org.jetbrains.annotations.NotNull;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

public class ApiClientHelperTest {
private Configuration configuration;
class ApiClientHelperTest {
private final Configuration configuration;

public ApiClientHelperTest() {
configuration = getConfiguration();
Expand All @@ -49,21 +49,21 @@ private Configuration getConfiguration() {


@Test
@Ignore("Not currently supported")
public void verifyDeviceAuthorizationFlow() throws Exception {
@Disabled("Not currently supported")
void verifyDeviceAuthorizationFlow() throws Exception {
DeviceAuthResponse response = ApiClientHelper.initiateDeviceAuthorizationOAuth(null, configuration);
DeviceAccessTokenResponse tokenResponse = ApiClientHelper.getAccessTokenForDeviceFlow(response.getDeviceCode(), configuration);
Assert.assertEquals(tokenResponse.getErrorMessage(),"authorization_pending");
Assertions.assertEquals("authorization_pending", tokenResponse.getErrorMessage());
}

@Test
@Ignore("For this test to run, you need to authenticate manually using user code by pausing the flow at line 145 and then proceed")
public void verifyRefreshTokenFlow() throws Exception {
@Disabled("For this test to run, you need to authenticate manually using user code by pausing the flow at line 145 and then proceed")
void verifyRefreshTokenFlow() throws Exception {
DeviceAuthResponse response = ApiClientHelper.initiateDeviceAuthorizationOAuth(null, configuration);
DeviceAccessTokenResponse tokenResponse = ApiClientHelper.getAccessTokenForDeviceFlow(response.getDeviceCode(), configuration);
String refreshToken = tokenResponse.getRefreshToken();
tokenResponse = ApiClientHelper.getAccessTokenUsingRefreshTokenForDeviceCodeFlow(refreshToken, configuration);
Assert.assertNotNull(tokenResponse.getIdToken());
Assert.assertNotNull(tokenResponse.getAccessToken());
Assertions.assertNotNull(tokenResponse.getIdToken());
Assertions.assertNotNull(tokenResponse.getAccessToken());
}
}
141 changes: 141 additions & 0 deletions src/test/java/Avalara/SDK/api/EInvoicing/V1/DocumentsApiTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package Avalara.SDK.api.EInvoicing.V1;

import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;

import Avalara.SDK.ApiClient;
import Avalara.SDK.ApiResponse;
import Avalara.SDK.AvaTaxEnvironment;
import Avalara.SDK.Configuration;
import Avalara.SDK.api.EInvoicing.V1.DocumentsApi.DownloadDocumentRequest;
import com.github.tomakehurst.wiremock.client.MappingBuilder;
import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo;
import com.github.tomakehurst.wiremock.junit5.WireMockTest;
import com.google.gson.reflect.TypeToken;
import java.io.File;
import java.util.List;
import okhttp3.Call;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import wiremock.org.apache.commons.io.FileUtils;

@WireMockTest
class DocumentsApiTest {


public static final byte[] RESPONSE_CONTENT = "Example".getBytes();
public static final String TRANSACTION_ID = "transactionId";
public static final String X_AVALARA_CLIENT = "X_AVALARA_CLIENT";
public static final String AVALARA_VERSION = "1.3";
public static final String CONTENT_TYPE = "Content-Type";

@Test
void shouldDownloadDocumentWithoutInputCheckAndNoAcceptHeaderDefined(WireMockRuntimeInfo wireMockRuntimeInfo) throws Exception {
// given
// setup wiremock
String contentType = "application/json";
setUpWiremock_OkWithAcceptedHeader(contentType);

// create documentApi
DocumentsApi documentsApi = setupDocumentApi(wireMockRuntimeInfo);

// when
DownloadDocumentRequest request = documentsApi.getDownloadDocumentRequest();
request.setDocumentId(TRANSACTION_ID);
request.setXAvalaraClient(X_AVALARA_CLIENT);
request.setAvalaraVersion(AVALARA_VERSION);
Call call = documentsApi.downloadDocumentCall(request, null);
ApiResponse<File> fileApiResponse = documentsApi.getApiClient().execute(call, new TypeToken<File>() {}.getType());


// then
Assertions.assertEquals(200, fileApiResponse.getStatusCode());
Assertions.assertEquals(List.of(contentType), fileApiResponse.getHeaders().get(CONTENT_TYPE));
File file = fileApiResponse.getData();
byte[] bytes = FileUtils.readFileToByteArray(file);
Assertions.assertArrayEquals(RESPONSE_CONTENT, bytes);
}


@Test
void shouldDownloadDocumentWithHttpInfoAsPdf(WireMockRuntimeInfo wireMockRuntimeInfo) throws Exception {
// given
// setup wiremock
String contentType = "application/pdf";
setUpWiremock_OkWithAcceptedHeader(contentType);

// create documentApi
DocumentsApi documentsApi = setupDocumentApi(wireMockRuntimeInfo);

// when
DownloadDocumentRequest request = documentsApi.getDownloadDocumentRequest();
request.setDocumentId(TRANSACTION_ID);
request.setXAvalaraClient(X_AVALARA_CLIENT);
request.setAvalaraVersion(AVALARA_VERSION);
request.setAccept(contentType);
ApiResponse<File> fileApiResponse = documentsApi.downloadDocumentWithHttpInfo(request);

// then
Assertions.assertEquals(200, fileApiResponse.getStatusCode());
Assertions.assertEquals(List.of(contentType), fileApiResponse.getHeaders().get(CONTENT_TYPE));
File file = fileApiResponse.getData();
byte[] bytes = FileUtils.readFileToByteArray(file);
Assertions.assertArrayEquals(RESPONSE_CONTENT, bytes);
}

@Test
void shouldDownloadDocumentWithHttpInfoAsXml(WireMockRuntimeInfo wireMockRuntimeInfo) throws Exception {
// given
// setup wiremock
String contentType = "application/xml";
setUpWiremock_OkWithAcceptedHeader(contentType);

// create documentApi
DocumentsApi documentsApi = setupDocumentApi(wireMockRuntimeInfo);

// when
DownloadDocumentRequest request = documentsApi.getDownloadDocumentRequest();
request.setDocumentId(TRANSACTION_ID);
request.setXAvalaraClient(X_AVALARA_CLIENT);
request.setAvalaraVersion(AVALARA_VERSION);
request.setAccept(contentType);
ApiResponse<File> fileApiResponse = documentsApi.downloadDocumentWithHttpInfo(request);

// then
Assertions.assertEquals(200, fileApiResponse.getStatusCode());
Assertions.assertEquals(List.of(contentType), fileApiResponse.getHeaders().get(CONTENT_TYPE));
File file = fileApiResponse.getData();
byte[] bytes = FileUtils.readFileToByteArray(file);
Assertions.assertArrayEquals(RESPONSE_CONTENT, bytes);
}

private static DocumentsApi setupDocumentApi(WireMockRuntimeInfo wireMockRuntimeInfo) throws Exception {
String httpBaseUrl = wireMockRuntimeInfo.getHttpBaseUrl();
Configuration configuration = new Configuration();
String bearerToken = "BearerToken";
configuration.setBearerToken(bearerToken);
configuration.setAppName("AppName");
configuration.setAppVersion("1.0");
configuration.setMachineName("MachineName");
configuration.setTimeout(20000);
configuration.setEnvironment(AvaTaxEnvironment.Test);
configuration.setTokenUrl(httpBaseUrl);
configuration.setTestBasePath(httpBaseUrl);
ApiClient apiClient = new ApiClient(configuration);
DocumentsApi documentsApi = new DocumentsApi(apiClient);
return documentsApi;
}

private static void setUpWiremock_OkWithAcceptedHeader(String contentType) {
MappingBuilder mappingBuilder = WireMock.get(urlPathMatching("/einvoicing/documents/transactionId/\\$download"))
.withHeader("Accept", equalTo(contentType));
ResponseDefinitionBuilder responseBuilder = aResponse().withStatus(200)
.withHeader(CONTENT_TYPE, contentType)
.withBody(RESPONSE_CONTENT);
stubFor(mappingBuilder.willReturn(responseBuilder));
}
}
Loading