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")); }
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); }
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); }