From 653ce6afb3b5a556160a5cf3ec9f7464f3bff2a7 Mon Sep 17 00:00:00 2001 From: Jonathan Wenger Date: Fri, 9 Aug 2024 20:26:35 -0700 Subject: [PATCH] Revert "Merge pull request #245 from jamespfluger-ava/feat/dotnet-6-and-dotnet-8" This reverts commit df11c95587a968a7da696dc33942c477bce1344f, reversing changes made to 1da45db3507f3f9b7e48fb91a1d58b9ec9deba38. --- Avalara.AvaTax.RestClient.sln | 31 --- src/AvaTaxOfflineHelper.cs | 3 +- src/Avalara.AvaTax.RestClient.csproj | 109 +++++----- tests/Avalara.AvaTax.RestClient.Test.csproj | 83 ++++---- tests/net6.0/BatchTests.cs | 198 ------------------ tests/net6.0/CertificateTests.cs | 144 ------------- tests/net6.0/ErrorResultTests.cs | 57 ------ tests/net6.0/FreeTaxRatesTest.cs | 97 --------- tests/net6.0/HttpClientTransactionTests.cs | 204 ------------------- tests/net6.0/NexusTests.cs | 169 ---------------- tests/net6.0/SetUpFixture.cs | 51 ----- tests/net6.0/TestBase.cs | 103 ---------- tests/net6.0/TransactionTests.cs | 211 -------------------- tests/net8.0/BatchTests.cs | 198 ------------------ tests/net8.0/CertificateTests.cs | 144 ------------- tests/net8.0/ErrorResultTests.cs | 57 ------ tests/net8.0/FreeTaxRatesTest.cs | 97 --------- tests/net8.0/HttpClientTransactionTests.cs | 204 ------------------- tests/net8.0/NexusTests.cs | 169 ---------------- tests/net8.0/SetUpFixture.cs | 51 ----- tests/net8.0/TestBase.cs | 103 ---------- tests/net8.0/TransactionTests.cs | 211 -------------------- 22 files changed, 97 insertions(+), 2597 deletions(-) delete mode 100644 Avalara.AvaTax.RestClient.sln delete mode 100644 tests/net6.0/BatchTests.cs delete mode 100644 tests/net6.0/CertificateTests.cs delete mode 100644 tests/net6.0/ErrorResultTests.cs delete mode 100644 tests/net6.0/FreeTaxRatesTest.cs delete mode 100644 tests/net6.0/HttpClientTransactionTests.cs delete mode 100644 tests/net6.0/NexusTests.cs delete mode 100644 tests/net6.0/SetUpFixture.cs delete mode 100644 tests/net6.0/TestBase.cs delete mode 100644 tests/net6.0/TransactionTests.cs delete mode 100644 tests/net8.0/BatchTests.cs delete mode 100644 tests/net8.0/CertificateTests.cs delete mode 100644 tests/net8.0/ErrorResultTests.cs delete mode 100644 tests/net8.0/FreeTaxRatesTest.cs delete mode 100644 tests/net8.0/HttpClientTransactionTests.cs delete mode 100644 tests/net8.0/NexusTests.cs delete mode 100644 tests/net8.0/SetUpFixture.cs delete mode 100644 tests/net8.0/TestBase.cs delete mode 100644 tests/net8.0/TransactionTests.cs diff --git a/Avalara.AvaTax.RestClient.sln b/Avalara.AvaTax.RestClient.sln deleted file mode 100644 index 5cc2f5c..0000000 --- a/Avalara.AvaTax.RestClient.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.10.35004.147 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalara.AvaTax.RestClient", "src\Avalara.AvaTax.RestClient.csproj", "{F0EEC671-76CD-47C3-8671-FA178139B2A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalara.AvaTax.RestClient.Tests", "tests\Avalara.AvaTax.RestClient.Tests.csproj", "{88267F39-00E4-4D70-8E76-EA601E43CCA0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F0EEC671-76CD-47C3-8671-FA178139B2A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F0EEC671-76CD-47C3-8671-FA178139B2A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0EEC671-76CD-47C3-8671-FA178139B2A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F0EEC671-76CD-47C3-8671-FA178139B2A9}.Release|Any CPU.Build.0 = Release|Any CPU - {88267F39-00E4-4D70-8E76-EA601E43CCA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88267F39-00E4-4D70-8E76-EA601E43CCA0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88267F39-00E4-4D70-8E76-EA601E43CCA0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88267F39-00E4-4D70-8E76-EA601E43CCA0}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EF80143E-E986-4C4B-9401-395AF44EF2FE} - EndGlobalSection -EndGlobal diff --git a/src/AvaTaxOfflineHelper.cs b/src/AvaTaxOfflineHelper.cs index 42d1f1b..14f2806 100644 --- a/src/AvaTaxOfflineHelper.cs +++ b/src/AvaTaxOfflineHelper.cs @@ -145,8 +145,7 @@ private static void WriteZipRateFile(TaxRateModel zipRate, string zip, string pa TextWriter writer = null; try { - DirectoryInfo directory = new DirectoryInfo(path); - directory.GetAccessControl(); + Directory.GetAccessControl(path); var content = JsonConvert.SerializeObject(zipRate); writer = new StreamWriter(Path.Combine(path, zip + ".json")); writer.Write(content); diff --git a/src/Avalara.AvaTax.RestClient.csproj b/src/Avalara.AvaTax.RestClient.csproj index ef9e425..8a8c95c 100644 --- a/src/Avalara.AvaTax.RestClient.csproj +++ b/src/Avalara.AvaTax.RestClient.csproj @@ -1,14 +1,12 @@  + net20;net45;net461;net472;netstandard1.6;netstandard2.0 false - net20;net45;net461;net472;netstandard1.6;netstandard2.0;net6.0;net8.0 false true Avalara.AvaTax.RestClient.snk - - NETFRAMEWORK;TRACE;DEBUG;NET20 false @@ -17,9 +15,8 @@ NETFRAMEWORK;TRACE;RELEASE;NET20 true - - - + + NETFRAMEWORK;TRACE;DEBUG;PORTABLE;NET45 false @@ -28,9 +25,8 @@ NETFRAMEWORK;TRACE;RELEASE;PORTABLE;NET45 true - - + NETFRAMEWORK;TRACE;DEBUG;PORTABLE;NET461 true @@ -39,85 +35,80 @@ NETFRAMEWORK;TRACE;RELEASE;PORTABLE;NET461 true - - + NETFRAMEWORK;TRACE;DEBUG;PORTABLE;NET472 true + NETFRAMEWORK;TRACE;RELEASE;PORTABLE;NET472 true - - - + TRACE;DEBUG;PORTABLE;NETSTANDARD1_6 true + TRACE;RELEASE;PORTABLE;NETSTANDARD1_6 true - - - + TRACE;DEBUG;PORTABLE;NETSTANDARD2_0 true - + + TRACE;RELEASE;PORTABLE;NETSTANDARD2_0 true - - - TRACE;DEBUG;PORTABLE;NET6_0 - true - - - TRACE;RELEASE;PORTABLE;NET6_0 - true - - - - - - TRACE;DEBUG;PORTABLE;NET8_0 - true - - - TRACE;RELEASE;PORTABLE;NET8_0 - true - - - - - + - - - - - - - - Properties\GlobalAssemblyInfo.cs - - - - - - - - - - + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + + + + diff --git a/tests/Avalara.AvaTax.RestClient.Test.csproj b/tests/Avalara.AvaTax.RestClient.Test.csproj index 3f0176b..1864a8a 100644 --- a/tests/Avalara.AvaTax.RestClient.Test.csproj +++ b/tests/Avalara.AvaTax.RestClient.Test.csproj @@ -1,79 +1,88 @@  - net451;net45;net461;net472;netcoreapp2.2.8;netcoreapp3.1;net6.0;net8.0 + net451;net45;net461;net472;netcoreapp2.2;netcoreapp3.1 false - + + + + + + + + + + + + - - - - - + + - - - + + + + + TargetFramework=net20 - - + + + + + TargetFramework=net45 - - + + + + + TargetFramework=net461 - - + + + + + TargetFramework=net472 - - - + + + + + + TargetFramework=netstandard1.6 - - + + + + + TargetFramework=netstandard2.0 - - - - - - TargetFramework=net6.0 - - - - - - - - TargetFramework=net6.0 - - \ No newline at end of file diff --git a/tests/net6.0/BatchTests.cs b/tests/net6.0/BatchTests.cs deleted file mode 100644 index dceff99..0000000 --- a/tests/net6.0/BatchTests.cs +++ /dev/null @@ -1,198 +0,0 @@ -using Avalara.AvaTax.RestClient; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - [TestFixture] - public class BatchTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try - { - // Create a client and set up authentication - Client = new AvaTaxClient(typeof(TransactionTests).Name, - typeof(TransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString("N").Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Hardware Store", - title = "Owner/CEO" - }); - - // Add a delay after creating a company - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try - { - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in TearDown: " + ex); - } - } - #endregion - - /// - /// - /// - [Test] - public async Task BatchesWorkflow() - { - // Raw batch CSV string. - const string transactionImport = @"ProcessCode,DocCode,DocType,DocDate,CompanyCode,CustomerCode,EntityUseCode,LineNo,TaxCode,TaxDate,ItemCode,Description,Qty,Amount,Discount,Ref1,Ref2,ExemptionNo,RevAcct,DestAddress,DestCity,DestRegion,DestPostalCode,DestCountry,OrigAddress,OrigCity,OrigRegion,OrigPostalCode,OrigCountry,LocationCode,SalesPersonCode,PurchaseOrderNo,CurrencyCode,ExchangeRate,ExchangeRateEffDate,PaymentDate,TaxIncluded,DestTaxRegion,OrigTaxRegion,Taxable,TaxType,TotalTax,CountryName,CountryCode,CountryRate,CountryTax,StateName,StateCode,StateRate,StateTax,CountyName,CountyCode,CountyRate,CountyTax,CityName,CityCode,CityRate,CityTax,Other1Name,Other1Code,Other1Rate,Other1Tax,Other2Name,Other2Code,Other2Rate,Other2Tax,Other3Name,Other3Code,Other3Rate,Other3Tax,Other4Name,Other4Code,Other4Rate,Other4Tax,ReferenceCode,BuyersVATNo -3,BS1323154187029MG10,2,16-Apr-14,,029MG10,,0000000001,SR060100,06-May-14,6500,REPAIRS & MAINTENANCE,,1980,,,0,,6500,119 N. 72nd St.,Omaha,NE,68114,,6923 MAPLE ST,OMAHA,NE,68104,,029,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS1323158772194036MAC1,2,04-Apr-14,,036MAC1,,0000000001,SC150158,06-May-14,6505,R&M HEAT / VENT / AIR COND,,322.26,,,0,,6505,1200 E. Mall Drive,Holland,OH,43528,,2875 CRANE WAY,NORTHWOOD,OH,43619,,036,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS1323159W206409036MLK,2,25-Mar-14,,036MLK,,0000000001,SR060100,06-May-14,6507,R&M OTHER,,449,,,31.43,,6507,1200 E. Mall Drive,Holland,OH,43528,,1214 JEFFERSON AVE,TOLEDO,OH,43604,,036,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231601596048MRP2,2,02-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,60,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231631591048MRP2,2,02-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,58,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231611594048MRP2,2,01-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,65,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231621593048MRP2,2,01-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,75,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231641587048MRP2,2,01-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,60,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231651582048MRP2,2,15-Mar-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,47,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"; - - // Let's Create the file portion of the batch request. - var batchFileModel = new BatchFileModel - { - name = "TransactionImport.csv", - content = Encoding.UTF8.GetBytes(transactionImport), - contentType = "text/csv", - fileExtension = "csv" - }; - - // Create the bare-minimum batch header info. - var batchRequest = new BatchModel - { - name = "AutomationTestBatch", - type = BatchType.TransactionImport, - files = new List { batchFileModel } - }; - - // Send the batch! - try - { - var batchResult = Client.CreateBatches(TestCompany.id, new List { batchRequest }); - Assert.NotNull(batchResult, "Batch not sent."); - Assert.True(batchResult.Count > 0, "No batches created."); - - // Check that the batch comes out of Waiting state using a linear backoff strategy. - var waiting = true; - BatchModel batchFetchResult = null; - for (var i = 1; i < 6; ++i) - { - await Task.Delay(i * 1000); - - batchFetchResult = Client.GetBatch(TestCompany.id, batchResult[0].id.Value); - Assert.NotNull(batchFetchResult, "Batch fetch unsuccessful."); - if (batchFetchResult.status.Value == BatchStatus.Waiting) continue; - waiting = false; - break; - } - Assert.True(waiting == false, $"Batch waiting too long. Check BatchId: {batchResult[0].id}"); - - // This batch is no longer in the Waiting state. Let's see it process. - var processing = true; - for (var i = 1; i < 11; ++i) - { - await Task.Delay(i * 1000); - - batchFetchResult = Client.GetBatch(TestCompany.id, batchResult[0].id.Value); - Assert.NotNull(batchFetchResult, "Batch fetch unsuccessful."); - if (batchFetchResult.status.Value == BatchStatus.Processing) continue; - processing = false; - break; - } - Assert.True(processing == false, $"Batch processing too long. Check BatchId: {batchResult[0].id}"); - - // This batch is done processing. - Assert.True((batchFetchResult.status.Value == BatchStatus.Errors || batchFetchResult.status.Value == BatchStatus.Completed), - $"BatchId: {batchResult[0].id} should either complete or error out."); - // Ensure that the number of records matches what we sent in. - Assert.AreEqual(9, batchFetchResult.currentRecord.Value); - - // Alright. Time to download the sent batch file. - var fileResult = Client.DownloadBatch(TestCompany.id, batchFetchResult.id.Value, batchFetchResult.files[0].id.Value); - Assert.NotNull(fileResult); - - // Compare what we got back with what we sent. - Assert.AreEqual(batchFetchResult.name + ".Input.CSV; filename*=UTF-8''" + batchFetchResult.name + ".Input.CSV", fileResult.Filename); - Assert.AreEqual(batchFileModel.content, fileResult.Data); - Assert.AreEqual(batchFileModel.contentType, fileResult.ContentType); - } catch (AvaTaxError e) - { - Assert.True(false, $"AvaTaxError: {e.error.error.details?[0].message}"); - } catch (Exception e) - { - Assert.True(false, $"Unknown Exception! {e.Message}"); - } - } - } -} diff --git a/tests/net6.0/CertificateTests.cs b/tests/net6.0/CertificateTests.cs deleted file mode 100644 index be1739f..0000000 --- a/tests/net6.0/CertificateTests.cs +++ /dev/null @@ -1,144 +0,0 @@ -using Avalara.AvaTax.RestClient; -using Newtonsoft.Json; -using NUnit.Framework; -using System; -using System.IO; -using System.Net; -using System.Reflection; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - [TestFixture] - public class CertificateTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public int DefaultCompanyId { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try { - // Create a client and set up authentication - Client = new AvaTaxClient(typeof(CertificateTests).Name, - typeof(CertificateTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - //Get the default company. - var defaultCompanyModel = Client.QueryCompanies(string.Empty, "isDefault EQ true", null, null, string.Empty).value[0]; - - DefaultCompanyId = defaultCompanyModel.id; - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString().Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Greatest Popcorn", - title = "Owner/CEO" - }); - - // Add a delay - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try { - - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) { - Assert.Fail("Exception in TearDown: " + ex); - } - } - #endregion - - /// - /// Tests the upload certificate image endpoint. - /// - [Test] - [Ignore("Ignore CertificateImageUploadTest")] - public void CertificateImageUploadTest() - { - //Get the cert number. The account needs to have CertCapture - //be provisioned, already have a certificate created, and the - //certificate needs to be valid. - var certs = Client.QueryCertificates(DefaultCompanyId, string.Empty, "valid EQ true", null, null, string.Empty).value; - var certId = certs[0].id.Value; - - //Get an image. - byte[] jpegByteArr = File.ReadAllBytes(Environment.GetEnvironmentVariable("TEST_IMAGE_PATH")); - - FileResult fileResult = new FileResult() - { - ContentType = "multipart/form-data", - Filename = "test_cert_image.jpg", - Data = jpegByteArr - }; - - //Send request. - var certUploadResult = Client.UploadCertificateImage(DefaultCompanyId, certId, fileResult); - - //Response should be "OK" - Assert.True(string.Equals(certUploadResult, "\"OK\"")); - - //Test download of image attachment. - var certAttachment = Client.DownloadCertificateImage(DefaultCompanyId, certId, null, CertificatePreviewType.Pdf); - Assert.NotNull(certAttachment); - Assert.True(string.Equals(certAttachment.ContentType, "application/pdf")); - Assert.True(certAttachment.Data.Length > 1000); - - } - } -} diff --git a/tests/net6.0/ErrorResultTests.cs b/tests/net6.0/ErrorResultTests.cs deleted file mode 100644 index 6626028..0000000 --- a/tests/net6.0/ErrorResultTests.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using Avalara.AvaTax.RestClient; -using NUnit.Framework; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - [TestFixture] - public class ErrorResultTests : TestBase - { - [Test] - public async Task NonJsonErrorResult() - { - AvaTaxError avataxError = null; - try - { - // make a client that points to a server that will give a 404 for ping - var client = new AvaTaxClient(GetType().Name, - GetType().GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, new Uri("https://www.google.com")); - - var result = await client.PingAsync().ConfigureAwait(false); - } - catch (AvaTaxError e) - { - avataxError = e; - } - - Assert.NotNull(avataxError); - Assert.True(avataxError.error.error.message.Contains("the response is in an unexpected format")); - Assert.True(avataxError.error.error.details[0].description.ToLower().Contains("not found")); - } - - [Test] - public async Task JsonErrorResult() - { - AvaTaxError avataxError = null; - try - { - var result = await _client.ChangePasswordAsync(new PasswordChangeModel - { - }).ConfigureAwait(false); - } - catch (AvaTaxError e) - { - avataxError = e; - } - - Assert.NotNull(avataxError); - Assert.True(avataxError.error.error.message.Contains("Field oldPassword is required")); - } - } -} diff --git a/tests/net6.0/FreeTaxRatesTest.cs b/tests/net6.0/FreeTaxRatesTest.cs deleted file mode 100644 index 1b0ff67..0000000 --- a/tests/net6.0/FreeTaxRatesTest.cs +++ /dev/null @@ -1,97 +0,0 @@ -using Avalara.AvaTax.RestClient; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - [TestFixture] - class FreeTaxRatesTest - { - public AvaTaxClient _client; - - #region Setup / Teardown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try { - // Create a client and set up authentication - _client = new AvaTaxClient(typeof(TransactionTests).Name, - typeof(TransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - } catch (Exception ex) { - Assert.Fail("Exception in SetUp: " + ex); - } - } - #endregion - - [Test] - public async Task FreeTaxRates() - { - // Call TaxRates for a few addresses and verify that the rates are nonzero - var tr = await _client.TaxRatesByAddressAsync("123 Main Street", null, null, "Irvine", "CA", "92615", "US"); - Assert.NotNull(tr); - Assert.True(tr.totalRate > 0.05m); - - // Washington - tr = await _client.TaxRatesByAddressAsync("522 Stadium Pl S", null, null, "Seattle", "WA", "98104", "US"); - Assert.NotNull(tr); - Assert.True(tr.totalRate > 0.05m); - - // By postal code for New York - tr = await _client.TaxRatesByPostalCodeAsync("US", "10010"); - Assert.NotNull(tr); - Assert.True(tr.totalRate > 0.05m); - } - - /// - /// Test the local rate by ZIP storage and retrieval. - /// - [Test] - [Ignore("This test will fail in Travis")] - public void StoreRatesByZipTest() - { - string path = Environment.GetEnvironmentVariable("ZIP_RATE_FILE_STORAGE_PATH"); - List zips = new List() { "12590", "98104" }; - - //Call the content caching helper. - AvaTaxOfflineHelper.StoreZipRateContent(_client, "US", zips, path); - - //Verify that the files were stored locally. - bool zipRateExists = AvaTaxOfflineHelper.VerifyLocalZipRateAvailable(zips[0], path); - Assert.True(zipRateExists); - zipRateExists = AvaTaxOfflineHelper.VerifyLocalZipRateAvailable(zips[1], path); - Assert.True(zipRateExists); - - //Verify that a bogus file does not exist locally. - zipRateExists = AvaTaxOfflineHelper.VerifyLocalZipRateAvailable("bogusZipFile.json", path); - Assert.False(zipRateExists); - - //Verify that the local file can be used for rate calculation. - var zipTaxRate = AvaTaxOfflineHelper.GetLocalTaxRateByZip(zips[1], path); - Assert.NotNull(zipTaxRate); - decimal result = 9.99m * zipTaxRate.totalRate.Value; - Assert.NotZero(result); - - //Test AvaTaxOfflineHelper Exception handling. - path = @"n:\someBadPath"; - try { - AvaTaxOfflineHelper.StoreZipRateContent(_client, "US", zips, path); - } catch (AvaTaxOfflineHelperException exc) { -#if PORTABLE - Assert.True(string.Equals(exc.InnerException.Message, "Could not find a part of the path 'n:\\someBadPath\\12590.json'.")); -#else - Assert.True(string.Equals(exc.Message, "An error occurred retrieving or storing the rate content. Please see inner exception for details.")); -#endif - } - } - } -} diff --git a/tests/net6.0/HttpClientTransactionTests.cs b/tests/net6.0/HttpClientTransactionTests.cs deleted file mode 100644 index 80af650..0000000 --- a/tests/net6.0/HttpClientTransactionTests.cs +++ /dev/null @@ -1,204 +0,0 @@ -using Avalara.AvaTax.RestClient; -using Newtonsoft.Json; -using NUnit.Framework; -using System; -using System.Net; -using System.Reflection; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - [TestFixture] - public class HttpClientTransactionTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try - { - var httpClient = new System.Net.Http.HttpClient() { Timeout = TimeSpan.FromMinutes(20) }; - // Create a client and set up authentication - Client = new AvaTaxClient(httpClient, typeof(HttpClientTransactionTests).Name, - typeof(HttpClientTransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString().Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Greatest Popcorn", - title = "Owner/CEO" - }); - - // Add a delay - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try - { - - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in TearDown: " + ex); - } - } - #endregion - - /// - /// To debug this application, call app must be called with args[0] as username and args[1] as password - /// - [Test] - public void TransactionWorkflow() - { - Client.CallCompleted += Client_CallCompleted; - var tfn = System.IO.Path.GetTempFileName(); - Client.LogToFile(tfn); - - // Execute a transaction - var transaction = new TransactionBuilder(Client, TestCompany.companyCode, DocumentType.SalesInvoice, "ABC") - .WithAddress(TransactionAddressType.SingleLocation, "521 S Weller St", null, null, "Seattle", "WA", - "98104", "US") - .WithLine(100.0m, 1, "P0000000") - .WithLine(200m) - .WithExemptLine(50m, "NT") - .WithLineReference("Special Line Reference!", "Also this!") - .Create(); - - // Verify that the call was captured and logged - Assert.NotNull(lastEvent); - Assert.True(String.Equals(lastEvent.HttpVerb, "POST", StringComparison.CurrentCultureIgnoreCase)); - Assert.True(String.Equals(lastEvent.RequestUri.ToString(), "https://sandbox-rest.avatax.com/api/v2/transactions/create", StringComparison.CurrentCultureIgnoreCase)); - Assert.AreEqual(lastEvent.Code, HttpStatusCode.Created); - - // Verify that the log file was created - Assert.True(System.IO.File.Exists(tfn)); - - // Ensure this transaction was created, and has three lines, and has some tax - Assert.NotNull(transaction, "Transaction should have been created"); - Assert.True(transaction.totalTax > 0.0m, "Transaction should have had some tax"); - Assert.True(transaction.lines.Count == 3, "Transaction should have three lines"); - Assert.True(transaction.lines[2].ref1.Contains("Reference!"), "Line3 should have had a Ref1."); - - // Now commit that transaction - var commitResult = Client.CommitTransaction(TestCompany.companyCode, transaction.code, null, null, new CommitTransactionModel() { commit = true }); - - // Ensure that this transaction was committed - Assert.NotNull(commitResult, "Should have been able to call CommitTransaction"); - Assert.True(commitResult.status == DocumentStatus.Committed, "Transaction should have been committed"); - - // Now void the transaction - var voidResult = Client.VoidTransaction(TestCompany.companyCode, transaction.code, null, null, new VoidTransactionModel() - { - code = VoidReasonCode.DocVoided - }); - - // Ensure that the transaction was voided - Assert.NotNull(voidResult, "Should have been able to call VoidTransactoin"); - Assert.True(voidResult.status == DocumentStatus.Cancelled, "Transaction should have been voided"); - } - - private AvaTaxCallEventArgs lastEvent = null; - private void Client_CallCompleted(object sender, EventArgs e) - { - lastEvent = e as AvaTaxCallEventArgs; - } - - [Test] - - public void TaxOverrideExample() - { - // Create base transaction. - var builder = new TransactionBuilder(Client, TestCompany.companyCode, DocumentType.SalesInvoice, - "TaxOverrideCustomerCode") - .WithAddress(TransactionAddressType.SingleLocation, "521 S Weller St", null, null, "Seattle", "WA", - "98104", "US") - .WithLine(100.0m, 1, "P0000000") - .WithLine(200m); - - var transaction = builder.Create(); - - // Ensure this transaction was created. - Assert.NotNull(transaction, "Transaction should have been created"); - - // Add Line-level TaxOverride. - var overrideTransaction = builder - .WithLineTaxOverride(TaxOverrideType.TaxAmount, "Tax Override Reason", 1) - .Create(); - - // Ensure this transaction was created. - Assert.NotNull(overrideTransaction, "Transaction should have been created"); - - // Compare the two transactions. - Assert.AreEqual(overrideTransaction.totalTaxCalculated, transaction.totalTaxCalculated, "Total Tax Calculated should be the same."); - Assert.True(overrideTransaction.totalTax < transaction.totalTax, "Total Tax should not be the same. Overridden transaction should be smaller."); - - // Compare the transaction lines. - var overrideLine = overrideTransaction.lines[1]; - var line = transaction.lines[1]; - Assert.AreEqual(overrideLine.isItemTaxable, line.isItemTaxable); - Assert.AreEqual(overrideLine.taxCalculated, line.taxCalculated); - Assert.AreEqual(overrideLine.lineAmount, line.lineAmount); - Assert.AreEqual(1, overrideLine.tax); - Assert.True(overrideLine.tax < line.tax); - Assert.AreEqual(TaxOverrideType.TaxAmount, overrideLine.taxOverrideType); - } - } -} diff --git a/tests/net6.0/NexusTests.cs b/tests/net6.0/NexusTests.cs deleted file mode 100644 index 39e3c81..0000000 --- a/tests/net6.0/NexusTests.cs +++ /dev/null @@ -1,169 +0,0 @@ -using Avalara.AvaTax.RestClient; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - [TestFixture] - [Ignore("This test is not yet implemented")] - public class NexusTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try { - // Create a client and set up authentication - Client = new AvaTaxClient(typeof(TransactionTests).Name, - typeof(TransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString().Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Greatest Popcorn", - title = "Owner/CEO" - }); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) { - Assert.Fail("Exception in SetUp: " + ex.ToString()); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try { - - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) { - Assert.Fail("Exception in TearDown: " + ex.ToString()); - } - } - #endregion - - [Test] - public void CreateAndDeleteNexus() - { - var nexusModels = new List(); - - var stateNexus = new NexusModel - { - id = 0, - companyId = TestCompany.id, - country = "US", - region = "AL", - jurisTypeId = JurisTypeId.STA, - jurisCode = "01", - jurisName = "ALABAMA", - shortName = "AL", - signatureCode = "", - stateAssignedNo = "", - nexusTypeId = NexusTypeId.SalesOrSellersUseTax, - hasLocalNexus = true, - hasPermanentEstablishment = true, - effectiveDate = new DateTime(2008, 07, 01), - endDate = new DateTime(2019, 07, 01) - }; - - var cityNexus = new NexusModel - { - id = 0, - companyId = TestCompany.id, - country = "US", - region = "AL", - jurisTypeId = JurisTypeId.CIT, - jurisCode = "00124", - jurisName = "ABBEVILLE", - shortName = "ABBEVILLE", - signatureCode = "", - stateAssignedNo = "9356", - nexusTypeId = NexusTypeId.SalesTax, - hasLocalNexus = true, - hasPermanentEstablishment = false, - effectiveDate = new DateTime(2008, 07, 01), - endDate = new DateTime(2018, 07, 01) - }; - - nexusModels.Add(stateNexus); - nexusModels.Add(cityNexus); - - var nexusModelsAdded = Client.CreateNexus(TestCompany.id, new List { stateNexus, cityNexus }); - - // Get State nexus - NexusModel getALNexus = null; - try { - getALNexus = Client.GetNexus(TestCompany.id, nexusModelsAdded[0].id.Value, null); - } catch (Exception) { } - Assert.NotNull(getALNexus); - - var fetchedUSNexus = new List { getALNexus }; - - // Get City Nexus - NexusModel getCityNexus = null; - try { - getCityNexus = Client.GetNexus(TestCompany.id, nexusModelsAdded[1].id.Value, null); - } catch (Exception) { } - Assert.NotNull(getALNexus); - - fetchedUSNexus.Add(getCityNexus); - - // Delete Nexus - var errorResult = Client.DeleteNexus(TestCompany.id, nexusModelsAdded[1].id.Value, null); - Assert.NotNull(errorResult); - } - } -} \ No newline at end of file diff --git a/tests/net6.0/SetUpFixture.cs b/tests/net6.0/SetUpFixture.cs deleted file mode 100644 index 0f5ddb7..0000000 --- a/tests/net6.0/SetUpFixture.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Reflection; -using System.Runtime.Versioning; -using System.Text; -using System.Threading.Tasks; -using Avalara.AvaTax.RestClient; -using NUnit.Framework; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - [SetUpFixture] - public class SetUpFixture - { - [OneTimeSetUp] - public void RunBeforeAnyTests() - { - var stringBuilder = new StringBuilder(); - - stringBuilder - .AppendLine($"Hosting Framework Runtime Version: {GetRuntimeFrameworkVersion(GetType().Assembly)}") - .AppendLine($"Hosting Framework Version: {GetFrameworkVersion(GetType().Assembly)}") - .AppendLine($"Target Framework Runtime Version: {GetRuntimeFrameworkVersion(typeof(AvaTaxClient).Assembly)}") - .AppendLine($"Target Framework Version: {GetFrameworkVersion(typeof(AvaTaxClient).Assembly)}"); - - TestContext.Progress.WriteLine(stringBuilder); - } - - private static string GetRuntimeFrameworkVersion(Assembly assembly) - { - var imageRuntimeVersion = assembly - .ImageRuntimeVersion; - - return imageRuntimeVersion; - } - - private static string GetFrameworkVersion(Assembly assembly) - { - var targetFrameAttribute = assembly.GetCustomAttributes(true) - .OfType().FirstOrDefault(); - if (targetFrameAttribute == null) - { - return ".NET 2, 3 or 3.5"; - } - - return targetFrameAttribute.FrameworkName; - } - } -} diff --git a/tests/net6.0/TestBase.cs b/tests/net6.0/TestBase.cs deleted file mode 100644 index 2c50898..0000000 --- a/tests/net6.0/TestBase.cs +++ /dev/null @@ -1,103 +0,0 @@ -using Avalara.AvaTax.RestClient; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - public class TestBase - { - protected AvaTaxClient _client; - protected string _companyCode; - protected CompanyModel _testCompany; - - [SetUp] - public void Setup() - { - _client = null; - _testCompany = null; - try - { - // Create a client and set up authentication - _client = new AvaTaxClient(GetType().Name, - GetType().GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = _client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - _companyCode = Guid.NewGuid().ToString("N").Substring(0, 25); - // Create a basic company with nexus in the state of Washington - _testCompany = _client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = _companyCode, - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Hardware Store", - title = "Owner/CEO" - }); - - // Add a delay after creating a company - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(_testCompany, "Test company should be created"); - Assert.True(_testCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(_testCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } - catch (Exception ex) - { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try - { - // Re-fetch the company - var company = _client.GetCompany(_testCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = _client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } - catch (Exception ex) - { - Assert.Fail("Exception in TearDown: " + ex); - } - } - } -} diff --git a/tests/net6.0/TransactionTests.cs b/tests/net6.0/TransactionTests.cs deleted file mode 100644 index 36a0e94..0000000 --- a/tests/net6.0/TransactionTests.cs +++ /dev/null @@ -1,211 +0,0 @@ -using Avalara.AvaTax.RestClient; -using Newtonsoft.Json; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Net; -using System.Reflection; - -namespace Avalara.AvaTax.RestClient.Test.net60 -{ - [TestFixture] - public class TransactionTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try - { - // Create a client and set up authentication - Client = new AvaTaxClient(typeof(TransactionTests).Name, - typeof(TransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString().Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Greatest Popcorn", - title = "Owner/CEO" - }); - - // Add a delay - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try - { - - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in TearDown: " + ex); - } - } - #endregion - - /// - /// To debug this application, call app must be called with args[0] as username and args[1] as password - /// - [Test] - public void TransactionWorkflow() - { - Client.CallCompleted += Client_CallCompleted; - var tfn = System.IO.Path.GetTempFileName(); - Client.LogToFile(tfn); - - // Execute a transaction - var transaction = new TransactionBuilder(Client, TestCompany.companyCode, DocumentType.SalesInvoice, "ABC") - .WithAddress(TransactionAddressType.SingleLocation, "521 S Weller St", null, null, "Seattle", "WA", - "98104", "US") - .WithLine(100.0m, 1, "P0000000") - .WithLine(200m) - .WithExemptLine(50m, "NT") - .WithLineReference("Special Line Reference!", "Also this!") - .Create(); - - // Verify that the call was captured and logged - Assert.NotNull(lastEvent); - Assert.True(String.Equals(lastEvent.HttpVerb, "POST", StringComparison.CurrentCultureIgnoreCase)); - Assert.True(String.Equals(lastEvent.RequestUri.ToString(), "https://sandbox-rest.avatax.com/api/v2/transactions/create", StringComparison.CurrentCultureIgnoreCase)); - Assert.AreEqual(lastEvent.Code, HttpStatusCode.Created); - - // Verify that the log file was created - Assert.True(System.IO.File.Exists(tfn)); - - // Ensure this transaction was created, and has three lines, and has some tax - Assert.NotNull(transaction, "Transaction should have been created"); - Assert.True(transaction.totalTax > 0.0m, "Transaction should have had some tax"); - Assert.True(transaction.lines.Count == 3, "Transaction should have three lines"); - Assert.True(transaction.lines[2].ref1.Contains("Reference!"), "Line3 should have had a Ref1."); - - // Now commit that transaction - var commitResult = Client.CommitTransaction(TestCompany.companyCode, transaction.code, null, null, new CommitTransactionModel() { commit = true }); - - // Ensure that this transaction was committed - Assert.NotNull(commitResult, "Should have been able to call CommitTransaction"); - Assert.True(commitResult.status == DocumentStatus.Committed, "Transaction should have been committed"); - - // Now void the transaction - var voidResult = Client.VoidTransaction(TestCompany.companyCode, transaction.code, null, null, new VoidTransactionModel() - { - code = VoidReasonCode.DocVoided - }); - - // Ensure that the transaction was voided - Assert.NotNull(voidResult, "Should have been able to call VoidTransactoin"); - Assert.True(voidResult.status == DocumentStatus.Cancelled, "Transaction should have been voided"); - } - - private AvaTaxCallEventArgs lastEvent = null; - private void Client_CallCompleted(object sender, EventArgs e) - { - lastEvent = e as AvaTaxCallEventArgs; - } - [Ignore("Ignore Override")] - [Test] - public void TaxOverrideExample() - { - // Create base transaction. - var builder = new TransactionBuilder(Client, TestCompany.companyCode, DocumentType.SalesInvoice, - "TaxOverrideCustomerCode") - .WithAddress(TransactionAddressType.SingleLocation, "521 S Weller St", null, null, "Seattle", "WA", - "98104", "US") - .WithLine(100.0m, 1, "P0000000") - .WithLine(200m); - - var transaction = builder.Create(); - - // Ensure this transaction was created. - Assert.NotNull(transaction, "Transaction should have been created"); - - var taxOverrideList = new List(); - var item = new TransactionLineTaxAmountByTaxTypeModel(); - item.taxTypeId = "123"; - item.taxAmount = 10; - taxOverrideList.Add(item); - // Add Line-level TaxOverride. - var overrideTransaction = builder - .WithLineTaxOverride(TaxOverrideType.TaxAmount, "Tax Override Reason", 1) - .WithLine(300m, 1) - .WithLineTaxOverride(TaxOverrideType.TaxAmountByTaxType, "Another reason", 10, null, taxOverrideList) - .Create(); - - - // Ensure this transaction was created. - Assert.NotNull(overrideTransaction, "Transaction should have been created"); - - // Compare the two transactions. - Assert.AreEqual(overrideTransaction.totalTaxCalculated, transaction.totalTaxCalculated, "Total Tax Calculated should be the same."); - Assert.True(overrideTransaction.totalTax < transaction.totalTax, "Total Tax should not be the same. Overridden transaction should be smaller."); - - // Compare the transaction lines. - var overrideLine = overrideTransaction.lines[1]; - var line = transaction.lines[1]; - Assert.AreEqual(overrideLine.isItemTaxable, line.isItemTaxable); - Assert.AreEqual(overrideLine.taxCalculated, line.taxCalculated); - Assert.AreEqual(overrideLine.lineAmount, line.lineAmount); - Assert.AreEqual(1, overrideLine.tax); - Assert.True(overrideLine.tax < line.tax); - Assert.AreEqual(TaxOverrideType.TaxAmount, overrideLine.taxOverrideType); - } - } -} diff --git a/tests/net8.0/BatchTests.cs b/tests/net8.0/BatchTests.cs deleted file mode 100644 index 9c74c53..0000000 --- a/tests/net8.0/BatchTests.cs +++ /dev/null @@ -1,198 +0,0 @@ -using Avalara.AvaTax.RestClient; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - [TestFixture] - public class BatchTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try - { - // Create a client and set up authentication - Client = new AvaTaxClient(typeof(TransactionTests).Name, - typeof(TransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString("N").Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Hardware Store", - title = "Owner/CEO" - }); - - // Add a delay after creating a company - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try - { - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in TearDown: " + ex); - } - } - #endregion - - /// - /// - /// - [Test] - public async Task BatchesWorkflow() - { - // Raw batch CSV string. - const string transactionImport = @"ProcessCode,DocCode,DocType,DocDate,CompanyCode,CustomerCode,EntityUseCode,LineNo,TaxCode,TaxDate,ItemCode,Description,Qty,Amount,Discount,Ref1,Ref2,ExemptionNo,RevAcct,DestAddress,DestCity,DestRegion,DestPostalCode,DestCountry,OrigAddress,OrigCity,OrigRegion,OrigPostalCode,OrigCountry,LocationCode,SalesPersonCode,PurchaseOrderNo,CurrencyCode,ExchangeRate,ExchangeRateEffDate,PaymentDate,TaxIncluded,DestTaxRegion,OrigTaxRegion,Taxable,TaxType,TotalTax,CountryName,CountryCode,CountryRate,CountryTax,StateName,StateCode,StateRate,StateTax,CountyName,CountyCode,CountyRate,CountyTax,CityName,CityCode,CityRate,CityTax,Other1Name,Other1Code,Other1Rate,Other1Tax,Other2Name,Other2Code,Other2Rate,Other2Tax,Other3Name,Other3Code,Other3Rate,Other3Tax,Other4Name,Other4Code,Other4Rate,Other4Tax,ReferenceCode,BuyersVATNo -3,BS1323154187029MG10,2,16-Apr-14,,029MG10,,0000000001,SR060100,06-May-14,6500,REPAIRS & MAINTENANCE,,1980,,,0,,6500,119 N. 72nd St.,Omaha,NE,68114,,6923 MAPLE ST,OMAHA,NE,68104,,029,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS1323158772194036MAC1,2,04-Apr-14,,036MAC1,,0000000001,SC150158,06-May-14,6505,R&M HEAT / VENT / AIR COND,,322.26,,,0,,6505,1200 E. Mall Drive,Holland,OH,43528,,2875 CRANE WAY,NORTHWOOD,OH,43619,,036,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS1323159W206409036MLK,2,25-Mar-14,,036MLK,,0000000001,SR060100,06-May-14,6507,R&M OTHER,,449,,,31.43,,6507,1200 E. Mall Drive,Holland,OH,43528,,1214 JEFFERSON AVE,TOLEDO,OH,43604,,036,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231601596048MRP2,2,02-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,60,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231631591048MRP2,2,02-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,58,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231611594048MRP2,2,01-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,65,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231621593048MRP2,2,01-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,75,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231641587048MRP2,2,01-May-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,60,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3,BS13231651582048MRP2,2,15-Mar-14,,048MRP2,,0000000001,SR060100,06-May-14,6520,FURNITURE REPAIRS,,47,,,0,,6520,2201 Hwy 75 North,Sherman,TX,75090,,P.O. BOX 125,POTTSBORO,TX,75076,,048,,,USD,,,,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"; - - // Let's Create the file portion of the batch request. - var batchFileModel = new BatchFileModel - { - name = "TransactionImport.csv", - content = Encoding.UTF8.GetBytes(transactionImport), - contentType = "text/csv", - fileExtension = "csv" - }; - - // Create the bare-minimum batch header info. - var batchRequest = new BatchModel - { - name = "AutomationTestBatch", - type = BatchType.TransactionImport, - files = new List { batchFileModel } - }; - - // Send the batch! - try - { - var batchResult = Client.CreateBatches(TestCompany.id, new List { batchRequest }); - Assert.NotNull(batchResult, "Batch not sent."); - Assert.True(batchResult.Count > 0, "No batches created."); - - // Check that the batch comes out of Waiting state using a linear backoff strategy. - var waiting = true; - BatchModel batchFetchResult = null; - for (var i = 1; i < 6; ++i) - { - await Task.Delay(i * 1000); - - batchFetchResult = Client.GetBatch(TestCompany.id, batchResult[0].id.Value); - Assert.NotNull(batchFetchResult, "Batch fetch unsuccessful."); - if (batchFetchResult.status.Value == BatchStatus.Waiting) continue; - waiting = false; - break; - } - Assert.True(waiting == false, $"Batch waiting too long. Check BatchId: {batchResult[0].id}"); - - // This batch is no longer in the Waiting state. Let's see it process. - var processing = true; - for (var i = 1; i < 11; ++i) - { - await Task.Delay(i * 1000); - - batchFetchResult = Client.GetBatch(TestCompany.id, batchResult[0].id.Value); - Assert.NotNull(batchFetchResult, "Batch fetch unsuccessful."); - if (batchFetchResult.status.Value == BatchStatus.Processing) continue; - processing = false; - break; - } - Assert.True(processing == false, $"Batch processing too long. Check BatchId: {batchResult[0].id}"); - - // This batch is done processing. - Assert.True((batchFetchResult.status.Value == BatchStatus.Errors || batchFetchResult.status.Value == BatchStatus.Completed), - $"BatchId: {batchResult[0].id} should either complete or error out."); - // Ensure that the number of records matches what we sent in. - Assert.AreEqual(9, batchFetchResult.currentRecord.Value); - - // Alright. Time to download the sent batch file. - var fileResult = Client.DownloadBatch(TestCompany.id, batchFetchResult.id.Value, batchFetchResult.files[0].id.Value); - Assert.NotNull(fileResult); - - // Compare what we got back with what we sent. - Assert.AreEqual(batchFetchResult.name + ".Input.CSV; filename*=UTF-8''" + batchFetchResult.name + ".Input.CSV", fileResult.Filename); - Assert.AreEqual(batchFileModel.content, fileResult.Data); - Assert.AreEqual(batchFileModel.contentType, fileResult.ContentType); - } catch (AvaTaxError e) - { - Assert.True(false, $"AvaTaxError: {e.error.error.details?[0].message}"); - } catch (Exception e) - { - Assert.True(false, $"Unknown Exception! {e.Message}"); - } - } - } -} diff --git a/tests/net8.0/CertificateTests.cs b/tests/net8.0/CertificateTests.cs deleted file mode 100644 index 11915bb..0000000 --- a/tests/net8.0/CertificateTests.cs +++ /dev/null @@ -1,144 +0,0 @@ -using Avalara.AvaTax.RestClient; -using Newtonsoft.Json; -using NUnit.Framework; -using System; -using System.IO; -using System.Net; -using System.Reflection; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - [TestFixture] - public class CertificateTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public int DefaultCompanyId { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try { - // Create a client and set up authentication - Client = new AvaTaxClient(typeof(CertificateTests).Name, - typeof(CertificateTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - //Get the default company. - var defaultCompanyModel = Client.QueryCompanies(string.Empty, "isDefault EQ true", null, null, string.Empty).value[0]; - - DefaultCompanyId = defaultCompanyModel.id; - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString().Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Greatest Popcorn", - title = "Owner/CEO" - }); - - // Add a delay - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try { - - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) { - Assert.Fail("Exception in TearDown: " + ex); - } - } - #endregion - - /// - /// Tests the upload certificate image endpoint. - /// - [Test] - [Ignore("Ignore CertificateImageUploadTest")] - public void CertificateImageUploadTest() - { - //Get the cert number. The account needs to have CertCapture - //be provisioned, already have a certificate created, and the - //certificate needs to be valid. - var certs = Client.QueryCertificates(DefaultCompanyId, string.Empty, "valid EQ true", null, null, string.Empty).value; - var certId = certs[0].id.Value; - - //Get an image. - byte[] jpegByteArr = File.ReadAllBytes(Environment.GetEnvironmentVariable("TEST_IMAGE_PATH")); - - FileResult fileResult = new FileResult() - { - ContentType = "multipart/form-data", - Filename = "test_cert_image.jpg", - Data = jpegByteArr - }; - - //Send request. - var certUploadResult = Client.UploadCertificateImage(DefaultCompanyId, certId, fileResult); - - //Response should be "OK" - Assert.True(string.Equals(certUploadResult, "\"OK\"")); - - //Test download of image attachment. - var certAttachment = Client.DownloadCertificateImage(DefaultCompanyId, certId, null, CertificatePreviewType.Pdf); - Assert.NotNull(certAttachment); - Assert.True(string.Equals(certAttachment.ContentType, "application/pdf")); - Assert.True(certAttachment.Data.Length > 1000); - - } - } -} diff --git a/tests/net8.0/ErrorResultTests.cs b/tests/net8.0/ErrorResultTests.cs deleted file mode 100644 index 41fd7af..0000000 --- a/tests/net8.0/ErrorResultTests.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using Avalara.AvaTax.RestClient; -using NUnit.Framework; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - [TestFixture] - public class ErrorResultTests : TestBase - { - [Test] - public async Task NonJsonErrorResult() - { - AvaTaxError avataxError = null; - try - { - // make a client that points to a server that will give a 404 for ping - var client = new AvaTaxClient(GetType().Name, - GetType().GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, new Uri("https://www.google.com")); - - var result = await client.PingAsync().ConfigureAwait(false); - } - catch (AvaTaxError e) - { - avataxError = e; - } - - Assert.NotNull(avataxError); - Assert.True(avataxError.error.error.message.Contains("the response is in an unexpected format")); - Assert.True(avataxError.error.error.details[0].description.ToLower().Contains("not found")); - } - - [Test] - public async Task JsonErrorResult() - { - AvaTaxError avataxError = null; - try - { - var result = await _client.ChangePasswordAsync(new PasswordChangeModel - { - }).ConfigureAwait(false); - } - catch (AvaTaxError e) - { - avataxError = e; - } - - Assert.NotNull(avataxError); - Assert.True(avataxError.error.error.message.Contains("Field oldPassword is required")); - } - } -} diff --git a/tests/net8.0/FreeTaxRatesTest.cs b/tests/net8.0/FreeTaxRatesTest.cs deleted file mode 100644 index 7302654..0000000 --- a/tests/net8.0/FreeTaxRatesTest.cs +++ /dev/null @@ -1,97 +0,0 @@ -using Avalara.AvaTax.RestClient; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - [TestFixture] - class FreeTaxRatesTest - { - public AvaTaxClient _client; - - #region Setup / Teardown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try { - // Create a client and set up authentication - _client = new AvaTaxClient(typeof(TransactionTests).Name, - typeof(TransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - } catch (Exception ex) { - Assert.Fail("Exception in SetUp: " + ex); - } - } - #endregion - - [Test] - public async Task FreeTaxRates() - { - // Call TaxRates for a few addresses and verify that the rates are nonzero - var tr = await _client.TaxRatesByAddressAsync("123 Main Street", null, null, "Irvine", "CA", "92615", "US"); - Assert.NotNull(tr); - Assert.True(tr.totalRate > 0.05m); - - // Washington - tr = await _client.TaxRatesByAddressAsync("522 Stadium Pl S", null, null, "Seattle", "WA", "98104", "US"); - Assert.NotNull(tr); - Assert.True(tr.totalRate > 0.05m); - - // By postal code for New York - tr = await _client.TaxRatesByPostalCodeAsync("US", "10010"); - Assert.NotNull(tr); - Assert.True(tr.totalRate > 0.05m); - } - - /// - /// Test the local rate by ZIP storage and retrieval. - /// - [Test] - [Ignore("This test will fail in Travis")] - public void StoreRatesByZipTest() - { - string path = Environment.GetEnvironmentVariable("ZIP_RATE_FILE_STORAGE_PATH"); - List zips = new List() { "12590", "98104" }; - - //Call the content caching helper. - AvaTaxOfflineHelper.StoreZipRateContent(_client, "US", zips, path); - - //Verify that the files were stored locally. - bool zipRateExists = AvaTaxOfflineHelper.VerifyLocalZipRateAvailable(zips[0], path); - Assert.True(zipRateExists); - zipRateExists = AvaTaxOfflineHelper.VerifyLocalZipRateAvailable(zips[1], path); - Assert.True(zipRateExists); - - //Verify that a bogus file does not exist locally. - zipRateExists = AvaTaxOfflineHelper.VerifyLocalZipRateAvailable("bogusZipFile.json", path); - Assert.False(zipRateExists); - - //Verify that the local file can be used for rate calculation. - var zipTaxRate = AvaTaxOfflineHelper.GetLocalTaxRateByZip(zips[1], path); - Assert.NotNull(zipTaxRate); - decimal result = 9.99m * zipTaxRate.totalRate.Value; - Assert.NotZero(result); - - //Test AvaTaxOfflineHelper Exception handling. - path = @"n:\someBadPath"; - try { - AvaTaxOfflineHelper.StoreZipRateContent(_client, "US", zips, path); - } catch (AvaTaxOfflineHelperException exc) { -#if PORTABLE - Assert.True(string.Equals(exc.InnerException.Message, "Could not find a part of the path 'n:\\someBadPath\\12590.json'.")); -#else - Assert.True(string.Equals(exc.Message, "An error occurred retrieving or storing the rate content. Please see inner exception for details.")); -#endif - } - } - } -} diff --git a/tests/net8.0/HttpClientTransactionTests.cs b/tests/net8.0/HttpClientTransactionTests.cs deleted file mode 100644 index c0c79e1..0000000 --- a/tests/net8.0/HttpClientTransactionTests.cs +++ /dev/null @@ -1,204 +0,0 @@ -using Avalara.AvaTax.RestClient; -using Newtonsoft.Json; -using NUnit.Framework; -using System; -using System.Net; -using System.Reflection; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - [TestFixture] - public class HttpClientTransactionTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try - { - var httpClient = new System.Net.Http.HttpClient() { Timeout = TimeSpan.FromMinutes(20) }; - // Create a client and set up authentication - Client = new AvaTaxClient(httpClient, typeof(HttpClientTransactionTests).Name, - typeof(HttpClientTransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString().Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Greatest Popcorn", - title = "Owner/CEO" - }); - - // Add a delay - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try - { - - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in TearDown: " + ex); - } - } - #endregion - - /// - /// To debug this application, call app must be called with args[0] as username and args[1] as password - /// - [Test] - public void TransactionWorkflow() - { - Client.CallCompleted += Client_CallCompleted; - var tfn = System.IO.Path.GetTempFileName(); - Client.LogToFile(tfn); - - // Execute a transaction - var transaction = new TransactionBuilder(Client, TestCompany.companyCode, DocumentType.SalesInvoice, "ABC") - .WithAddress(TransactionAddressType.SingleLocation, "521 S Weller St", null, null, "Seattle", "WA", - "98104", "US") - .WithLine(100.0m, 1, "P0000000") - .WithLine(200m) - .WithExemptLine(50m, "NT") - .WithLineReference("Special Line Reference!", "Also this!") - .Create(); - - // Verify that the call was captured and logged - Assert.NotNull(lastEvent); - Assert.True(String.Equals(lastEvent.HttpVerb, "POST", StringComparison.CurrentCultureIgnoreCase)); - Assert.True(String.Equals(lastEvent.RequestUri.ToString(), "https://sandbox-rest.avatax.com/api/v2/transactions/create", StringComparison.CurrentCultureIgnoreCase)); - Assert.AreEqual(lastEvent.Code, HttpStatusCode.Created); - - // Verify that the log file was created - Assert.True(System.IO.File.Exists(tfn)); - - // Ensure this transaction was created, and has three lines, and has some tax - Assert.NotNull(transaction, "Transaction should have been created"); - Assert.True(transaction.totalTax > 0.0m, "Transaction should have had some tax"); - Assert.True(transaction.lines.Count == 3, "Transaction should have three lines"); - Assert.True(transaction.lines[2].ref1.Contains("Reference!"), "Line3 should have had a Ref1."); - - // Now commit that transaction - var commitResult = Client.CommitTransaction(TestCompany.companyCode, transaction.code, null, null, new CommitTransactionModel() { commit = true }); - - // Ensure that this transaction was committed - Assert.NotNull(commitResult, "Should have been able to call CommitTransaction"); - Assert.True(commitResult.status == DocumentStatus.Committed, "Transaction should have been committed"); - - // Now void the transaction - var voidResult = Client.VoidTransaction(TestCompany.companyCode, transaction.code, null, null, new VoidTransactionModel() - { - code = VoidReasonCode.DocVoided - }); - - // Ensure that the transaction was voided - Assert.NotNull(voidResult, "Should have been able to call VoidTransactoin"); - Assert.True(voidResult.status == DocumentStatus.Cancelled, "Transaction should have been voided"); - } - - private AvaTaxCallEventArgs lastEvent = null; - private void Client_CallCompleted(object sender, EventArgs e) - { - lastEvent = e as AvaTaxCallEventArgs; - } - - [Test] - - public void TaxOverrideExample() - { - // Create base transaction. - var builder = new TransactionBuilder(Client, TestCompany.companyCode, DocumentType.SalesInvoice, - "TaxOverrideCustomerCode") - .WithAddress(TransactionAddressType.SingleLocation, "521 S Weller St", null, null, "Seattle", "WA", - "98104", "US") - .WithLine(100.0m, 1, "P0000000") - .WithLine(200m); - - var transaction = builder.Create(); - - // Ensure this transaction was created. - Assert.NotNull(transaction, "Transaction should have been created"); - - // Add Line-level TaxOverride. - var overrideTransaction = builder - .WithLineTaxOverride(TaxOverrideType.TaxAmount, "Tax Override Reason", 1) - .Create(); - - // Ensure this transaction was created. - Assert.NotNull(overrideTransaction, "Transaction should have been created"); - - // Compare the two transactions. - Assert.AreEqual(overrideTransaction.totalTaxCalculated, transaction.totalTaxCalculated, "Total Tax Calculated should be the same."); - Assert.True(overrideTransaction.totalTax < transaction.totalTax, "Total Tax should not be the same. Overridden transaction should be smaller."); - - // Compare the transaction lines. - var overrideLine = overrideTransaction.lines[1]; - var line = transaction.lines[1]; - Assert.AreEqual(overrideLine.isItemTaxable, line.isItemTaxable); - Assert.AreEqual(overrideLine.taxCalculated, line.taxCalculated); - Assert.AreEqual(overrideLine.lineAmount, line.lineAmount); - Assert.AreEqual(1, overrideLine.tax); - Assert.True(overrideLine.tax < line.tax); - Assert.AreEqual(TaxOverrideType.TaxAmount, overrideLine.taxOverrideType); - } - } -} diff --git a/tests/net8.0/NexusTests.cs b/tests/net8.0/NexusTests.cs deleted file mode 100644 index d144b07..0000000 --- a/tests/net8.0/NexusTests.cs +++ /dev/null @@ -1,169 +0,0 @@ -using Avalara.AvaTax.RestClient; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - [TestFixture] - [Ignore("This test is not yet implemented")] - public class NexusTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try { - // Create a client and set up authentication - Client = new AvaTaxClient(typeof(TransactionTests).Name, - typeof(TransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString().Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Greatest Popcorn", - title = "Owner/CEO" - }); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) { - Assert.Fail("Exception in SetUp: " + ex.ToString()); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try { - - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) { - Assert.Fail("Exception in TearDown: " + ex.ToString()); - } - } - #endregion - - [Test] - public void CreateAndDeleteNexus() - { - var nexusModels = new List(); - - var stateNexus = new NexusModel - { - id = 0, - companyId = TestCompany.id, - country = "US", - region = "AL", - jurisTypeId = JurisTypeId.STA, - jurisCode = "01", - jurisName = "ALABAMA", - shortName = "AL", - signatureCode = "", - stateAssignedNo = "", - nexusTypeId = NexusTypeId.SalesOrSellersUseTax, - hasLocalNexus = true, - hasPermanentEstablishment = true, - effectiveDate = new DateTime(2008, 07, 01), - endDate = new DateTime(2019, 07, 01) - }; - - var cityNexus = new NexusModel - { - id = 0, - companyId = TestCompany.id, - country = "US", - region = "AL", - jurisTypeId = JurisTypeId.CIT, - jurisCode = "00124", - jurisName = "ABBEVILLE", - shortName = "ABBEVILLE", - signatureCode = "", - stateAssignedNo = "9356", - nexusTypeId = NexusTypeId.SalesTax, - hasLocalNexus = true, - hasPermanentEstablishment = false, - effectiveDate = new DateTime(2008, 07, 01), - endDate = new DateTime(2018, 07, 01) - }; - - nexusModels.Add(stateNexus); - nexusModels.Add(cityNexus); - - var nexusModelsAdded = Client.CreateNexus(TestCompany.id, new List { stateNexus, cityNexus }); - - // Get State nexus - NexusModel getALNexus = null; - try { - getALNexus = Client.GetNexus(TestCompany.id, nexusModelsAdded[0].id.Value, null); - } catch (Exception) { } - Assert.NotNull(getALNexus); - - var fetchedUSNexus = new List { getALNexus }; - - // Get City Nexus - NexusModel getCityNexus = null; - try { - getCityNexus = Client.GetNexus(TestCompany.id, nexusModelsAdded[1].id.Value, null); - } catch (Exception) { } - Assert.NotNull(getALNexus); - - fetchedUSNexus.Add(getCityNexus); - - // Delete Nexus - var errorResult = Client.DeleteNexus(TestCompany.id, nexusModelsAdded[1].id.Value, null); - Assert.NotNull(errorResult); - } - } -} \ No newline at end of file diff --git a/tests/net8.0/SetUpFixture.cs b/tests/net8.0/SetUpFixture.cs deleted file mode 100644 index 8586be1..0000000 --- a/tests/net8.0/SetUpFixture.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Reflection; -using System.Runtime.Versioning; -using System.Text; -using System.Threading.Tasks; -using Avalara.AvaTax.RestClient; -using NUnit.Framework; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - [SetUpFixture] - public class SetUpFixture - { - [OneTimeSetUp] - public void RunBeforeAnyTests() - { - var stringBuilder = new StringBuilder(); - - stringBuilder - .AppendLine($"Hosting Framework Runtime Version: {GetRuntimeFrameworkVersion(GetType().Assembly)}") - .AppendLine($"Hosting Framework Version: {GetFrameworkVersion(GetType().Assembly)}") - .AppendLine($"Target Framework Runtime Version: {GetRuntimeFrameworkVersion(typeof(AvaTaxClient).Assembly)}") - .AppendLine($"Target Framework Version: {GetFrameworkVersion(typeof(AvaTaxClient).Assembly)}"); - - TestContext.Progress.WriteLine(stringBuilder); - } - - private static string GetRuntimeFrameworkVersion(Assembly assembly) - { - var imageRuntimeVersion = assembly - .ImageRuntimeVersion; - - return imageRuntimeVersion; - } - - private static string GetFrameworkVersion(Assembly assembly) - { - var targetFrameAttribute = assembly.GetCustomAttributes(true) - .OfType().FirstOrDefault(); - if (targetFrameAttribute == null) - { - return ".NET 2, 3 or 3.5"; - } - - return targetFrameAttribute.FrameworkName; - } - } -} diff --git a/tests/net8.0/TestBase.cs b/tests/net8.0/TestBase.cs deleted file mode 100644 index 332d184..0000000 --- a/tests/net8.0/TestBase.cs +++ /dev/null @@ -1,103 +0,0 @@ -using Avalara.AvaTax.RestClient; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - public class TestBase - { - protected AvaTaxClient _client; - protected string _companyCode; - protected CompanyModel _testCompany; - - [SetUp] - public void Setup() - { - _client = null; - _testCompany = null; - try - { - // Create a client and set up authentication - _client = new AvaTaxClient(GetType().Name, - GetType().GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = _client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - _companyCode = Guid.NewGuid().ToString("N").Substring(0, 25); - // Create a basic company with nexus in the state of Washington - _testCompany = _client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = _companyCode, - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Hardware Store", - title = "Owner/CEO" - }); - - // Add a delay after creating a company - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(_testCompany, "Test company should be created"); - Assert.True(_testCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(_testCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } - catch (Exception ex) - { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try - { - // Re-fetch the company - var company = _client.GetCompany(_testCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = _client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } - catch (Exception ex) - { - Assert.Fail("Exception in TearDown: " + ex); - } - } - } -} diff --git a/tests/net8.0/TransactionTests.cs b/tests/net8.0/TransactionTests.cs deleted file mode 100644 index ab5ef12..0000000 --- a/tests/net8.0/TransactionTests.cs +++ /dev/null @@ -1,211 +0,0 @@ -using Avalara.AvaTax.RestClient; -using Newtonsoft.Json; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Net; -using System.Reflection; - -namespace Avalara.AvaTax.RestClient.Test.net80 -{ - [TestFixture] - public class TransactionTests - { - public AvaTaxClient Client { get; set; } - public string CompanyCode { get; set; } - public CompanyModel TestCompany { get; set; } - - #region Setup / TearDown - /// - /// Create a company for use with these tests - /// - [SetUp] - public void Setup() - { - try - { - // Create a client and set up authentication - Client = new AvaTaxClient(typeof(TransactionTests).Name, - typeof(TransactionTests).GetTypeInfo().Assembly.ImageRuntimeVersion.ToString(), - Environment.MachineName, - AvaTaxEnvironment.Sandbox) - .WithSecurity(Environment.GetEnvironmentVariable("SANDBOX_USERNAME"), Environment.GetEnvironmentVariable("SANDBOX_PASSWORD")); - - // Verify that we can ping successfully - var pingResult = Client.Ping(); - - // Assert that ping succeeded - Assert.NotNull(pingResult, "Should be able to call Ping"); - Assert.True(pingResult.authenticated, "Environment variables should provide correct authentication"); - - // Create a basic company with nexus in the state of Washington - TestCompany = Client.CompanyInitialize(new CompanyInitializationModel() - { - city = "Bainbridge Island", - companyCode = Guid.NewGuid().ToString().Substring(0, 25), - country = "US", - email = "bob@example.org", - faxNumber = null, - firstName = "Bob", - lastName = "McExample", - line1 = "100 Ravine Lane", - mobileNumber = "206 555 1212", - phoneNumber = "206 555 1212", - postalCode = "98110", - region = "WA", - taxpayerIdNumber = "123456789", - name = "Bob's Greatest Popcorn", - title = "Owner/CEO" - }); - - // Add a delay - System.Threading.Thread.Sleep(6 * 1000); - - // Assert that company setup succeeded - Assert.NotNull(TestCompany, "Test company should be created"); - Assert.True(TestCompany.nexus.Count > 0, "Test company should have nexus"); - Assert.True(TestCompany.locations.Count > 0, "Test company should have locations"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in SetUp: " + ex); - } - } - - - /// - /// Any cleanup required goes here - /// - [TearDown] - public void TearDown() - { - try - { - - // Re-fetch the company - var company = Client.GetCompany(TestCompany.id, null); - - // Flag this company as inactive - company.isActive = false; - var disableResult = Client.UpdateCompany(company.id, company); - - // Assert that it succeeded - Assert.NotNull(disableResult, "Should have been able to update this company"); - Assert.False(disableResult.isActive, "Company should have been deactivated"); - - // Shouldn't fail - } catch (Exception ex) - { - Assert.Fail("Exception in TearDown: " + ex); - } - } - #endregion - - /// - /// To debug this application, call app must be called with args[0] as username and args[1] as password - /// - [Test] - public void TransactionWorkflow() - { - Client.CallCompleted += Client_CallCompleted; - var tfn = System.IO.Path.GetTempFileName(); - Client.LogToFile(tfn); - - // Execute a transaction - var transaction = new TransactionBuilder(Client, TestCompany.companyCode, DocumentType.SalesInvoice, "ABC") - .WithAddress(TransactionAddressType.SingleLocation, "521 S Weller St", null, null, "Seattle", "WA", - "98104", "US") - .WithLine(100.0m, 1, "P0000000") - .WithLine(200m) - .WithExemptLine(50m, "NT") - .WithLineReference("Special Line Reference!", "Also this!") - .Create(); - - // Verify that the call was captured and logged - Assert.NotNull(lastEvent); - Assert.True(String.Equals(lastEvent.HttpVerb, "POST", StringComparison.CurrentCultureIgnoreCase)); - Assert.True(String.Equals(lastEvent.RequestUri.ToString(), "https://sandbox-rest.avatax.com/api/v2/transactions/create", StringComparison.CurrentCultureIgnoreCase)); - Assert.AreEqual(lastEvent.Code, HttpStatusCode.Created); - - // Verify that the log file was created - Assert.True(System.IO.File.Exists(tfn)); - - // Ensure this transaction was created, and has three lines, and has some tax - Assert.NotNull(transaction, "Transaction should have been created"); - Assert.True(transaction.totalTax > 0.0m, "Transaction should have had some tax"); - Assert.True(transaction.lines.Count == 3, "Transaction should have three lines"); - Assert.True(transaction.lines[2].ref1.Contains("Reference!"), "Line3 should have had a Ref1."); - - // Now commit that transaction - var commitResult = Client.CommitTransaction(TestCompany.companyCode, transaction.code, null, null, new CommitTransactionModel() { commit = true }); - - // Ensure that this transaction was committed - Assert.NotNull(commitResult, "Should have been able to call CommitTransaction"); - Assert.True(commitResult.status == DocumentStatus.Committed, "Transaction should have been committed"); - - // Now void the transaction - var voidResult = Client.VoidTransaction(TestCompany.companyCode, transaction.code, null, null, new VoidTransactionModel() - { - code = VoidReasonCode.DocVoided - }); - - // Ensure that the transaction was voided - Assert.NotNull(voidResult, "Should have been able to call VoidTransactoin"); - Assert.True(voidResult.status == DocumentStatus.Cancelled, "Transaction should have been voided"); - } - - private AvaTaxCallEventArgs lastEvent = null; - private void Client_CallCompleted(object sender, EventArgs e) - { - lastEvent = e as AvaTaxCallEventArgs; - } - [Ignore("Ignore Override")] - [Test] - public void TaxOverrideExample() - { - // Create base transaction. - var builder = new TransactionBuilder(Client, TestCompany.companyCode, DocumentType.SalesInvoice, - "TaxOverrideCustomerCode") - .WithAddress(TransactionAddressType.SingleLocation, "521 S Weller St", null, null, "Seattle", "WA", - "98104", "US") - .WithLine(100.0m, 1, "P0000000") - .WithLine(200m); - - var transaction = builder.Create(); - - // Ensure this transaction was created. - Assert.NotNull(transaction, "Transaction should have been created"); - - var taxOverrideList = new List(); - var item = new TransactionLineTaxAmountByTaxTypeModel(); - item.taxTypeId = "123"; - item.taxAmount = 10; - taxOverrideList.Add(item); - // Add Line-level TaxOverride. - var overrideTransaction = builder - .WithLineTaxOverride(TaxOverrideType.TaxAmount, "Tax Override Reason", 1) - .WithLine(300m, 1) - .WithLineTaxOverride(TaxOverrideType.TaxAmountByTaxType, "Another reason", 10, null, taxOverrideList) - .Create(); - - - // Ensure this transaction was created. - Assert.NotNull(overrideTransaction, "Transaction should have been created"); - - // Compare the two transactions. - Assert.AreEqual(overrideTransaction.totalTaxCalculated, transaction.totalTaxCalculated, "Total Tax Calculated should be the same."); - Assert.True(overrideTransaction.totalTax < transaction.totalTax, "Total Tax should not be the same. Overridden transaction should be smaller."); - - // Compare the transaction lines. - var overrideLine = overrideTransaction.lines[1]; - var line = transaction.lines[1]; - Assert.AreEqual(overrideLine.isItemTaxable, line.isItemTaxable); - Assert.AreEqual(overrideLine.taxCalculated, line.taxCalculated); - Assert.AreEqual(overrideLine.lineAmount, line.lineAmount); - Assert.AreEqual(1, overrideLine.tax); - Assert.True(overrideLine.tax < line.tax); - Assert.AreEqual(TaxOverrideType.TaxAmount, overrideLine.taxOverrideType); - } - } -}