Example #1
0
        public void Test_Paging()
        {
            const int large = 20;
            const int small = 5;

            var connector = new CustomerConnector();

            connector.Limit     = large;
            connector.SortBy    = Sort.By.Customer.CustomerNumber;
            connector.SortOrder = Sort.Order.Ascending;

            var largeCustomerCollection = connector.Find(); //get up to 'large' number of entities
            var totalCustomers          = largeCustomerCollection.TotalResources;

            var neededPages      = GetNeededPages(Math.Min(totalCustomers, large), small);
            var mergedCollection = new List <CustomerSubset>();

            for (int i = 0; i < neededPages; i++)
            {
                connector.Limit = small;
                connector.Page  = i + 1;
                var smallCustomerCollection = connector.Find();
                mergedCollection.AddRange(smallCustomerCollection.Entities);
            }

            for (int i = 0; i < largeCustomerCollection.Entities.Count; i++)
            {
                Assert.AreEqual(largeCustomerCollection.Entities[i].CustomerNumber, mergedCollection[i].CustomerNumber);
            }
        }
Example #2
0
        public void TestCustomer()
        {
            var connector = new CustomerConnector();

            connector.Authorization = new StaticTokenAuth(at, cs);

            var customer = connector.Get("0022");

            customer.GLN         = "123";
            customer.GLNDelivery = "12345";
            customer.Active      = "false";
            customer             = connector.Update(customer);

            Assert.IsFalse(connector.HasError);
            Assert.IsTrue(customer.Active == "false");

            connector.FilterBy = Filter.Customer.Inactive;
            var customers = connector.Find();

            Assert.IsFalse(connector.HasError);
            Assert.IsTrue(customers.CustomerSubset.Any(c => c.CustomerNumber == "0022"));

            customer.Active = "true";
            connector.Update(customer);

            Assert.IsFalse(connector.HasError);
            Assert.IsTrue(customer.Active == "true");
            customers = connector.Find();
            Assert.IsFalse(customers.CustomerSubset.Any(c => c.CustomerNumber == "0022"));
        }
Example #3
0
        public void Test_Find()
        {
            #region Arrange
            //Add code to create required resources
            #endregion Arrange

            var testKeyMark = TestUtils.RandomString();

            ICustomerConnector connector = new CustomerConnector();
            var newCustomer = new Customer()
            {
                Name        = "TestCustomer",
                Address1    = "TestStreet 1",
                Address2    = "TestStreet 2",
                ZipCode     = "01010",
                City        = testKeyMark,
                CountryCode = "SE", //CountryCode needs to be valid
                Email       = "*****@*****.**",
                Type        = CustomerType.Private,
                Active      = false,
                Comments    = testKeyMark
            };

            //Add entries
            for (var i = 0; i < 5; i++)
            {
                connector.Create(newCustomer);
            }

            //Apply base test filter
            connector.Search.City = testKeyMark;
            var fullCollection = connector.Find();
            MyAssert.HasNoError(connector);

            Assert.AreEqual(5, fullCollection.TotalResources);
            Assert.AreEqual(5, fullCollection.Entities.Count);
            Assert.AreEqual(1, fullCollection.TotalPages);

            //Apply Limit
            connector.Search.Limit = 2;
            var limitedCollection = connector.Find();
            MyAssert.HasNoError(connector);

            Assert.AreEqual(5, limitedCollection.TotalResources);
            Assert.AreEqual(2, limitedCollection.Entities.Count);
            Assert.AreEqual(3, limitedCollection.TotalPages);

            //Delete entries
            foreach (var entry in fullCollection.Entities)
            {
                connector.Delete(entry.CustomerNumber);
            }

            #region Delete arranged resources
            //Add code to delete temporary resources
            #endregion Delete arranged resources
        }
Example #4
0
        public void TestCustomer()
        {
            var connector = new CustomerConnector();

            connector.AccessToken  = at;
            connector.ClientSecret = cs;

            var customer = connector.Get("0022");

            customer.GLN         = "123";
            customer.GLNDelivery = "12345";
            customer.Active      = "false";
            customer             = connector.Update(customer);

            Assert.IsFalse(connector.HasError);
            Assert.IsTrue(customer.Active == "false");

            connector.FilterBy = Filter.Customer.Inactive;
            var customers = connector.Find();

            Assert.IsFalse(connector.HasError);
            Assert.IsTrue(customers.TotalResources == "1");

            customer.Active = "true";
            connector.Update(customer);

            Assert.IsFalse(connector.HasError);
            Assert.IsTrue(customer.Active == "true");
        }
Example #5
0
        public void Test_NoRateLimiter_TooManyRequest_Error()
        {
            ConnectionSettings.UseRateLimiter = false;
            var connector = new CustomerConnector();

            ErrorInformation error = null;
            int i;

            for (i = 0; i < 200; i++)
            {
                connector.Search.City = TestUtils.RandomString();
                connector.Find();
                if (connector.HasError)
                {
                    error = connector.Error;
                    break;
                }
            }

            //Restore settings
            ConnectionSettings.UseRateLimiter = true;

            //Assert
            //Assert.IsTrue(failed > 0);
            Console.WriteLine($@"Succesful requests: {i}");
            Assert.IsNotNull(error);
            Assert.IsTrue(error.Message.Contains("Too Many Requests"));
        }
Example #6
0
        public void Test_Find_ParamsAdded()
        {
            var connector = new CustomerConnector
            {
                Name         = "TestName",
                City         = "TestCity",
                FilterBy     = Filter.Customer.Active,
                SortBy       = Sort.By.Customer.Name,
                SortOrder    = Sort.Order.Ascending,
                LastModified = new DateTime(2000, 01, 01, 20, 10, 05), //2000-01-20 20:10:05
                Limit        = 10,
                Offset       = 0,
                Page         = 1
            };

            connector.Find();
            MyAssert.HasNoError(connector);
            Assert.IsTrue(connector.RequestUriString.Contains("name=TestName"));
            Assert.IsTrue(connector.RequestUriString.Contains("city=TestCity"));
            Assert.IsTrue(connector.RequestUriString.Contains("filter=active"));
            Assert.IsTrue(connector.RequestUriString.Contains("sortby=name"));
            Assert.IsTrue(connector.RequestUriString.Contains("sortorder=ascending"));
            Assert.IsTrue(connector.RequestUriString.Contains("lastmodified=2000-01-01+20%3a10%3a05")); //"lastmodified=2000-01-20 20:10:05" in URL encoding
            Assert.IsTrue(connector.RequestUriString.Contains("limit=10"));
            Assert.IsTrue(connector.RequestUriString.Contains("offset=0"));
            Assert.IsTrue(connector.RequestUriString.Contains("page=1"));
        }
        public void Test_NoRateLimiter_TooManyRequest_Error()
        {
            var connector = new CustomerConnector();

            connector.UseRateLimiter = false;

            FortnoxApiException error = null;
            int i;

            for (i = 0; i < 200; i++)
            {
                var searchSettings = new CustomerSearch();
                searchSettings.City = TestUtils.RandomString();
                try
                {
                    connector.Find(searchSettings);
                }
                catch (FortnoxApiException ex)
                {
                    error = ex;
                    break;
                }
            }

            //Assert
            //Assert.IsTrue(failed > 0);
            Console.WriteLine($@"Succesful requests: {i}");
            Assert.IsNotNull(error);
            Console.WriteLine(error.Message);
            Assert.IsTrue(error.Message.Contains("Too Many Requests"));

            Thread.Sleep(5 * 1000); //Sleep to cooldown/recover from "debt" (otherwise following tests will fail with TooManyRequests)
        }
Example #8
0
        public void Test_Find_ParamsNullable()
        {
            var connector = new CustomerConnector()
            {
                Name         = "TestName",
                City         = null,
                FilterBy     = null,
                SortBy       = null,
                SortOrder    = null,
                LastModified = null,
                Limit        = null,
                Offset       = null,
                Page         = null
            };

            connector.Find();
            MyAssert.HasNoError(connector);
            Assert.IsFalse(connector.RequestUriString.Contains("city="));
            Assert.IsFalse(connector.RequestUriString.Contains("filter="));
            Assert.IsFalse(connector.RequestUriString.Contains("sortby="));
            Assert.IsFalse(connector.RequestUriString.Contains("sortorder="));
            Assert.IsFalse(connector.RequestUriString.Contains("lastmodified="));
            Assert.IsFalse(connector.RequestUriString.Contains("limit="));
            Assert.IsFalse(connector.RequestUriString.Contains("offset="));
            Assert.IsFalse(connector.RequestUriString.Contains("page="));
        }
Example #9
0
        public void Test_AllInOnePage()
        {
            //To make this test make sense, over 100 customers must exist, ideally over 500

            ICustomerConnector connector = new CustomerConnector();
            var result = connector.Find(null);

            Assert.IsTrue(result.TotalPages > 1);

            var searchSettings = new CustomerSearch();

            searchSettings.Limit = APIConstants.Unlimited;
            var allInOneResult = connector.Find(searchSettings);

            Assert.AreEqual(1, allInOneResult.TotalPages);
            Assert.AreEqual(result.TotalResources, allInOneResult.Entities.Count);
        }
Example #10
0
        public void TestConnection1()
        {
            var cc = new CustomerConnector();

            cc.AccessToken  = "";
            cc.ClientSecret = "";
            cc.Find();
        }
Example #11
0
        public void TestConnection1()
        {
            var cc = new CustomerConnector();

            cc.Authorization = new StaticTokenAuth("", "");

            cc.Find();
        }
Example #12
0
        public void TestConnection_NoCredenials_Error()
        {
            //Arrange
            ConnectionCredentials.AccessToken  = null;
            ConnectionCredentials.ClientSecret = null;

            //Act
            ICustomerConnector cc = new CustomerConnector();

            cc.Find(null);
        }
Example #13
0
        public void TestConnection_WrongCredenials_Error()
        {
            //Arrange
            ConnectionCredentials.AccessToken  = "ABC";
            ConnectionCredentials.ClientSecret = "DEF";

            //Act
            ICustomerConnector cc = new CustomerConnector();

            cc.Find(null);
        }
Example #14
0
        public void TestConnection_WithoutCredenials_Error()
        {
            //Arrange
            ConnectionCredentials.AccessToken  = "";
            ConnectionCredentials.ClientSecret = "";

            //Act
            var cc = new CustomerConnector();

            cc.AccessToken  = "";
            cc.ClientSecret = "";
            cc.Find();
        }
        public void TestConnection_EmptyCredenials_Error()
        {
            //Arrange
            ConnectionCredentials.AccessToken  = "";
            ConnectionCredentials.ClientSecret = "";

            //Act
            ICustomerConnector cc = new CustomerConnector();

            cc.Find();

            Assert.IsTrue(cc.HasError);
        }
Example #16
0
        public void TestConnection_GlobalCredentials_Set()
        {
            //Arrange
            ConnectionCredentials.AccessToken  = TestCredentials.Access_Token;
            ConnectionCredentials.ClientSecret = TestCredentials.Client_Secret;

            //Act
            ICustomerConnector connector = new CustomerConnector();

            var customers = connector.Find(null);

            Assert.IsNotNull(customers);
        }
Example #17
0
        public void Test_Find_ParamsNotAdded()
        {
            var connector = new CustomerConnector();

            connector.Name = "TestName";

            connector.Find();
            MyAssert.HasNoError(connector);
            Assert.IsFalse(connector.RequestUriString.Contains("city="));
            Assert.IsFalse(connector.RequestUriString.Contains("filter="));
            Assert.IsFalse(connector.RequestUriString.Contains("sortby="));
            Assert.IsFalse(connector.RequestUriString.Contains("sortorder="));
            Assert.IsFalse(connector.RequestUriString.Contains("lastmodified="));
            Assert.IsFalse(connector.RequestUriString.Contains("limit="));
            Assert.IsFalse(connector.RequestUriString.Contains("offset="));
            Assert.IsFalse(connector.RequestUriString.Contains("page="));
        }
        public void TestConnection_LocalCredentials_Set()
        {
            //Arrange
            ConnectionCredentials.AccessToken  = "";
            ConnectionCredentials.ClientSecret = "";

            //Act
            ICustomerConnector connector = new CustomerConnector();

            connector.AccessToken  = TestCredentials.Access_Token;
            connector.ClientSecret = TestCredentials.Client_Secret;

            var customers = connector.Find();

            MyAssert.HasNoError(connector);
            Assert.IsNotNull(customers);
        }
Example #19
0
        public void Test_RateLimiter_NoError()
        {
            var connector = new CustomerConnector();

            var watch = new Stopwatch();

            watch.Start();
            for (var i = 0; i < 200; i++)
            {
                connector.Search.City = TestUtils.RandomString(); //Needs to be random to make unique GET request
                connector.Find();
                MyAssert.HasNoError(connector);
            }

            watch.Stop();
            Console.WriteLine(@"Total time: " + watch.ElapsedMilliseconds);
        }
Example #20
0
        public void Test_issue57_fixed() // Origins from https://github.com/FortnoxAB/csharp-api-sdk/issues/57
        {
            var connector        = new CustomerConnector();
            var specificCustomer = connector.Create(new Customer()
            {
                Name = "TestCustomer", OrganisationNumber = "123456789"
            });

            var searchSettings = new CustomerSearch();

            searchSettings.OrganisationNumber = "123456789";
            var customers = connector.Find(searchSettings).Entities;
            var customer  = customers.FirstOrDefault(c => c.CustomerNumber == specificCustomer.CustomerNumber);

            Assert.IsNotNull(customer);

            connector.Delete(specificCustomer.CustomerNumber);
        }
        public void Test_NoRateLimiter_TooManyRequest_Error()
        {
            ConnectionSettings.UseRateLimiter = false;
            var connector = new CustomerConnector();

            ErrorInformation error = null;

            for (var i = 0; i < 200; i++)
            {
                connector.Find();
                if (connector.HasError)
                {
                    error = connector.Error;
                    break;
                }
            }

            //Restore settings
            ConnectionSettings.UseRateLimiter = true;

            //Assert
            Assert.IsNotNull(error);
            Assert.IsTrue(error.Message.Contains("Too Many Requests"));
        }
Example #22
0
        public async Task <IActionResult> Refresh()
        {
            try
            {
                // Ta bort kunder från den lokala databasen
                if (_context.Customers.Any())
                {
                    _context.Customers.RemoveRange(_context.Customers);
                }

                //ta bort artiklar från databasen
                if (_context.Articles.Any())
                {
                    _context.Articles.RemoveRange(_context.Articles);
                }

                var connector = new CustomerConnector
                {
                    FilterBy = Filter.Customer.Active,
                    Limit    = 500
                };
                var customers = connector.Find();

                // Loopa sidindelning
                while (customers != null && int.Parse(customers.CurrentPage) <= int.Parse(customers.TotalPages))
                {
                    // För varje sida loopar vi alla kunder
                    foreach (var fortnoxCustomer in customers.CustomerSubset)
                    {
                        var customer = new Models.Customer
                        {
                            CustomerNumber     = fortnoxCustomer.CustomerNumber,
                            Address1           = fortnoxCustomer.Address1,
                            Address2           = fortnoxCustomer.Address2,
                            City               = fortnoxCustomer.City,
                            Name               = fortnoxCustomer.Name,
                            OrganisationNumber = fortnoxCustomer.OrganisationNumber,
                            ZipCode            = fortnoxCustomer.ZipCode
                        };

                        _context.Customers.Add(customer);
                    }

                    // Byt till nästa sida
                    connector.Page = int.Parse(customers.CurrentPage) + 1;
                    customers      = connector.Find();
                }

                var articleConnector = new ArticleConnector
                {
                    FilterBy = Filter.Article.Active,
                    Limit    = 500
                };
                var articles = articleConnector.Find();

                while (articles != null && int.Parse(articles.CurrentPage) <= int.Parse(articles.TotalPages))
                {
                    // För varje sida loopar vi alla artiklar
                    foreach (var fortnoxArticle in articles.ArticleSubset)
                    {
                        var article = new Models.Article
                        {
                            ArticleNumber = fortnoxArticle.ArticleNumber,
                            Name          = fortnoxArticle.Description,
                            SalesPrice    = float.Parse(fortnoxArticle.SalesPrice),
                            Unit          = fortnoxArticle.Unit
                        };

                        _context.Articles.Add(article);
                    }

                    articleConnector.Page = int.Parse(articles.CurrentPage) + 1;
                    articles = articleConnector.Find();
                }

                await _context.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception ex)
            {
                return(StatusCode(500, new Models.ErrorResponse(ex.Message)));

                throw;
            }
        }
Example #23
0
        public void Test_Customer_Search()
        {
            var testId = Guid.NewGuid().ToString(); //serves to identify entities created in this test

            var connector = new CustomerConnector();

            var newCustomers = new List <Customer>()
            {
                new Customer()
                {
                    Name     = testId,
                    Address1 = "TestStreet 1",
                    Address2 = "TestStreet 2",
                    ZipCode  = "01010",
                    City     = "Testopolis",
                    Email    = "*****@*****.**",
                    Type     = CustomerType.PRIVATE,
                    Active   = true
                },
                new Customer()
                {
                    Name     = testId,
                    Address1 = "TestStreet 1",
                    Address2 = "TestStreet 2",
                    ZipCode  = "01010",
                    City     = "TestCity",
                    Email    = "*****@*****.**",
                    Type     = CustomerType.PRIVATE,
                    Active   = true
                },
                new Customer()
                {
                    Name     = testId,
                    Address1 = "TestStreet 1",
                    Address2 = "TestStreet 2",
                    ZipCode  = "01010",
                    City     = "PolisTest",
                    Email    = "*****@*****.**",
                    Type     = CustomerType.PRIVATE,
                    Active   = true
                },
                new Customer()
                {
                    Name     = testId,
                    Address1 = "TestStreet 1",
                    Address2 = "TestStreet 2",
                    ZipCode  = "01010",
                    City     = "Testopolis",
                    Email    = "*****@*****.**",
                    Type     = CustomerType.PRIVATE,
                    Active   = false
                }
            };

            for (int i = 0; i < newCustomers.Count; i++)
            {
                newCustomers[i] = connector.Create(newCustomers[i]);
                MyAssert.HasNoError(connector);
            }

            connector.Limit        = 10;
            connector.LastModified = DateTime.Today;
            connector.SortBy       = Sort.By.Customer.Name;
            connector.Offset       = 0;
            connector.Page         = 1;

            connector.FilterBy = Filter.Customer.Active; //Matched by customers 1,2,3
            connector.City     = "polis";                //Matched by customers 1,3,4
            connector.Name     = testId;                 //Matched by customers 1,2,3,4 (all)

            var retrievedCustomers = connector.Find();

            MyAssert.HasNoError(connector);
            Assert.AreEqual(2, retrievedCustomers.Entities.Count); //Final matched customers: 1,3

            foreach (var customer in newCustomers)
            {
                connector.Delete(customer.CustomerNumber);
                MyAssert.HasNoError(connector);
            }
        }