public void CreateSobject()
        {
            var referenceId = "TheRecord";

            MockSobject sobject = CreateDefaultMockSobject();

            var builder = _compositeBuilder.CreateSobject(referenceId, sobject);

            Subrequest subrequest = builder.Subrequests.FirstOrDefault();

            Assert.IsNotNull(subrequest);

            string json = SubrequestSerialization.Serialize(subrequest, Formatting.None);

            Assert.That(json.Contains($"\"method\":\"POST\""));
            Assert.That(json.Contains($"\"url\":\"/services/data/v{_salesforceApiVersion}.0/sobjects/{typeof(MockSobject).Name}\""));
            Assert.That(json.Contains($"\"Username\":\"{sobject.Username}\""));
            Assert.That(json.Contains($"\"Security_Token__c\":\"{sobject.SecurityToken}\""));
            Assert.That(json.Contains($"\"referenceId\":\"{referenceId}\""));
            Assert.That(json.Contains($"CreateOnlyField"));

            Assert.That(!json.Contains("Password"));
            Assert.That(!json.Contains("ReadOnlyField"));
            Assert.That(!json.Contains("UpdateOnlyField"));
            Assert.That(!json.Contains("DeleteOnlyField"));
        }
示例#2
0
        public void CreateSobject()
        {
            var referenceId = "NewAccount";

            var account = new Account
            {
                Name = "Temp"
            };

            _builder.CreateSobject(referenceId, account, out string accountRef);

            Subrequest subrequest = _builder.Subrequests.FirstOrDefault();

            Assert.IsNotNull(subrequest);
            Assert.AreEqual(SalesforceSerialization.CREATE, subrequest.salesforceSerialization);
            Assert.AreEqual($"@{{{referenceId}.id}}", accountRef);
            Assert.AreEqual(referenceId, subrequest.compositeSubrequestBase.ReferenceId);
            Assert.AreEqual(CompositeHttpMethod.POST.ToString(), subrequest.compositeSubrequestBase.HttpMethod);
            Assert.AreEqual($"/services/data/v{_appSettings.SalesforceApiVersion}.0/sobjects/{account.GetType().Name}", subrequest.compositeSubrequestBase.Url);
        }
示例#3
0
        public async Task ExecuteAsync_SingleBuilder_HappyPath()
        {
            var expectedEmployeeCount = 10;

            var expectedAccount = new Account
            {
                Name          = "ACME",
                EmployeeCount = 100
            };

            _builder.CreateSobject("NewAccount", expectedAccount, out string accountIdReference);

            var expectedContact = new Contact
            {
                AccountId = accountIdReference,
                FirstName = "Bugs",
                LastName  = "Bunny"
            };

            _builder

            .CreateSobject("NewContact", expectedContact, out string contactIdReference)

            .PatchSobject("UpdateAccount", new Account
            {
                Id            = accountIdReference,
                EmployeeCount = expectedEmployeeCount
            })

            .RetrieveSobject <Contact>("NewContactInfo", contactIdReference)
            .RetrieveSobject <Account>("NewAccountInfo", accountIdReference)
            .DeleteSobject <Account>("DeleteAccount", accountIdReference);

            List <CompositeSubrequestResult> results = await _builder.ExecuteAsync();

            CompositeSubrequestResult newAccountResult = results.FirstOrDefault(x => x.ReferenceId == "NewAccount");

            newAccountResult.Should().NotBeNull();
            newAccountResult.RawBody.Should().NotBeNull();
            newAccountResult.HttpStatusCode.Should().Be(HttpStatusCode.Created);

            var accountCreationResult = newAccountResult.Body <CreateResponseModel>();

            accountCreationResult.Should().NotBeNull();
            accountCreationResult.Id.Should().NotBeNullOrEmpty();
            accountCreationResult.Success.Should().BeTrue();

            CompositeSubrequestResult newContactResult = results.FirstOrDefault(x => x.ReferenceId == "NewContact");

            newContactResult.Should().NotBeNull();
            newContactResult.RawBody.Should().NotBeNull();
            newContactResult.HttpStatusCode.Should().Be(HttpStatusCode.Created);

            var contactCreationResult = newContactResult.Body <CreateResponseModel>();

            contactCreationResult.Should().NotBeNull();
            contactCreationResult.Id.Should().NotBeNullOrEmpty();
            contactCreationResult.Success.Should().BeTrue();

            CompositeSubrequestResult accountUpdateResult = results.FirstOrDefault(x => x.ReferenceId == "UpdateAccount");

            accountUpdateResult.Should().NotBeNull();
            accountUpdateResult.RawBody.Should().BeNull();             //Updates do not return a response body
            accountUpdateResult.HttpStatusCode.Should().Be(HttpStatusCode.NoContent);

            CompositeSubrequestResult accountInfo = results.FirstOrDefault(x => x.ReferenceId == "NewAccountInfo");

            accountInfo.Should().NotBeNull();
            accountInfo.RawBody.Should().NotBeNull();
            accountInfo.HttpStatusCode.Should().Be(HttpStatusCode.OK);

            var account = accountInfo.Body <Account>();

            account.Should().NotBeNull();
            account.Id.Should().NotBeNullOrEmpty();

            //This property is called "NumberOfEmployees" when it comes back from Salesforce
            //Need to deserialize that property into this one...
            //Possibly in the Body<T>() method we need a custom deserializer that will factor in our
            //[SalesforceName] attribute...
            //account.EmployeeCount.Should().Be(expectedEmployeeCount);

            CompositeSubrequestResult contactInfo = results.FirstOrDefault(x => x.ReferenceId == "NewContactInfo");

            contactInfo.Should().NotBeNull();
            contactInfo.RawBody.Should().NotBeNull();
            contactInfo.HttpStatusCode.Should().Be(HttpStatusCode.OK);

            var contact = contactInfo.Body <Contact>();

            contact.Should().NotBeNull();
            contact.FirstName.Should().Be(expectedContact.FirstName);
            contact.LastName.Should().Be(expectedContact.LastName);
            contact.AccountId.Should().Be(account.Id);

            CompositeSubrequestResult accountDeleteResult = results.FirstOrDefault(x => x.ReferenceId == "DeleteAccount");

            accountDeleteResult.Should().NotBeNull();
            accountDeleteResult.RawBody.Should().BeNull();             //Deletes do not return a response body
            accountDeleteResult.HttpStatusCode.Should().Be(HttpStatusCode.NoContent);
        }