public void Should_Be_Able_To_Fill_DataSet_Schema_Only() { // Arrange using (var sandbox = ConnectionTestsSandbox.Create()) { var dbConnection = sandbox.Container.Resolve <CrmDbConnection>(); var selectCommand = new CrmDbCommand(dbConnection); selectCommand.CommandText = "SELECT * FROM contact"; int resultCount = 100; var entityDataGenerator = new EntityDataGenerator(); IList <Entity> fakeContactsData = entityDataGenerator.GenerateFakeEntities("contact", resultCount); // This is the fake reponse that the org service will return when its requested to get the data. var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(fakeContactsData) { EntityName = "contact" } } } }; // Setup fake org service to return fake response. sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <RetrieveMultipleRequest>()))) .WhenCalled(x => { var request = ((RetrieveMultipleRequest)x.Arguments[0]); }).Return(response); // Act var ds = new DataSet(); var subject = ResolveTestSubjectInstance(); subject.SelectCommand = selectCommand; subject.FillSchema(ds, SchemaType.Source); // var result = subject.Fill(ds); // Assert Assert.NotNull(ds); Assert.NotNull(ds.Tables); Assert.That(ds.Tables.Count, NUnit.Framework.Is.EqualTo(1)); var table = ds.Tables[0]; Assert.That(table.Rows.Count, NUnit.Framework.Is.EqualTo(0)); Assert.That(table.Columns.Count, NUnit.Framework.Is.GreaterThan(0)); } }
private ExecuteMultipleResponseItemCollection GetFakeOrgServiceResponse(Guid id, DateTime modifiedOnDate, ICrmMetaDataProvider crmMetaDataProvider) { // This is a fake ExecuteMultipleResponse that will be returned to our sut at test time. var responses = new ExecuteMultipleResponseItemCollection(); // fake response for insert. ExecuteMultipleResponseItem createResponse = GetCreateResponseItem(0, id); responses.Add(createResponse); // fake response for second insert. ExecuteMultipleResponseItem createResponseWithOutput = GetCreateResponseItem(1, null); responses.Add(createResponseWithOutput); // fake response for update. ExecuteMultipleResponseItem updateResponseItem = GetUpdateResponseItem(2); responses.Add(updateResponseItem); ExecuteMultipleResponseItem updateResponseItemWithOutput = GetUpdateResponseItem(3); responses.Add(updateResponseItemWithOutput); // This is a fake RetrieveResponse that will be returned to our sut at test time. var updatedContactEntity = new Entity("contact"); updatedContactEntity.Id = id; updatedContactEntity["contactid"] = id; updatedContactEntity["modifiedon"] = modifiedOnDate; ExecuteMultipleResponseItem retrieveResponseItemForUpdateOutput = GetRetrieveResponseItem(4, updatedContactEntity); responses.Add(retrieveResponseItemForUpdateOutput); ExecuteMultipleResponseItem deleteResponseItem = GetDeleteResponseItem(5); responses.Add(deleteResponseItem); var entityDataGenerator = new EntityDataGenerator(crmMetaDataProvider); var entities = entityDataGenerator.GenerateFakeEntities("contact", 10); EntityCollection fakeEntityResults = new EntityCollection(entities); ExecuteMultipleResponseItem retrieveMultipleResponseItem = GetRetrieveMultipleResponseItem(6, fakeEntityResults); responses.Add(retrieveMultipleResponseItem); return(responses); }
private List <MessageEntity> GetData(params HashTagWord[] tags) { var user = EntityDataGenerator.GetUsers().FirstOrDefault(); return(EntityDataGenerator.GetMessages(user, 1, tags)); }
public void Should_Be_Able_To_Update_DataSet_Containing_An_Insert_An_Update_And_A_Delete_Using_Command_Builder() { // Arrange using (var sandbox = ConnectionTestsSandbox.Create()) { var dbConnection = sandbox.Container.Resolve <CrmDbConnection>(); var selectCommand = new CrmDbCommand(dbConnection); selectCommand.CommandText = "SELECT contactid, firstname, lastname FROM contact"; // Create a dataset, fill with schema. var ds = new DataSet(); var subject = ResolveTestSubjectInstance(); subject.SelectCommand = selectCommand; // Use command builder to generate automatically the update / delete / insert commands. using (var commandBuilder = new CrmCommandBuilder(subject)) { var result = subject.FillSchema(ds, SchemaType.Source); // Fill the dataset with 100 contact entities from the data source. int resultCount = 100; var entityDataGenerator = new EntityDataGenerator(); IList <Entity> fakeContactsData = entityDataGenerator.GenerateFakeEntities("contact", resultCount); // This is the fake reponse that the org service will return when its requested to get the data. var retrieveResponse = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(fakeContactsData) { EntityName = "contact" } } } }; // Setup fake org service to return fake response. sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <RetrieveMultipleRequest>()))) .WhenCalled(x => { var request = ((RetrieveMultipleRequest)x.Arguments[0]); }).Return(retrieveResponse); subject.Fill(ds); // Now add a new contact, update an existing contact, and delete an existing contact. var newContact = entityDataGenerator.GenerateFakeEntities("contact", 1)[0]; var contactDataTable = ds.Tables[0]; var firstNameCol = contactDataTable.Columns["firstname"]; var lastnameCol = contactDataTable.Columns["lastname"]; var contactidcol = contactDataTable.Columns["contactid"]; var newRow = contactDataTable.NewRow(); newRow.SetField(firstNameCol, newContact["firstname"]); newRow.SetField(lastnameCol, newContact["lastname"]); newRow.SetField(contactidcol, newContact.Id); contactDataTable.Rows.Add(newRow); // update existing contact. var modifiedRow = contactDataTable.Rows[50]; var updatedFirstName = "Jessie"; var updatedLastName = "James"; modifiedRow.SetField(firstNameCol, updatedFirstName); modifiedRow.SetField(lastnameCol, updatedLastName); // Delete existing contact var deleteRow = contactDataTable.Rows[99]; var deleteContactId = (Guid)deleteRow[contactidcol]; deleteRow.Delete(); // When we call update on the dataset we need to verify that the org service is sent // an appropriate Create / Updated and Delete Request. var createResponse = new CreateResponse { Results = new ParameterCollection { { "id", newContact.Id } } }; // Setup fake org service create response. CreateRequest capturedCreateRequest = null; sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <CreateRequest>()))) .WhenCalled(x => { var request = ((CreateRequest)x.Arguments[0]); capturedCreateRequest = request; }).Return(createResponse); // Setup fake org service update response. var updateResponse = new UpdateResponse { Results = new ParameterCollection() { } }; UpdateRequest capturedUpdateRequest = null; sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <UpdateRequest>()))) .WhenCalled(x => { var request = ((UpdateRequest)x.Arguments[0]); capturedUpdateRequest = request; }).Return(updateResponse); // Setup fake org service delete response. var deleteResponse = new DeleteResponse { Results = new ParameterCollection() { } }; DeleteRequest capturedDeleteRequest = null; sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <DeleteRequest>()))) .WhenCalled(x => { var request = ((DeleteRequest)x.Arguments[0]); capturedDeleteRequest = request; }).Return(deleteResponse); var updateCommand = commandBuilder.GetUpdateCommand(); Console.WriteLine(updateCommand.CommandText); // ACT subject.Update(ds); // ASSERT // A create request for the new row data should have been captured. // An update request for the modified row data should have been captured. // A delete request for the deleted row should have been captured. Assert.NotNull(capturedCreateRequest); Assert.NotNull(capturedUpdateRequest); Assert.NotNull(capturedDeleteRequest); var forCreate = capturedCreateRequest.Target; Assert.AreEqual(forCreate.Id, newContact.Id); Assert.AreEqual(forCreate["firstname"], newContact["firstname"]); Assert.AreEqual(forCreate["lastname"], newContact["lastname"]); var forUpdate = capturedUpdateRequest.Target; Assert.AreEqual(forUpdate.Id, modifiedRow[contactidcol]); Assert.AreEqual(forUpdate["firstname"], updatedFirstName); Assert.AreEqual(forUpdate["lastname"], updatedLastName); var forDelete = capturedDeleteRequest.Target; Assert.AreEqual(forDelete.Id, deleteContactId); } } }