public void MakeReportExportRequestTest()
        {
            SSExpensifyAPI api = new SSExpensifyAPI();

            ExpensifyExportReportJobRequest request = new ExpensifyExportReportJobRequest();

            request.credentials.partnerUserID     = "aa_expenses_stoneridgesoftware_com";
            request.credentials.partnerUserSecret = "7d87861227ff7ecc00f52ac0c96967807303b205";
            request.test = "true";
            request.inputSettings.reportState              = "APPROVED,REIMBURSED";
            request.inputSettings.filters.startDate        = "2015-12-01";
            request.inputSettings.filters.markedAsExported = "Stoneridge Software";
            request.outputSettings.fileExtension           = "csv";
            request.outputSettings.fileBasename            = "ExpenseExport";
            request.onFinish = new Onfinish[1] {
                new MarkAsExportFinishAction()
                {
                    label = "Stoneridge Software"
                }
            };

            string fileName = api.MakeReportExportRequest(request, api.ExportTemplate);

            Assert.AreEqual(200, api.Status.Status, api.Status.StatusDescription);
            Assert.IsNotNull(fileName);
            Assert.IsFalse(string.IsNullOrEmpty(fileName));
        }
        public void MakeUpdatePolicyRequestCategoriesTest()
        {
            SSExpensifyAPI api = new SSExpensifyAPI();
            // api.AuthID = "aa_toryb_runestone_net";
            // api.AuthToken = "c61256ea6c865017fb5e358ff42e78b103b27d14";

            // First Create the Policy
            ExpensifyCreatePolicyJobRequest jobRequest = new ExpensifyCreatePolicyJobRequest();

            jobRequest.credentials.partnerUserID     = "aa_expenses_stoneridgesoftware_com";
            jobRequest.credentials.partnerUserSecret = "7d87861227ff7ecc00f52ac0c96967807303b205";

            jobRequest.test = "true";
            jobRequest.inputSettings.policyName = "MakeUpdatePolicyRequestTest";

            string policyID = api.MakeCreatePolicyRequest(jobRequest);

            Assert.AreEqual(200, api.Status.Status, api.Status.StatusDescription);
            Assert.IsNotNull(policyID);
            Assert.IsFalse(string.IsNullOrEmpty(policyID));

            // Now modify the policy
            ExpensifyUpdatePolicyJobRequest updateJobRequest = new ExpensifyUpdatePolicyJobRequest();

            updateJobRequest.credentials.partnerUserID     = "aa_expenses_stoneridgesoftware_com";
            updateJobRequest.credentials.partnerUserSecret = "7d87861227ff7ecc00f52ac0c96967807303b205";

            updateJobRequest.inputSettings.policyID = policyID;
            Categories categories = new Categories();

            categories.action = "replace";
            categories.data   = new CategoriesData[]
            {
                new CategoriesData()
                {
                    name = "Transportation", enabled = false
                },
                new CategoriesData()
                {
                    name = "Lodging", enabled = false, areCommentsRequired = true, commentHint = "Enter a name and number of nights", maxExpenseAmount = 40000
                },
                new CategoriesData()
                {
                    name = "Mileage", enabled = false
                },
                new CategoriesData()
                {
                    name = "Meals", enabled = false
                },
                new CategoriesData()
                {
                    name = "Other", enabled = false, areCommentsRequired = true, commentHint = "Enter a name a comment"
                }
            };
            updateJobRequest.categories = categories;
            api.MakeUpdatePolicyRequest(updateJobRequest);
            Assert.AreEqual(200, api.Status.Status, api.Status.StatusDescription);
        }
        public void InvalidMakeCreatePolicyRequestTest()
        {
            SSExpensifyAPI api = new SSExpensifyAPI();
            ExpensifyCreatePolicyJobRequest jobRequest = new ExpensifyCreatePolicyJobRequest();

            jobRequest.credentials.partnerUserID     = "aa_expenses_stoneridgesoftware_com";
            jobRequest.credentials.partnerUserSecret = "7d87861227ff7ecc00f52ac0c96967807303b205";
            jobRequest.test = "true";

            string policyID = api.MakeCreatePolicyRequest(jobRequest);

            Assert.AreEqual(410, api.Status.Status, api.Status.StatusDescription);
            Assert.IsNotNull(policyID);
            Assert.IsTrue(string.IsNullOrEmpty(policyID));
        }
        public void MakeGetPolicyListRequestTest()
        {
            // Build the job request
            SSExpensifyAPI api = new SSExpensifyAPI();
            ExpensifyGetPolicyListJobRequest request = new ExpensifyGetPolicyListJobRequest()
            {
                credentials = new Credentials()
                {
                    partnerUserID     = "aa_expenses_stoneridgesoftware_com",
                    partnerUserSecret = "7d87861227ff7ecc00f52ac0c96967807303b205"
                },
                test = "true"
            };

            // Obtain the list of policies
            PolicyListInfo[] list = api.MakeGetPolicyListRequest(request);

            Assert.IsNotNull(list, "Policy List is NULL");
            bool policyFound = false;

            // Verify that the stoneridge policy exists
            foreach (PolicyListInfo listInfo in list)
            {
                if (listInfo.name == "Stoneridge Software")
                {
                    policyFound = true;
                    break;
                }
            }
            Assert.IsTrue(policyFound, "Stoneridge Software policy not found.");
            policyFound = false;
            // Verify that the stoneridge policy exists
            foreach (PolicyListInfo listInfo in list)
            {
                if (listInfo.name == "Stoneridge Software Test")
                {
                    policyFound = true;
                    break;
                }
            }
            Assert.IsTrue(policyFound, "Stoneridge Software Test policy not found.");
        }