Exemple #1
0
        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));
        }
Exemple #4
0
        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);
                }
            }
        }