public async Task Workers_Create_DoesCreate()
        {
            //Arrange
            Random rnd = new Random();


            workers worker = new workers
            {
                FirstName    = Guid.NewGuid().ToString(),
                LastName     = Guid.NewGuid().ToString(),
                Email        = Guid.NewGuid().ToString(),
                MicrotingUid = rnd.Next(1, 255)
            };

            //Act

            await worker.Create(dbContext).ConfigureAwait(false);

            List <workers>         workers        = dbContext.workers.AsNoTracking().ToList();
            List <worker_versions> workersVersion = dbContext.worker_versions.AsNoTracking().ToList();

            //Assert

            Assert.NotNull(workers);
            Assert.NotNull(workersVersion);

            Assert.AreEqual(1, workersVersion.Count());
            Assert.AreEqual(1, workers.Count());

            Assert.AreEqual(worker.CreatedAt.ToString(), workers[0].CreatedAt.ToString());
            Assert.AreEqual(worker.Version, workers[0].Version);
//            Assert.AreEqual(worker.UpdatedAt.ToString(), workers[0].UpdatedAt.ToString());
            Assert.AreEqual(workers[0].WorkflowState, Constants.WorkflowStates.Created);
            Assert.AreEqual(worker.Email, workers[0].Email);
            Assert.AreEqual(worker.FirstName, workers[0].FirstName);
            Assert.AreEqual(worker.LastName, workers[0].LastName);
            Assert.AreEqual(worker.MicrotingUid, workers[0].MicrotingUid);
            Assert.AreEqual(worker.full_name(), workers[0].full_name());

            //Versions
            Assert.AreEqual(worker.CreatedAt.ToString(), workersVersion[0].CreatedAt.ToString());
            Assert.AreEqual(1, workersVersion[0].Version);
//            Assert.AreEqual(worker.UpdatedAt.ToString(), workersVersion[0].UpdatedAt.ToString());
            Assert.AreEqual(workersVersion[0].WorkflowState, Constants.WorkflowStates.Created);
            Assert.AreEqual(worker.Email, workersVersion[0].Email);
            Assert.AreEqual(worker.FirstName, workersVersion[0].FirstName);
            Assert.AreEqual(worker.LastName, workersVersion[0].LastName);
            Assert.AreEqual(worker.MicrotingUid, workersVersion[0].MicrotingUid);
        }
        public async Task Workers_Update_DoesUpdate()
        {
            //Arrange

            Random rnd = new Random();


            workers worker = new workers
            {
                FirstName    = Guid.NewGuid().ToString(),
                LastName     = Guid.NewGuid().ToString(),
                Email        = Guid.NewGuid().ToString(),
                MicrotingUid = rnd.Next(1, 255)
            };

            await worker.Create(dbContext).ConfigureAwait(false);

            //Act

            DateTime?oldUpdatedAt    = worker.UpdatedAt;
            string   oldFirstName    = worker.FirstName;
            string   oldLastName     = worker.LastName;
            string   oldEmail        = worker.Email;
            int?     oldMicrotingUid = worker.MicrotingUid;

            worker.FirstName    = Guid.NewGuid().ToString();
            worker.LastName     = Guid.NewGuid().ToString();
            worker.Email        = Guid.NewGuid().ToString();
            worker.MicrotingUid = rnd.Next(1, 255);

            await worker.Update(dbContext).ConfigureAwait(false);

            List <workers>         workers        = dbContext.workers.AsNoTracking().ToList();
            List <worker_versions> workersVersion = dbContext.worker_versions.AsNoTracking().ToList();

            //Assert

            Assert.NotNull(workers);
            Assert.NotNull(workersVersion);

            Assert.AreEqual(1, workers.Count());
            Assert.AreEqual(2, workersVersion.Count());

            Assert.AreEqual(worker.CreatedAt.ToString(), workers[0].CreatedAt.ToString());
            Assert.AreEqual(worker.Version, workers[0].Version);
//            Assert.AreEqual(worker.UpdatedAt.ToString(), workers[0].UpdatedAt.ToString());
            Assert.AreEqual(worker.Email, workers[0].Email);
            Assert.AreEqual(worker.FirstName, workers[0].FirstName);
            Assert.AreEqual(worker.LastName, workers[0].LastName);
            Assert.AreEqual(worker.MicrotingUid, workers[0].MicrotingUid);
            Assert.AreEqual(worker.full_name(), workers[0].full_name());

            //Version 1 Old Version
            Assert.AreEqual(worker.CreatedAt.ToString(), workersVersion[0].CreatedAt.ToString());
            Assert.AreEqual(1, workersVersion[0].Version);
//            Assert.AreEqual(oldUpdatedAt.ToString(), workersVersion[0].UpdatedAt.ToString());
            Assert.AreEqual(oldEmail, workersVersion[0].Email);
            Assert.AreEqual(oldFirstName, workersVersion[0].FirstName);
            Assert.AreEqual(oldLastName, workersVersion[0].LastName);
            Assert.AreEqual(oldMicrotingUid, workersVersion[0].MicrotingUid);


            //Version 2 Updated Version
            Assert.AreEqual(worker.CreatedAt.ToString(), workersVersion[1].CreatedAt.ToString());
            Assert.AreEqual(2, workersVersion[1].Version);
//            Assert.AreEqual(worker.UpdatedAt.ToString(), workersVersion[1].UpdatedAt.ToString());
            Assert.AreEqual(worker.Email, workersVersion[1].Email);
            Assert.AreEqual(worker.FirstName, workersVersion[1].FirstName);
            Assert.AreEqual(worker.LastName, workersVersion[1].LastName);
            Assert.AreEqual(worker.MicrotingUid, workersVersion[1].MicrotingUid);
        }