Exemplo n.º 1
0
        private async Task <GetAccountResponse> GetAccount(CrmClient client, string accountNumber)
        {
            var columnList = await client.GetColumnListAsync("account");

            var columnNames = columnList.Row.Columns.Select(c => new Column(c.Key)).ToArray();
            var account     = await client.GetAccountAsync(
                "accountposref = ?",
                new[] { new ColumnValue("accountposref", accountNumber) },
                columnNames);

            InferMetaDataToFieldSpecifications(account.MetaData, columnList.Row.Columns);

            Assert.Single(account.Rows);
            Assert.Equal(accountNumber, account.Rows[0].Columns["ACCOUNTPOSREF"]);
            return(account);
        }
Exemplo n.º 2
0
        private async Task <GetProgramResponse> GetProgram(CrmClient client, GetAccountResponse account)
        {
            var columnList = await client.GetColumnListAsync("program");

            var columnNames = columnList.Row.Columns.Select(c => new Column(c.Key)).ToArray();
            var programId   = account.Rows[0].Columns["PROGRAMID"].ToString();
            var program     = await client.GetProgramAsync(
                "programid = ?",
                new[] { new ColumnValue("programid", programId) },
                columnNames);

            InferMetaDataToFieldSpecifications(program.MetaData, columnList.Row.Columns);

            Assert.Single(program.Rows);
            Assert.Equal("EMPDISC", program.Rows[0].Columns["PROGRAMCODE"]);
            return(program);
        }
        public async Task error_on_invalid_entity()
        {
            const string response = @"
                <CRMMessage language=""en_US"" currency=""DKK"" isTrustedSAT=""false"" hostversion=""1.00"">
                  <RequestCode>GetColumnList</RequestCode>
                  <ResponseCode>E</ResponseCode>
                  <Error code=""1"">Unsupported parameter: NonExistingEntity</Error>
                </CRMMessage>";

            var handler  = CreateMockMessageHandler(HttpStatusCode.OK, CreateSoapResponse(response.Trim()));
            var executor = new OracleHospitalityExecutor(_options, _executorLogger, new HttpClient(handler));
            var sut      = new CrmClient(_options, executor);

            var e = await Assert.ThrowsAsync <OracleHospitalityClientException>(() =>
                                                                                sut.GetColumnListAsync("NonExistingEntity"));

            Assert.Equal("1", e.Code);
        }
Exemplo n.º 4
0
        private async Task <GetCustomerResponse> GetCustomer(CrmClient client, string accountNumber)
        {
            // Whereas this operations returns A25 as the value of a column,
            // when we actually issue queries using GetCustomer, that isn't the
            // column type returned. Instead its string, long, boolean in
            // concert with a nullable attribute.
            var columnList = await client.GetColumnListAsync("customer");

            // By including every column in the query, we make sure that our
            // mapper keeps supporting every known type.
            var columnNames = columnList.Row.Columns.Select(c => new Column(c.Key)).ToArray();
            var customer    = await client.GetCustomerAsync(
                "primaryposref = ?",
                new[] { new ColumnValue("primaryposref", accountNumber) },
                columnNames);

            InferMetaDataToFieldSpecifications(customer.MetaData, columnList.Row.Columns);

            Assert.Single(customer.Rows);
            Assert.Equal(accountNumber, customer.Rows[0].Columns["PRIMARYPOSREF"]);
            return(customer);
        }
        public async Task valid_entity_returns_column_metadata()
        {
            const string response = @"
                <CRMMessage language=""en_US"" currency=""DKK"" isTrustedSAT=""false"" hostversion=""1.00"">
                  <RequestCode>GetColumnList</RequestCode>
                  <ResponseCode>A</ResponseCode>
                  <ResultSet>
                    <Rows>
                      <Row>
                        <Col type=""A10"">PREFIX</Col>
                        <Col type=""N19"">PARENTCACUSTOMERID</Col>
                        <Col type=""A25"">MOBILEPHONENUMBER</Col>
                        <Col type=""N1"">MEETINGPLANNER</Col>
                        <Col type=""A50"">USERIDNUMBER</Col>
                        <Col type=""A32"">LATITUDE</Col>
                        <Col type=""A32"">MIDDLENAME</Col>
                        <Col type=""Timestamp"">SIGNUPDATE</Col>
                        <Col type=""N1"">EMAILCHNLDELIVERABLE</Col>
                        <Col type=""N5"">PRIMARYPOSREFSTATUS</Col>
                        <Col type=""Timestamp"">LASTTRANSACTIONBUSINESSDATE</Col>
                        <Col type=""N1"">MAILCHNLDELIVERABLE</Col>
                        <Col type=""A50"">MISCFIELD1</Col>
                        <Col type=""Timestamp"">ANNIVERSARYDATE</Col>
                        <Col type=""Decimal"">DISTANCE</Col>
                        <Col type=""A50"">SOURCECODE</Col>
                        <Col type=""A32"">LASTUPDATEDBY</Col>
                        <Col type=""A50"">MISCFIELD4</Col>
                        <Col type=""A10"">SUFFIX</Col>
                        <Col type=""A50"">MISCFIELD3</Col>
                        <Col type=""A50"">MISCFIELD2</Col>
                        <Col type=""N10"">SIGNUPSOURCEID</Col>
                        <Col type=""A25"">WORKPHONENUMBER</Col>
                        <Col type=""Timestamp"">REISSUENEWCUSTKITDATE</Col>
                        <Col type=""N19"">SORTVALUE</Col>
                        <Col type=""A32"">STOREEXTREF</Col>
                        <Col type=""A50"">PASSWORDHINT</Col>
                        <Col type=""N10"">DATASOURCEID</Col>
                        <Col type=""Timestamp"">LASTUPDATED</Col>
                        <Col type=""N1"">OTHERCHNLDELIVERABLE</Col>
                        <Col type=""N1"">ISCLEANED</Col>
                        <Col type=""A50"">USERNAME</Col>
                        <Col type=""A50"">CITY</Col>
                        <Col type=""A25"">FAXNUMBER</Col>
                        <Col type=""N1"">ACTIVE</Col>
                        <Col type=""N5"">EMAILCHNLSTATUS</Col>
                        <Col type=""A50"">LASTNAME</Col>
                        <Col type=""A32"">STATE</Col>
                        <Col type=""Decimal"">USERNUMERIC1</Col>
                        <Col type=""N5"">HOMEPHONECHNLSTATUS</Col>
                        <Col type=""A76"">ADDRESSLINE1</Col>
                        <Col type=""A76"">ADDRESSLINE2</Col>
                        <Col type=""Timestamp"">REPLACECARDDATE</Col>
                        <Col type=""N10"">PARENTRELATIONSHIP</Col>
                        <Col type=""N19"">CACUSTOMERID</Col>
                        <Col type=""A50"">CAMPAIGN</Col>
                        <Col type=""Timestamp"">FIRSTTRANSACTIONBUSINESSDATE</Col>
                        <Col type=""N10"">REISSUENEWCUSTKITCOUNTER</Col>
                        <Col type=""A16"">OTHERPHONENUMBER</Col>
                        <Col type=""A50"">FIRSTNAME</Col>
                        <Col type=""A16"">POSTALCODE</Col>
                        <Col type=""A50"">COUNTY</Col>
                        <Col type=""N10"">HASHCODE</Col>
                        <Col type=""N5"">OTHERCHNLSTATUS</Col>
                        <Col type=""N1"">ISORGANIZATION</Col>
                        <Col type=""N1"">CONCIERGE</Col>
                        <Col type=""N19"">KID</Col>
                        <Col type=""Decimal"">USERNUMERIC2</Col>
                        <Col type=""N19"">SIGNUPLOCATIONID</Col>
                        <Col type=""A150"">PASSWORD</Col>
                        <Col type=""N10"">REPLACECARDCOUNTER</Col>
                        <Col type=""A50"">EMAILADDRESS</Col>
                        <Col type=""N1"">WELCOMEEMAILSENT</Col>
                        <Col type=""Timestamp"">BIRTHDAY</Col>
                        <Col type=""A50"">COUNTRY</Col>
                        <Col type=""Timestamp"">CREATEDDATE</Col>
                        <Col type=""N1"">USEFORTESTEMAIL</Col>
                        <Col type=""N1"">HOMEPHONECHNLDELIVERABLE</Col>
                        <Col type=""A32"">PRIMARYPOSREF</Col>
                        <Col type=""A25"">HOMEPHONENUMBER</Col>
                        <Col type=""N3"">BIRTHMONTH</Col>
                        <Col type=""A1"">GENDER</Col>
                        <Col type=""N1"">ISDEDUPED</Col>
                        <Col type=""A32"">LONGITUDE</Col>
                        <Col type=""N3"">BIRTHDAYOFMONTH</Col>
                        <Col type=""A50"">USERALPHA1</Col>
                        <Col type=""N5"">MAILCHNLSTATUS</Col>
                        <Col type=""A50"">USERALPHA2</Col>
                        <Col type=""A50"">ORGANIZATIONNAME</Col>
                        <Col type=""A10"">PMACODE</Col>
                      </Row>
                    </Rows>
                  </ResultSet>
                </CRMMessage>";

            var handler  = CreateMockMessageHandler(HttpStatusCode.OK, CreateSoapResponse(response.Trim()));
            var executor = new OracleHospitalityExecutor(_options, _executorLogger, new HttpClient(handler));
            var sut      = new CrmClient(_options, executor);

            var actual = await sut.GetColumnListAsync("customer");

            var columns = actual.Row.Columns;

            Assert.Equal(80, columns.Count);

            // Oracle backend uses all caps for fields. That's a direct
            // translation of field names from GL's MS SQL Server database. In
            // queries both upper and lower case may be used as MS SQL Server is
            // generally case insensitive.
            Assert.Equal("A10", columns["PREFIX"]);
            Assert.Equal("N1", columns["ACTIVE"]);
        }