public void TestThatDateTimePropertyIsDeserialisedCorrectly()
        {
            var body = new HyperFindQuery
            {
                HyperFindQueryName = "All Home",
                VisibilityCode     = "Public",
                QueryDateStart     = new DateTime(2017, 2, 11),
                QueryDateEnd       = new DateTime(2017, 2, 12)
            };
            var response =
                @"<WFC>
               <Response Status='Success' Timeout='1800' PersonNumber='SUPERUSER' Action='Logon' PersonKey='-1' Username='******' Object='System'>
               </Response>
               <Response Status='Success' Action='RunQuery'>
                  <HomeAccount EffectiveDate='1/27/2018' ExpirationDate='12/7/2016'/>
                  <HomeAccount EffectiveDate='01/07/2018' ExpirationDate=''/>
                  <HomeAccount EffectiveDate='1/7/2018' ExpirationDate='12/30/2016'/>
               </Response>
               <Response Status='Success' Action='Logoff' Object='System'>
               </Response></WFC>";

            _webRequest.Setup(w => w.GetResponse(It.IsAny <string>(), new byte[] { It.IsAny <byte>() }, It.IsAny <string>(), It.IsAny <string>()));
            _webRequest.SetReturnsDefault(response);

            var xmlService = new XmlApiService <HyperFindQuery, List <HomeAccount> >(_apiSettings, _webRequest.Object);
            var result     = xmlService.GetResponse(body, "RunQuery");

            Assert.NotNull(result);
            Assert.AreEqual(new DateTime(2018, 1, 27), result[0].EffectiveDate);
            Assert.AreEqual(new DateTime(2016, 12, 7), result[0].ExpirationDate);
            Assert.AreEqual(new DateTime(2018, 1, 7), result[1].EffectiveDate);
            Assert.AreEqual(null, result[1].ExpirationDate);
            Assert.AreEqual(new DateTime(2018, 1, 7), result[2].EffectiveDate);
            Assert.AreEqual(new DateTime(2016, 12, 30), result[2].ExpirationDate);
        }
        public void TestMappingForQueryAndResult()
        {
            var modelQuery = new HyperFindQuery
            {
                HyperFindQueryName = "query name",
                VisibilityCode     = "code",
                QueryDateStart     = new DateTime(2017, 03, 12),
                QueryDateEnd       = new DateTime(2017, 03, 14)
            };

            var apiQuery = _mapper.GetQueryWrapper(modelQuery);

            Assert.AreEqual(modelQuery.QueryDateStart, apiQuery.QueryDateStart);
            Assert.AreEqual(modelQuery.QueryDateEnd, apiQuery.QueryDateEnd);
            Assert.AreEqual(modelQuery.VisibilityCode, apiQuery.VisibilityCode);
            Assert.AreEqual(modelQuery.HyperFindQueryName, apiQuery.HyperFindQueryName);

            var apiResult = new HyperFindResult
            {
                FullName     = "Vasya Pupkin",
                PersonNumber = "MIH67868"
            };
            var modelResult = _mapper.GetResultWrapper(apiResult);

            Assert.AreEqual(apiResult.PersonNumber, modelResult.PersonNumber);
            Assert.AreEqual(apiResult.FullName, modelResult.FullName);
        }
        public void TestThatXmlApiServiceThrowsAnExceptionIsResultBodyStatusIsNotSuccess()
        {
            var body = new HyperFindQuery
            {
                HyperFindQueryName = "All Home",
                VisibilityCode     = "Public",
                QueryDateStart     = new DateTime(2017, 2, 11),
                QueryDateEnd       = new DateTime(2017, 2, 12)
            };

            var responseString =
                @"<WFC>
               <Response Status='Success' Timeout='1800' PersonNumber='SUPERUSER' Action='Logon' PersonKey='-1' Username='******' Object='System'>
               </Response>
               <Response Status='Failed' Action='RunQuery'>
                  <HyperFindResult FullName='Gallo, Leo' PersonNumber='46'/>
               </Response>
               <Response Status='Success' Action='Logoff' Object='System'>
               </Response></WFC>";

            _webRequest.Setup(w => w.GetResponse(It.IsAny <string>(), new byte[] { It.IsAny <byte>() }, It.IsAny <string>(), It.IsAny <string>()));
            _webRequest.SetReturnsDefault(responseString);

            var xmlService = new XmlApiService <HyperFindQuery, List <HyperFindResult> >(_apiSettings, _webRequest.Object);

            Assert.Throws <ServerException>(() => xmlService.GetResponse(body, "RunQuery"));
        }
        public void TestThatDecimalPropertyIsDeserialisedCorrectly()
        {
            var body = new HyperFindQuery
            {
                HyperFindQueryName = "All Home",
                VisibilityCode     = "Public",
                QueryDateStart     = new DateTime(2017, 2, 11),
                QueryDateEnd       = new DateTime(2017, 2, 12)
            };
            var response =
                @"<WFC>
               <Response Status='Success' Timeout='1800' PersonNumber='SUPERUSER' Action='Logon' PersonKey='-1' Username='******' Object='System'>
               </Response>
               <Response Status='Success' Action='RunQuery'>
                  <Person BaseWageHourly='2.4535'/>
                  <Person/>
               </Response>
               <Response Status='Success' Action='Logoff' Object='System'>
               </Response></WFC>";

            _webRequest.Setup(w => w.GetResponse(It.IsAny <string>(), new byte[] { It.IsAny <byte>() }, It.IsAny <string>(), It.IsAny <string>()));
            _webRequest.SetReturnsDefault(response);

            var xmlService = new XmlApiService <HyperFindQuery, List <Contracts.Responses.Person> >(_apiSettings, _webRequest.Object);
            var result     = xmlService.GetResponse(body, "RunQuery");

            Assert.NotNull(result);
            Assert.AreEqual(2.4535, result[0].BaseWageHourly);
            Assert.AreEqual(null, result[1].BaseWageHourly);
        }
Exemple #5
0
        public void SerializeApiRequestListToXml()
        {
            var body = new HyperFindQuery
            {
                HyperFindQueryName = "All Home",
                VisibilityCode     = "Public",
                QueryDateStart     = new DateTime(2017, 2, 11),
                QueryDateEnd       = new DateTime(2017, 2, 12)
            };
            var list = new List <HyperFindQuery>();

            list.Add(body);
            var body2 = new HyperFindQuery
            {
                HyperFindQueryName = "All Home2",
                VisibilityCode     = "Public2",
                QueryDateStart     = new DateTime(2017, 2, 11),
                QueryDateEnd       = new DateTime(2017, 2, 12)
            };

            list.Add(body2);

            var xmlRequest = new XmlApiRequest <List <HyperFindQuery> >(list, "RunQuery", "user", "passowrd");
            var xs         = new XmlSerializer(typeof(XmlApiRequest <List <HyperFindQuery> >));
            var xmlnsEmpty = new XmlSerializerNamespaces();

            xmlnsEmpty.Add(string.Empty, string.Empty);
            using (var buffer = new MemoryStream())
            {
                xs.Serialize(buffer, xmlRequest, xmlnsEmpty);
                var xml = new XmlDocument();
                xml.LoadXml(Encoding.UTF8.GetString(buffer.ToArray()));
                Assert.NotNull(xml);
                Assert.AreEqual("WFC", xml.DocumentElement.Name);
                Assert.AreEqual("1.0", xml.DocumentElement.Attributes["version"].Value);
                var logon = xml.DocumentElement.SelectNodes("Request")[0];
                Assert.NotNull(logon);
                Assert.AreEqual("Logon", logon.Attributes["Action"].Value);
                var logoff = xml.DocumentElement.SelectNodes("Request")[2];
                Assert.NotNull(logoff);
                Assert.AreEqual("Logoff", logoff.Attributes["Action"].Value);
                var bodyRequest = xml.DocumentElement.SelectNodes("Request")[1].SelectNodes("HyperFindQuery")[0];
                Assert.NotNull(bodyRequest);
                Assert.AreEqual("All Home", bodyRequest.Attributes["HyperFindQueryName"].Value);
                Assert.AreEqual("Public", bodyRequest.Attributes["VisibilityCode"].Value);
                Assert.AreEqual("2/11/2017-2/12/2017", bodyRequest.Attributes["QueryDateSpan"].Value);
                var bodyRequest2 = xml.DocumentElement.SelectNodes("Request")[1].SelectNodes("HyperFindQuery")[1];
                Assert.NotNull(bodyRequest2);
                Assert.AreEqual("All Home2", bodyRequest2.Attributes["HyperFindQueryName"].Value);
                Assert.AreEqual("Public2", bodyRequest2.Attributes["VisibilityCode"].Value);
            }
        }
        public void DeserialiseXmlToApiResponseEntity()
        {
            var body = new HyperFindQuery
            {
                HyperFindQueryName = "All Home",
                VisibilityCode     = "Public",
                QueryDateStart     = new DateTime(2017, 2, 11),
                QueryDateEnd       = new DateTime(2017, 2, 12)
            };

            _webRequest.Setup(w => w.GetResponse(It.IsAny <string>(), new byte[] { It.IsAny <byte>() }, It.IsAny <string>(), It.IsAny <string>()));
            _webRequest.SetReturnsDefault(_responseString);

            var xmlService = new XmlApiService <HyperFindQuery, HyperFindResult>(_apiSettings, _webRequest.Object);
            var result     = xmlService.GetResponse(body, "RunQuery");

            Assert.NotNull(result);
            Assert.AreEqual("Gallo, Leo", result.FullName);
            Assert.AreEqual("46", result.PersonNumber);
        }
        public void TestThatBoolPropertyIsDeserialisedCorrectly()
        {
            var body = new HyperFindQuery
            {
                HyperFindQueryName = "All Home",
                VisibilityCode     = "Public",
                QueryDateStart     = new DateTime(2017, 2, 11),
                QueryDateEnd       = new DateTime(2017, 2, 12)
            };
            var response =
                @"<WFC>
               <Response Status='Success' Timeout='1800' PersonNumber='SUPERUSER' Action='Logon' PersonKey='-1' Username='******' Object='System'>
               </Response>
               <Response Status='Success' Action='RunQuery'>
                  <AccessAssignment ManagerPayCodeName='Gallo, Leo' ApproveOvertimeFlag='false'/>
                  <AccessAssignment ManagerPayCodeName='Gallo, Leo' ApproveOvertimeFlag='true'/>
                  <AccessAssignment ManagerPayCodeName='Gallo, Leo' ApproveOvertimeFlag=''/>
                  <AccessAssignment ManagerPayCodeName='Gallo, Leo' ApproveOvertimeFlag='FALSE'/>
                  <AccessAssignment ManagerPayCodeName='Gallo, Leo' ApproveOvertimeFlag='TRUE'/>
               </Response>
               <Response Status='Success' Action='Logoff' Object='System'>
               </Response></WFC>";

            _webRequest.Setup(w => w.GetResponse(It.IsAny <string>(), new byte[] { It.IsAny <byte>() }, It.IsAny <string>(), It.IsAny <string>()));
            _webRequest.SetReturnsDefault(response);

            var xmlService = new XmlApiService <HyperFindQuery, List <AccessAssignment> >(_apiSettings, _webRequest.Object);
            var result     = xmlService.GetResponse(body, "RunQuery");

            Assert.NotNull(result);
            Assert.AreEqual(false, result[0].ApproveOvertimeFlag);
            Assert.AreEqual(true, result[1].ApproveOvertimeFlag);
            Assert.AreEqual(null, result[2].ApproveOvertimeFlag);
            Assert.AreEqual(false, result[3].ApproveOvertimeFlag);
            Assert.AreEqual(true, result[4].ApproveOvertimeFlag);
        }
        public List <HyperFindResult> GetEmployeesPersonIdentities(HyperFindQuery query)
        {
            var xmlApiService = new XmlApiService <HyperFindQuery, List <HyperFindResult> >(_apiSettings, _webRequest);

            return(xmlApiService.GetResponse(query, "RunQuery"));
        }
Exemple #9
0
 public XmlApi.Contracts.Requests.HyperFindQuery GetQueryWrapper(HyperFindQuery data)
 {
     return(Mapper.Map <HyperFindQuery, XmlApi.Contracts.Requests.HyperFindQuery>(data));
 }
        public List <HyperFindResult> Execute(HyperFindQuery criteria)
        {
            var result = _apiProxy.GetEmployeesPersonIdentities(_hyperFindMapper.GetQueryWrapper(criteria));

            return(_hyperFindMapper.GetResultWrapper(result));
        }
        public JobStatus Run(GetEmployeeCriteria criteria)
        {
            try
            {
                var hyperFindQuery = new HyperFindQuery
                {
                    HyperFindQueryName = "All Home",
                    VisibilityCode     = "Public",
                    QueryDateStart     = DateTime.Now,
                    QueryDateEnd       = DateTime.Now
                };

                _statusTracker.ShowInitialStep(JobStepDescription.GetEmployeeNumbers);
                _logger.Info(JobStepDescription.GetEmployeeNumbers);
                var fullPersonNumbersData =
                    _commandExecutor.Execute <HyperFindQuery, List <HyperFindResult> >(hyperFindQuery);

                // if EmployeesCount is a number employees person numbers we want to get
                // if EmployeesCount is 0 - all employees
                var personNumbers = criteria.EmployeesCount == 0
                    ? fullPersonNumbersData
                    : fullPersonNumbersData.Take(criteria.EmployeesCount).ToList();

                List <Employee> fullEmployeesData = new List <Employee>();

                // read full employee data passing a portion of pers numbers
                int portion = criteria.EmployeesPerPageNumber == default(int)
                    ? DefaultEmployeesPerPageNumber
                    : criteria.EmployeesPerPageNumber;

                int pageCount  = Convert.ToInt32(Math.Ceiling((double)personNumbers.Count / portion));
                var stepsCount = pageCount + 7;
                _statusTracker.Initialize(stepsCount);

                for (int i = 0; i < pageCount; i++)
                {
                    string stepDescription;
                    if (i == 0)
                    {
                        stepDescription = string.Format(JobStepDescription.GetFirstBunchOfFullEmployeeData, criteria.EmployeesCount < portion ? criteria.EmployeesCount : portion);
                    }
                    else
                    {
                        stepDescription = string.Format(JobStepDescription.GetNextBunchOfFullEmployeeData, portion);
                    }

                    _statusTracker.NotifyNewStep(stepDescription);
                    _logger.Info(stepDescription);
                    var personNumberPortion = personNumbers.Skip(i * portion).Take(portion).ToList();
                    var employeesPortion    =
                        _commandExecutor.Execute <List <HyperFindResult>, List <Employee> >(personNumberPortion);

                    fullEmployeesData.AddRange(employeesPortion);
                }

                _statusTracker.NotifyNewStep(string.Format(JobStepDescription.ExportFile, EmployeeListFileName));
                _logger.Info(string.Format(JobStepDescription.ExportFile, EmployeeListFileName));
                EmployeeListStep(fullEmployeesData, criteria.ShowWage, EmployeeListFileName);

                _statusTracker.NotifyNewStep(string.Format(JobStepDescription.ExportFile, EmployeeListLicenseFileName));
                EmployeeLicenseStep(fullEmployeesData, EmployeeListLicenseFileName);

                _statusTracker.NotifyNewStep(string.Format(JobStepDescription.ExportFile, EmployeeListCustomFields));
                EmployeeCustomFieldStep(fullEmployeesData, EmployeeListCustomFields);

                _statusTracker.NotifyNewStep(string.Format(JobStepDescription.ExportFile, EmployeeListCustomDateFileName));
                EmployeeCustomDateStep(fullEmployeesData, EmployeeListCustomDateFileName);

                EmployeePayRuleStep(fullEmployeesData);

                return(JobStatus.Success);
            }
            catch (FileNotAccessibleException ex)
            {
                _logger.Error(ex, GetType().Name);
                throw ex;
            }
            catch (Exception ex)
            {
                _logger.Error(ex, GetType().Name);
                return(JobStatus.Failed);
            }
        }